diff --git a/.github/ISSUE_TEMPLATE/documentation-issue.yml b/.github/ISSUE_TEMPLATE/documentation-issue.yml deleted file mode 100644 index dc3152e..0000000 --- a/.github/ISSUE_TEMPLATE/documentation-issue.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Documentation Issue -description: Suggest improvements or report problems with the Gephi documentation -title: "[Documentation]: " -labels: [] -body: - - type: markdown - attributes: - value: | - Thanks for taking the time to help improve Gephi's documentation! - - - type: dropdown - id: issue-type - attributes: - label: Issue Type - description: What type of issue are you submitting? - options: - - Documentation Suggestion - - Report a Problem - - Question about Documentation - - Other - validations: - required: true - - - type: dropdown - id: documentation-area - attributes: - label: Documentation Area - description: Which part of the documentation does this concern? - options: - - Gephi Desktop - User Manual - - Gephi Desktop - Plugin Development - - Gephi Desktop - Developer Documentation - - Gephi Lite - User Manual - - Gephi Lite - Integration/Deployment - - Website/General - - Not sure - validations: - required: true - - - type: textarea - id: description - attributes: - label: Description - description: Please provide a clear and detailed description of your suggestion or the problem you encountered. - placeholder: | - - What did you expect to find in the documentation? - - What is missing, unclear, or incorrect? - - What improvements would you suggest? - validations: - required: true - - - type: textarea - id: location - attributes: - label: Location (if applicable) - description: If this concerns a specific page, please provide the URL or page title. - placeholder: "e.g., https://gephi.org/docs/... or 'Import CSV Data' page" - validations: - required: false - - - type: textarea - id: additional-context - attributes: - label: Additional Context - description: Add any other context, screenshots, or examples that might be helpful. - validations: - required: false - diff --git a/.github/workflows/build_website.yml b/.github/workflows/build_website.yml deleted file mode 100644 index 97064c1..0000000 --- a/.github/workflows/build_website.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Deploy to GitHub Pages - -on: - push: - branches: - - master - # Review gh actions docs if you want to further define triggers, paths, etc - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - deploy: - name: Deploy to GitHub Pages - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 22 - cache: npm - - - name: Install dependencies - run: npm ci - - - name: Build website - run: npm run build - - - name: Setup Pages - uses: actions/configure-pages@v5 - - - name: Upload artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ./build - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 0701c80..0000000 --- a/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Dependencies -node_modules - -# Production -build - -# Idea -.idea - -# Generated files -.docusaurus -.cache-loader -yarn.lock - -# Misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/gephi-desktop/static/.nojekyll b/.nojekyll similarity index 100% rename from gephi-desktop/static/.nojekyll rename to .nojekyll diff --git a/404.html b/404.html new file mode 100644 index 0000000..5dda8bd --- /dev/null +++ b/404.html @@ -0,0 +1,16 @@ + + + + + +Page Not Found | Gephi Documentation + + + + +
+
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+ + + + \ No newline at end of file diff --git a/Developer_Documentation/code_style/index.html b/Developer_Documentation/code_style/index.html new file mode 100644 index 0000000..d9c4e37 --- /dev/null +++ b/Developer_Documentation/code_style/index.html @@ -0,0 +1,16 @@ + + + + + +Code Style | Gephi Documentation + + + + +
+
Skip to main content

Code Style

The source code uses the CheckStyle tool to keep the code style consistent.

In addition, we check for code style when building the project using the Maven CheckStyle Plugin. A pull request without proper code style would fail to build.

IntelliJ Setup​

On IntelliJ follow these steps to configure CheckStyle:

  1. Install the CheckStyle plugin
  2. Open Preferences/Settings and go to Editor > Code Style.
  3. Select Project as Scheme and click the settings icon next to it.
  4. Select Import Scheme > CheckStyle Configuration and locate the checkstyle.xml file at the root of Gephi's repository.

You're done. You can now use the built-in Code > Reformat Code tool. The resulting code style will match what is on the Gephi repository.

+ + + + \ No newline at end of file diff --git a/Developer_Documentation/developer_handbook/index.html b/Developer_Documentation/developer_handbook/index.html new file mode 100644 index 0000000..1dc5f47 --- /dev/null +++ b/Developer_Documentation/developer_handbook/index.html @@ -0,0 +1,20 @@ + + + + + +Developer Handbook | Gephi Documentation + + + + +
+
Skip to main content

Developer Handbook

This page explains how to contribute to Gephi's development.

How to download the development version of Gephi​

Prerequisites​

  • Note: Gephi uses multi-platforms tools, so all the following steps should be the same (well, mostly) whatever the OS you are running
  • First, you will need git to download the files.
  • You also need Netbeans 8.0+

Getting the source code​

  • Read the full instructions: [[Checkout Code]]

Now you should have a Gephi fork and a master branch.

Set up your account credentials to Git:

git config --global user.name "Firstname Lastname"
git config --global user.email "your_email@youremail.com"

Compiling and Running Gephi​

Read full instructions: [[Configuring NetBeans]]

How to create and publish your own feature​

Configure your forked repository​

  • You’ve successfully forked the Gephi repository and got the code in a gephi folder by doing

git clone git@github.com:username/gephi.git

When a repo is cloned, it has a default remote called origin that points to your fork on GitHub, not the original repo it was forked from. To keep track of the original repo, you need to add another remote named upstream:

cd gephi
git remote add upstream git://github.com/gephi/gephi.git
git fetch upstream master

This keeps your fork up to date. Each time you run git fetch upstream master it downloads the latest changes from the main repository (not your fork). Note that this does NOT change any of your files. You'll need a merge to actually apply the latest changes to your fork.

Push commits​

When you work on the code, commit often! +The commit process is straightforward. First add all the files you want to include in your commit:

git add .

Then commit these files

git commit -m "This is my first commit hourray"

Run git status often to see what your repository is up to. +Your commits are local. To send them to GitHub run:

git push origin master

Merge from the main repository​

When we update the main gephi repository, your fork doesn't get updated automatically. To merge the latest commits to your fork, run a merge from upstream:

git fetch upstream master
git merge upstream/master

To fetch and merge in one line, simply run

git pull upstream master

When you merge, you may run into conflicts. This is normal if you worked on the same files. +Note that git fetch upstream or git pull upstream will download the data from all branches, which you probably don't need. That's why we add 'master' to specify which branch to fetch to.

Send pull requests​

That's the standard and easiest way to contribute to the project. It's fully integrated into GitHub and well explained here.

How to contribute to the main project​

When you are a member of the gephi team, you have the write rights on the main repository. Instead of submitting pull requests you simply commit to the repository, including the master branch. +Change your upstream push url to authenticated version:

git remote set-url upstream git@github.com:gephi/gephi.git

Push to the master branch. Make sure you pulled to the latest revision before (git pull upstream master).

git push upstream master

+ + + + \ No newline at end of file diff --git a/Developer_Documentation/how_to_build_gephi/index.html b/Developer_Documentation/how_to_build_gephi/index.html new file mode 100644 index 0000000..50ac9b9 --- /dev/null +++ b/Developer_Documentation/how_to_build_gephi/index.html @@ -0,0 +1,16 @@ + + + + + +How to build Gephi | Gephi Documentation + + + + +
+
Skip to main content

How to build Gephi

Follow this guide to start developing the Gephi source code and test your changes.

Introduction​

Netbeans Platform​

The NetBeans Platform is a generic framework for Swing applications. It provides the "plumbing" that, before, every developer had to write themselves—saving state, connecting actions to menu items, toolbar items and keyboard shortcuts; window management, and so on.

Gephi Architecture​

Gephi software architecture is modular and therefore each feature is split into modules. Modules depend on each other, and Gephi modules can either depend on other Gephi modules or Netbeans Platform modules. Plugins developers simply create new modules that contains their code, add dependencies to Gephi modules, and distribute their plugins by creating an NBM package. See Gephi APIs documentation to learn more about the API plugins that can be used by modules.

image

Build Gephi​

Requirements​

  • Java JDK 11 or later
  • Apache Maven version 3.2.2 or later

Checkout and Build the sources​

Navigate to the desired directory you wish to place the project via terminal, then clone the repository:

git clone https://github.com/gephi/gephi
cd gephi

Gephi uses Maven for building. Each module has its POM.xml file and there is a gephi-parent POM file that lists all the modules required to build.

Run this command to build all modules. Note that this process could take some time.

mvn clean install

Run it​

Once built, Gephi can be run from the modules/application folder using a special Maven goal:

Mac/Linux:

>> cd modules/application
>> mvn nbm:cluster-app nbm:run-platform

Windows:

>> cd modules\application
>> mvn nbm:cluster-app nbm:run-platform

Building Gephi in NetBeans​

Apache Netbeans is the default IDE to develop Gephi as it natively integrates with the Netbeans Platform. Loading the project is straightforward.

Open Netbeans and go to File > Open Project to look for the Gephi folder. Then, Open Project. Ensure the checkbox "Open Required Projects" is not selected.

![Opening Gephi](/docs/Developer_Documentation/How-to-build-Gephi/01_Opening Gephi.png)

Right-click on the project and select Clean and Build.

Build

Next, in the Projects tab of the file navigator, select Gephi > Modules > gephi-app and open the application module.

![Open gephi-app](/docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png)

Finally, select Run from this module.

Run

Troubleshooting​

Code changes not taken in account​

When you make code changes in a module, make sure to Clean and Build this module before Running Gephi again as otherwise your changes won't be taken in account.

Building Gephi in IntelliJ IDEA​

As Gephi is a Maven project it is well supported by IntelliJ but requires some tweaks to work properly.

Open IntelliJ and open the Gephi folder. You'll be asked whether you want to Trust this Maven repository. Select Trust Project.

![Trust Maven](/docs/Developer_Documentation/How-to-build-Gephi/05_Trust Maven.png)

IntelliJ then takes some time to scan the project and resolve dependencies. Once completed, you should see Gephi properly listed as a project in the Project pane.

![Project loaded](/docs/Developer_Documentation/How-to-build-Gephi/06_Project loaded.png)

Then, navigate to IntelliJ's preferences panel Build, Execution, Deployment > Build Tools > Maven > Runner and select the option Delegate IDE build/run actions to Maven. This is a critical step.

![Maven delegate config](/docs/Developer_Documentation/How-to-build-Gephi/07_Maven delegate config.png)

Next in the top-level menu select Build > Build Project.

If it fails with and error like javac flag not found --release, you would need to fo back to Build, Execution, Deployment > Build Tools > Maven > Runner and add an Environment Variables with JAVA_HOME=<path of the selected JDK>

Build

Once completed, create a run configuration by following Run > Edit Configurations... in the top-level menu.

Build

Here, select Add new configuration and search for Maven.

![Add Maven Config](/docs/Developer_Documentation/How-to-build-Gephi/10_Add Maven Config.png)

Next, we'll configure two things here. Enter nbm:cluster-app nbm:run-platform into the Command line field and select the modules/application sub-directory into the Working directory chooser. Give Gephi as name for the configuration.

![Set Maven Config](/docs/Developer_Documentation/How-to-build-Gephi/11_Set Maven Config.png)

Finally, you can run Gephi by selecting Run > Run 'Gephi' from the top-level menu.

Run

Troubleshooting​

Debugging​

At this point (IntelliJ 2021.1) debugging doesn't work out of the box. To enable debugging in IntelliJ follow these steps:

  1. Alter your Run configuration and add -Dnetbeans.run.params.debug=-J-agentlib:jdwp=transport=dt_socket,suspend=n,server=n,address=8000 to the command line, after nbm:cluster-app nbm:run-platform.

  2. Create a new Remote JVM Debug Run configuration and select Listen to Remote JVM. Make sure to configure 8000 as the port as well. You can name this configuration Gephi Debug.

Now, start the Gephi Debug by selecting the Debug button. The debugger starts and waits for Gephi to start as well. Then, start Gephi in Debug mode. The debugger should now log Connected to the target VM, address: 'localhost:8000', transport: 'socket' and properly stop at your breakpoints.

+ + + + \ No newline at end of file diff --git a/Developer_Documentation/index.html b/Developer_Documentation/index.html new file mode 100644 index 0000000..601e8cf --- /dev/null +++ b/Developer_Documentation/index.html @@ -0,0 +1,16 @@ + + + + + +Introduction | Gephi Documentation + + + + +
+
Skip to main content
+ + + + \ No newline at end of file diff --git a/Developer_Documentation/localization/index.html b/Developer_Documentation/localization/index.html new file mode 100644 index 0000000..29f39f8 --- /dev/null +++ b/Developer_Documentation/localization/index.html @@ -0,0 +1,16 @@ + + + + + +Localization | Gephi Documentation + + + + +
+
Skip to main content

Localization

Gephi has a localization program to provide the software in your language: this page describes how to contribute! We use the Weblate.

Short and long term team goal​

Lots of people are not comfortable with English. Our goal is to distribute Gephi in French, Spanish and other languages the community requests.

Translation guide​

Get started!​

  1. Create an account on Weblate.
  • Best is to login with your GitHub account so your contributions will be directly linked to your GitHub profile
  1. Take a look at the latest guidelines

  2. Browse the components and start translating!

Important Note: only English texts should be written directly in the source code .properties files. All translations should be made on Weblate platform, otherwise there will be conflicts.

+ + + + \ No newline at end of file diff --git a/Plugins/Add_a_module_panel/index.html b/Plugins/Add_a_module_panel/index.html new file mode 100644 index 0000000..6c7d83c --- /dev/null +++ b/Plugins/Add_a_module_panel/index.html @@ -0,0 +1,16 @@ + + + + + +Add a module panel | Gephi Documentation + + + + +
+
Skip to main content

Add a module panel

How to create a panel for plugin features, similar to Ranking, Graph or Layout? It is easy and fully integrated in Netbeans. Create your panel class and use Netbeans IDE to design the user interface. This page also explains how to work with the Perspective system.

800px-add-module-panel

  • Step 1: Right click on your module and select New > Other... and find Window like showed in the step 1 below. The window wizard asks where to put your panel. You can use already defined modes (i.e. positions):
    • graphmode: Centered, full-size
    • rankingmode: Top Left position
    • layoutmode: Bottom Left position
    • timelinemode: Below others, at the bottom
    • filtersmode: Bottom Right
    • contextmode: Top Right

add-module-panel1

  • Step 2: Then check options about the panel policy showed in step2 and click on Next.

add-module-panel2

  • Step 3: Fill the Class Name, the system shows which files are created. Your panel is a TopComponent subclass.

add-module-panel3

  • Step 4: Click on Finish, files are created and you're invited to design your panel with Netbeans editor.

add-module-panel-design

Your panel is now created and automatically registered. Start Gephi with your plugin and your panel is visible.

Register in a Perspective​

Overview, Data Laboratory and Preview are perspectives in Gephi. A perspective is simply a set of panels that works together. When users change the perspective, some panels are hidden and others are showed. When you define a new panel above, it is not part of a perspective and therefore is always visible, regardless which perspective you are. Follow the steps to associate your panel with a perspective.

  1. Add Desktop Perspective as a new module dependency. Right-click on your module and Properties.
  2. Go to your TopComponent sources and add PerspectiveMember as interface.
  3. Add the @ServiceProvider annotation to be registered by the system and implement methods (note: you will need to add the 'Desktop Perspective' to the Module Dependencies screenshots).
@ServiceProvider(service=PerspectiveMember.class)
public final class MyTopComponent extends TopComponent implements PerspectiveMember {
...

Implement open() and close() methods like below to attach the component to the LaboratoryPerspective, works also for OverviewPerspective and PreviewPerspective:

public boolean open(Perspective perspective) {
return perspective instanceof LaboratoryPerspective;
}
public boolean close(Perspective perspective) {
return true;
}

Specifically use close() method if you want your panel to be visible on several perspectives.

Branding​

Change panel title​

Open the Bundle.properties file in your module and update CTL_MyTopComponent key.

Set Icon​

In the TopComponent sources, uncomment the following line and set the icon path.

setIcon(ImageUtilities.loadImage(ICON_PATH, true));
+ + + + \ No newline at end of file diff --git a/Plugins/Add_a_submenu/index.html b/Plugins/Add_a_submenu/index.html new file mode 100644 index 0000000..c0a402f --- /dev/null +++ b/Plugins/Add_a_submenu/index.html @@ -0,0 +1,16 @@ + + + + + +Add a submenu | Gephi Documentation + + + + +
+
Skip to main content

Add a submenu

From a plugin it is easy to add a menu in the menubar, for instance in Plugins. If you wanna add your action in a already existing menu, like Generate, don't follow this HowTo but look more how to create a new Generator, as the submenus may be created dynamically.

Create Action and Menu​

  • Step 1: Right click on your module and select New > Other... and find Action like showed in the step 1 below. The action wizard will create everything necessary to register your action in the system and create the submenu.

addsubmenu-new-action

  • Step 2: Then click on Next, be sure Always Enabled is checked and Next again.
  • Step 3: In the Menu option, select where you want your submenu to be put. Select Plugins to be put in this menu.

addsubmenu-new-action-gui

  • Step 4: Click on Next and fill the class name, as well as the display name.

addsubmenu-new-action-name

  • Step 5: Finally, click on Next to create the file.

addsubmenu-new-action-result

Result

Fill Action​

The precedent step created the MyAction.java file in your module. Implement something in the action to be executed when users click on the menu. In the example below an empty dialog is showed, using Dialogs API. Include Dialogs API as a dependency of your module if you want to use it.

public final class MyAction implements ActionListener {

public void actionPerformed(ActionEvent e) {
//Do something - for instance display a dialog
DialogDescriptor dd = new DialogDescriptor(new JPanel(), "My Dialog", false, null);
DialogDisplayer.getDefault().notify(dd);
}
}
+ + + + \ No newline at end of file diff --git a/Plugins/Build_a_plugin_without_Gephi_source_code/index.html b/Plugins/Build_a_plugin_without_Gephi_source_code/index.html new file mode 100644 index 0000000..fcd6fb7 --- /dev/null +++ b/Plugins/Build_a_plugin_without_Gephi_source_code/index.html @@ -0,0 +1,16 @@ + + + + + +Build a plugin without Gephi source code | Gephi Documentation + + + + +
+
Skip to main content

Build a plugin without Gephi source code

It is possible to build a plugin using only binary installation of Gephi. The principle is to compile the plugin using the Gephi binary installation as a NetBeans platform.

Prerequisites​

First, you need a Gephi binary installation, such as the one that can be downloaded at https://gephi.org

Registering Gephi as a NetBeans Platform​

Open the "Tools|NetBeans Platforms" dialog, click on "Add Platform...", and choose the directory containing the Gephi binary installation. Note that when the NetBeans IDE detects a NetBeans Platform in a directory, the "Platform Name" label is filled with the identifier of this platform.

By example, in the next picture, a Gephi installation was found in the /opt/gephi-0.8-beta directory.

addnetbeansplatform

Click on the Next button, and change the platform name if required. In that example, it was required to change the platform name to "Gephi 0.8 beta", since the Gephi 0.8 alpha and beta have the same identifier, namely "Gephi 0.8 alpha".

As you can see, two Gephi platforms have been registered.

addnetbeansplatformdone

Build a Plugin​

To build a plugin, it requires to:

  1. Create a module suite, event if your suite contains only one plugin, and make this suite use the Gephi platform;
  2. Create a plugin in the module suite.
  3. Add as dependencies of your modules the NetBeans and Gephi modules containing the functionalities required.

Creation of a Module Suite​

  1. Click on "New|New Project";
    1. In Categories, choose "NetBeans Modules, and "Module Suite" in projects, then click on the Next button;
    2. Configure the name, locations at your will.
    3. Choose the NetBeans Plaform you want to use. Here, you have to choose one of the Gephi platforms you have previously registered.

Creation of a Module​

  1. Click on "New|New Project";
    1. In Categories, choose "NetBeans Modules, and "Module" in projects, then click on the Next button;
    2. Configure the name, locations at your will. Add the new module to the module suite created in the previous step.

gephimoduleend

Display after the creation of the module suite and the module

Add the Gephi Dependencies​

When some Gephi SPI/API are required by your module:

  1. In the Projects window, right-click on the "Libraries" item in the module tree.;
  2. Select the "Add Module Dependency";
  3. In the Filter textfield, enter a part or the totality of the interface/class required by your module.
  4. Select in the Module pane the module containing the interface/class required.

TroubleShootings​

The Gephi SPI/API is not seen when editing and compiling​

If the interfaces and classes are not seen by the editor and the compiler, please process the following steps:

  1. Check the suite is using Gephi as its NetBeans platform by :
    1. Right-click on the suite project, click on the "Properties" item;
    2. In Categories, choose "Libraries". In the right pane, check whether the NetBeans Platform is using a Gephi installation, and change the platform if Gephi is not selected.
    3. In the Platform Modules tree, check the box for the gephi suite of modules, so that all the modules composing Gephi are used when compiling your module.

Module Version not compatible​

If an error message similar to "Cannot compile against a module: org-gephi-data-attributes-api.jar because of dependency: org.gephi.data.attributes.api > 0.8", it means the configuration of your module is requiring a Gephi module more recent than those provided by the Gephi platform used. A solution is to open the "Module Dependencies" dialog by doing:

  1. Right click on the module, choose the "Properties" item;
  2. In Categories, click on "Libraries";
  3. In the "Module Dependencies" tab, select the module causing problem, and edit the requirements on its version number.
+ + + + \ No newline at end of file diff --git a/Plugins/Extend_Data_Laboratory/index.html b/Plugins/Extend_Data_Laboratory/index.html new file mode 100644 index 0000000..149f892 --- /dev/null +++ b/Plugins/Extend_Data_Laboratory/index.html @@ -0,0 +1,16 @@ + + + + + +Extend Data Laboratory | Gephi Documentation + + + + +
+
Skip to main content

Extend Data Laboratory

Introduction​

Data Laboratory section of Gephi provides a good amount of basic and common features to manipulate the graph. But data laboratory can be extended with new features as plugins easily through Data Laboratory API/SPI. All Gephi's default data laboratory features are in Data Laboratory Plugin. Simple and complex examples can be found in this module.

For this tutorial, the SPI packages (org.gephi.datalab.spi) are the most interesting, while org.gephi.datalab.api only contains several controllers that expose general features to be used by plugins or other parts of gephi.

Data Laboratory SPI may seem big, but all interfaces to implement are mostly the same with small changes necessary to define different types of features. Once you know how to create some kind of feature, it is simple to create others.

From now on, we will call data laboratory features 'manipulators' since they manipulate graph data/elements.

Where each type of manipulator appears in Gephi desktop application​

800px-data-lab-overview

merge-strategies

The Manipulator interface​

The Manipulator interface is the part that most of the interfaces that you will implement share in common. Also, all kinds of manipulators can provide an optional GUI just by returning an implementation of the ManipulatorUI interface.

The interfaces that extend Manipulator to provide specific types of manipulators are:

  • NodesManipulator - Defines a context menu action to manipulate one or more selected nodes.
  • EdgesManipulator - Defines a context menu action to manipulate one or more selected edges.
  • GeneralActionsManipulator - Defines a general action not related to any specific graph element. PluginGeneralActionsManipulator is the same but appears in a plugin button that displays a list of general actions (use this when the tool bar does not have enough space for more general actions).
  • AttributeValueManipulator - Defines a context menu action that manipulates a single cell data (pair of AttributeRow and AttributeColumn).
  • AttributeColumnsMergeStrategy - Defines an strategy
  • AttributeRowsMergeStrategy - A very special type of manipulator that defines strategies for merging rows to be used by a nodes/edges manipulator or other parts (does not have a place in Data Laboratory GUI by itself but it is currently used by MergeNodes manipulator).

Only AttributeColumnsManipulator is a bit different from Manipulator because its workflow is not the same as all the previous manipulators, and therefore provides its unique interface plus a AttributeColumnsManipulatorUI.

Create a new Manipulator​

Once we understand the interfaces that define our manipulators, we can create some sample features.

Setting up our data​

Here is where manipulators that need some initial data (like nodes, edges or columns) get it. This method varies for each type of manipulator but is always called before any other method.

Code example for a nodes manipulator:

public void setup(Node[] nodes, Node clickedNode) {
this.nodes=nodes;//Keep the needed data for future operations.
}

In this case, setup receives an array of nodes (selected nodes at right click) and the specific clicked node.

Name and description​

Simply define a name an a description (optional) of what our manipulator does.

public String getName() {
return NbBundle.getMessage(Group.class, "Group.name");//Localized name for nodes grouping action
}

public String getDescription() {
return null;//No description
}

Determining if our manipulator should be eligible to execute​

In determinate conditions we would not like our manipulator to be executed, so we declare it with a boolean. The moment this is called, setup has already been called.

public boolean canExecute() {
return nodes.length == 1;//This manipulator will only be executed with a single node selection
}

Provide an UI​

Here we can return our GUI if desired. We will talk about ManipulatorUIs later.

public ManipulatorUI getUI(){
return new MyUI();//It is not necessary to pass this class to the UI now because ManipulatorUI will be set up later.
//return null if no GUI
}

Ordering and classifying manipulators​

In order to declare the position in a group of manipulators that our manipulator has to appear, we have to provide a number identifying the category(type) and position.

Order of appearance is determined first by the type number and then by position number. Often consecutive elements are given numbers with considerable separation to be able to insert new categories between them.

public int getType() {
return 300;//Will appear in the same category as other manipulators that also return 300
}

public int getPosition() {
return 0;//Will appear in its category before manipulators with a position of 1 or more
}

These are the only methods that could be called before setup and therefore should not depend on context data.

Optional icon​

Just return an icon for the feature or null.

public Icon getIcon() {
return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true);
}

Executing the final action​

This is where our feature does the work once it has been chosen and preferences (if any) have been chosen with or without a GUI.

public void execute() {
for(Node node:nodes){
//Do something with the nodes
}
}

Complete code for Group nodes manipulator​

public class Group extends BasicNodesManipulator {
private Node[] nodes;

public void setup(Node[] nodes, Node clickedNode) {
this.nodes=nodes;
}

public void execute() {
GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class);
gec.groupNodes(nodes);
}

public String getName() {
return NbBundle.getMessage(Group.class, "Group.name");
}

public String getDescription() {
return "";
}

public boolean canExecute() {
GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class);
return gec.canGroupNodes(nodes);
}

public ManipulatorUI getUI() {
return null;
}

public int getType() {
return 300;
}

public int getPosition() {
return 0;
}

public Icon getIcon() {
return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true);
}
}

Nodes and edges manipulators​

Both of these types of manipulators are shown as context menu actions in a popup menu, and benefit from some special settings defined in the ContextMenuItemManipulator interface. Their principal extra feature is the possibility to have subitems, as can be observed in the next image.

sub-items

It defines 3 methods:

public ContextMenuItemManipulator[] getSubItems() {
return null;//Return subitems
}

Note that:

  • Most nodes/edges manipulators won't need to have subitems.
  • Subitems can also return more subitems.
  • Subitems will be set up with the proper data like their parents.
  • If a item/subitem returns subitems, it will never be executed, their subitems will.
  • execute method of the specific clicked subitem will be called.
public boolean isAvailable() {
return true;//Indicates if a subitem has to appear in the menu at all (enabled or not)
}

public Integer getMnemonicKey() {
return null;//Shorcut associated key for this item
}

Most manipulators won't need this, so a simple class like the following can be extended by all your manipulators to avoid repeating code:

public abstract class BasicNodesManipulator implements NodesManipulator{

public boolean isAvailable() {
return true;
}

public ContextMenuItemManipulator[] getSubItems() {
return null;
}

public Integer getMnemonicKey() {
return null;
}
}

Visualization API has an SPI for adding context menu actions (GraphContextMenuItem) to nodes like DataLaboratory does with NodesManipulator. Note that they share the interface ContextMenuItemManipulator from Data Laboratory API, so they are compatible, being possible to reuse actions on nodes for Overview and Data Laboratory.

AttributeColumnsManipulators​

What makes different these manipulators is that, instead oh having data set up and then canExecute being called, eligibility is tested for every column and is later executed for the selected column (showing first the UI if necessary).

Here is a complete example of a real feature (columns duplication):

public class DuplicateColumn implements AttributeColumnsManipulator {
private String title;
private AttributeType columnType;

public void execute(AttributeTable table, AttributeColumn column) {
Lookup.getDefault().lookup(AttributeColumnsController.class).duplicateColumn(table, column, title, columnType);
}

public String getName() {
return NbBundle.getMessage(DuplicateColumn.class, "DuplicateColumn.name");
}

public String getDescription() {
return "";
}

public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) {
return true;
}

public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) {
return new DuplicateColumnUI();
}

public int getType() {
return 0;
}

public int getPosition() {
return 400;
}

public Image getIcon() {
return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png");
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public AttributeType getColumnType() {
return columnType;
}

public void setColumnType(AttributeType columnType) {
this.columnType = columnType;
}
}

Column type and title are set through DuplicateColumnUI.

Builders (how to get our plugins to appear in data laboratory perspective)​

Like in other parts of Gephi, api/spi implementations are exposed with Netbeans Lookup API.

This is done with the [[@ServiceProvider]] annotation. Since this annotation returns a singleton of the service, in order to help the programmer avoid problems with previously set up data, some of the manipulators require a builder that returns instances of the manipulator as the service.

But other manipulators are directly exposed as the service with the annotation.

For example, to declare a GeneralActionsManipulator, it is sufficient with:

@ServiceProvider(service = GeneralActionsManipulator.class)
public class AddEdgeToGraph implements GeneralActionsManipulator {
...

But for a NodesManipulator you need to create a builder and give it the annotation (not to the manipulator):

@ServiceProvider(service=NodesManipulatorBuilder.class)
public class SetNodesSizeBuilder implements NodesManipulatorBuilder {
public NodesManipulator getNodesManipulator() {
return new SetNodesSize();
}
}
Manipulator typeNeeds a builder
AttributeColumnsManipulator
GeneralActionsManipulator
AttributeColumnsMergeStrategy✓
EdgesManipulator✓
NodesManipulator✓
AttributeRowsMergeStrategy✓
AttributeValueManipulator✓

Providing a GUI​

When your feature needs a GUI you only need to return a ManipulatorUI implementation capable of configuring your feature extra data. Let's see what each method should do with an example:

public class MyManipulatorUI extends JPanel implements ManipulatorUI {
private MyManipulator manipulator;
private DialogControls dialogControls;

void setup(Manipulator m, DialogControls dialogControls){
//Receive our manipulator instance:
manipulator = (MyManipulator) m; //We know the type of manipulator we are going to receive so cast is safe
//And an object to control the dialog if necessary
//(for now it only is able to enable/disable the Ok button of the dialog for validation purposes)
this.dialogControls = dialogControls;
}

void unSetup(){
//Called when the dialog is closed, canceled or accepted. Pass necessary data to the manipulator:
manipulator.setSomeOption(someValue);
...
}

String getDisplayName(){
//Provide title for the dialog:
return manipulator.getName();//For example, the manipulator name
}

public JPanel getSettingsPanel(){
//Provide the JPanel to create the UI dialog
//A good practice is to extend JPanel and just return this object
return this;
}

/**
* Indicates if the created dialog has to be modal
*/
public boolean isModal(){
return true;
}
}

Manipulators Summary​

manipulators

+ + + + \ No newline at end of file diff --git a/Plugins/Plugin_Quick_Start/index.html b/Plugins/Plugin_Quick_Start/index.html new file mode 100644 index 0000000..483c45f --- /dev/null +++ b/Plugins/Plugin_Quick_Start/index.html @@ -0,0 +1,22 @@ + + + + + +Plugin Quick Start | Gephi Documentation + + + + +
+
Skip to main content

Plugin Quick Start

THIS PAGE IS OUTDATED, PLEASE CHECK THE README AT https://github.com/gephi/gephi-plugins

This HowTo covers how to get started with Gephi plugin development. Make sure you have Git and GitHub set up before starting.

Checkout the gephi-plugins code​

We prepared an out of the box development environment on the gephi-plugins repository on GitHub. Once downloaded it doesn't need anything else to run a development version of Gephi. +Fork the project on GitHUb and clone the repository (replace username with your login):

git clone git@github.com:username/gephi-plugins.git

Now you can open the project in Netbeans. Gephi development happens in Netbeans because Gephi is based on the awesome Netbeans Platform. The gephi-plugins folder is automatically recognized when opening a project in Netbeans. Right click on the project and select Run to start Gephi.

You can also run Gephi from the command-line using the ant run command.

Create a plugin​

  1. In Netbeans, expand the Gephi Plugins project and right-click on Modules. Select Add New...
  • Enter the plugin name: MyFirstPlugin and click Next.
  • In the next panel, enter a unique codebase name, for instance org.myname.myfirstplugin and click Finish.
  • In the Netbeans Project tree, you should see now your module MyFirstPlugin. Expand it to find its Source Package. Here you will place your code.

image +New module Step 1

image +New module Step 2

image +New module in the Projects tree

You created a plugin, which doesn't do anything for the moment. When you build Gephi, your plugin is now fully integrated. It appears in the Plugin Center (Tools > Plugin).

Brand your plugin​

  1. Right-click on your plugin project MyFirstPlugin and select Properties.
  • Select Display on the left panel and fill Display Category, Short Description and Long Description.
  • Select Packaging on the left panel and fill License, Homepage (if exists) and Author information.
  • Click on OK to validate changes.

image +Branding Step 1

image +Branding Step 2

Distribute your plugin​

When you successfully tested your plugin, it's time to create a release.

  1. Right-click on the project and select Package As and then NMBs.
  • Go to the build folder and find the created plugin-release.zip file. Individual NBM files (one per each module) are packaged in this zip.

Now you can publish you plugin on the Gephi Marketplace.

+ + + + \ No newline at end of file diff --git a/Plugins/Spigot_importer_with_Wizard/index.html b/Plugins/Spigot_importer_with_Wizard/index.html new file mode 100644 index 0000000..bd19504 --- /dev/null +++ b/Plugins/Spigot_importer_with_Wizard/index.html @@ -0,0 +1,16 @@ + + + + + +Spigot importer with Wizard | Gephi Documentation + + + + +
+
Skip to main content

Spigot importer with Wizard

Introduction​

This HowTo shows in about 20 minutes how to create a new spigot in Gephi. Spigots are like file importers, but with a different datasource. Spigots are the best way to import data from various data sources like Web Services, APIs, custom Databases or anything Java can read from. Like Importers, spigots push data to a Container, which hosts all data collected (i.e. nodes, edges and attributes). Moreover, spigots user interface supports Wizards, which makes it easy to have rich settings and a consistent flow.

spigot_menu

Import Spigot Menu

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MySpigot, you can start this tutorial.

One can find spigot importer examples in the Gephi source code.

Create a new Importer​

Set Dependencies​

Add [[Import API]], [[LongTask API]], [[Utilities API]], [[Dialogs API]] and [[Lookup]] modules as dependencies for your plugin module MySpigot. See [[How To Set Module Dependencies]].

Create SpigotImporterBuilder​

Importer Builder is a factory class for building the important instance, all Importers should have their own builder.

Create a new builder class, for instance MySpigotBuilder that implements SpigotImporterBuilder.

Leave the buildImporter() method empty for the moment and fill the getName() methods like below.

public String getName() {
return "My Spigot";
}

public SpigotImporter buildImporter() {
return null;
}

Add @ServiceProvider annotation to your builder class. Add the following line before MySpigotBuilder class definition, as shown below:

@ServiceProvider(service = SpigotImporterBuilder.class)
public class MySpigotBuilder implements SpigotImporterBuilder {
...

Create SpigotImporter​

The importer is where the job will be done. Create a new spigot importer class, for instance MySpigot that implements SpigotImporter.

For more details, have a look at ContainerLoader and Report documentation.

Add also LongTask interface to your class, in order you will be able to use progress and cancel management.

Your MyImporter would look like this:

public class MySpigot implements SpigotImporter, LongTask {

private ContainerLoader container;
private Report report;
private ProgressTicket progressTicket;
private boolean cancel = false;

public boolean execute(ContainerLoader loader) {
this.container = loader;
this.report = new Report();
//Import done here
return !cancel;
}

public ContainerLoader getContainer() {
return container;
}

public Report getReport() {
return report;
}

public boolean cancel() {
cancel = true;
return true;
}

public void setProgressTicket(ProgressTicket progressTicket) {
this.progressTicket = progressTicket;
}
}

The infrastructure is set, the container for pushing data, the report for pushing logs and errors, and the progress management.

Look at File Importers examples or Spigots examples code to learn how to push data to the container.

Finish the builder​

Go back to the MySpigotBuilder and complete buildImporter() method:

public SpigotImporter buildImporter() {
return new MySpigot();
}

Wizard UI​

You will create a ImporterWizardUI class for your importer and learn how to create a wizard to configure your MySpigot.

A wizard is a set of panels, which follow each other with conditions. Consult the Wizard API Javadoc. One can also find a more general tutorial on Netbeans Wizards here. The ImporterWizardUI class will provide the panels and the title of the spigot importer, as well as its description. But first, create a wizard panel.

spigot_howto1

My Spigot

Create Wizard Panel​

Create a new Java Panel class named MySpigotWizardPanel1. Go to File > New File > Swing GUI Forms > JPanel Form.

Design your interface, by adding check boxes, text field etc. and go to the Source view.

spigot_howto_design

Create an unsetup() method like below. This method will be called when the user leaves the wizard to actually configure your Spigot with the settings made in the UI.

public void unsetup(MySpigot importer) {
//Configure the importer

//Example
//importer.setOption(optionCheckbox.isSelected());
}

We will now edit this panel to implement the WizardDescriptor.Panel interface.

See below how to implement this class

public class MySpigotWizardPanel1 extends javax.swing.JPanel implements WizardDescriptor.Panel {

private List<ChangeListener> listeners; //these allow you to tell Gephi when UI changes are made


//Generated JPanel code goes here....


public Component getComponent() {
return this;
}

@Override
public String getName() {
return "Select Datasource"; //this will be the title of the panel in the wizard
}

@Override
public HelpCtx getHelp() {
return HelpCtx.DEFAULT_HELP;
}

/*
* You can use a settings object to keep track of state. Normally the
* settings object will be the WizardDescriptor, so you can use
* WizardDescriptor.getProperty & putProperty to store information entered
* by the user.
*/
public void readSettings(Object settings) {
}

public void storeSettings(Object settings) {
}

public boolean isValid() {
return true; //if you implement the change listeners properly, this should contain actual logic
}

@Override
public void addChangeListener(ChangeListener cl) {
if (listeners == null) {
listeners = new ArrayList();
}

listeners.add(cl);
}

@Override
public void removeChangeListener(ChangeListener cl) {
listeners.remove(cl);
}
}

Create ImporterWizardUI​

Create a new spigot wizard UI class, for instance MyImporterWizardUI that implements ImporterWizardUI.

This class is a singleton service, and registers your wizard in the system. It has two important methods: setup() and unsetup. The unsetup() method is called when the wizard is closed and is responsible for configuring the actual Spigot importer. In other words, the UI push settings values to the importer not the contrary.

The sample below will help you:

public class MySpigotWizardUI implements ImporterWizardUI {

private Panel[] panels = null;

@Override
public String getDisplayName() {
return "My Spigot Importer";
}

@Override
public String getCategory() {
return "My Spigot";
}

@Override
public String getDescription() {
return "My Spigot imports very cool data";
}

@Override
public Panel[] getPanels() {
if (panels == null) {
panels = new Panel[1];
panels[0] = new MySpigotWizardPanel1();
}
return panels;
}

@Override
public void setup(Panel panel) {
//Before opening the wizard
}

@Override
public void unsetup(SpigotImporter importer, Panel panel) {
//When the wizard has been closed
((MySpigotWizardPanel1) ((Panel) panels[0]).getComponent()).unsetup((MySpigot)importer);

panels = null;
}

@Override
public boolean isUIForImporter(Importer importer) {
return importer instanceof MySpigot;
}
}

Notice how the unsetup() method of MySpigotWizardPanel1 is called.

Ideally, this UI class is also responsible for saving the settings, in order to have the same settings the second time the spigot is used. For doing that, use the setup() method to load parameters in the panels.

Register the UI​

Add [[@ServiceProvider]] annotation to your UI class. Add the following line before MySpigotWizardUI class definition, as shown below:

@ServiceProvider(service = ImporterWizardUI.class)
public class MySpigotWizardUI implements ImporterWizardUI{
...
+ + + + \ No newline at end of file diff --git a/Plugins/code_sharing_strategy/index.html b/Plugins/code_sharing_strategy/index.html new file mode 100644 index 0000000..768adf4 --- /dev/null +++ b/Plugins/code_sharing_strategy/index.html @@ -0,0 +1,17 @@ + + + + + +Code Sharing Strategy | Gephi Documentation + + + + +
+
Skip to main content

Code Sharing Strategy

Code sharing​

Some basic rules how we code in Gephi and how we use Netbeans:

Using libraries​

If you use libraries, wrap them into one or several modules. Further information here: http://wiki.netbeans.org/DevFaqWrapperModules

The module codebase should be org.gephi.lib.NAME.

Please send email to DEV mailing-list about that change and include it in the ChangeLog, not to forgot to update the license page on the website.

Code formatting​

Always format all the code you submit. Use the Netbeans format feature (right click > Format) with default parameters.

License​

This is the Gephi offical license.

 Copyright 2008-2012 Gephi
Authors : YOUR NAME <yourname@domain.org>
Website : http://www.gephi.org

This file is part of Gephi.

DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

Copyright 2012 Gephi Consortium. All rights reserved.

The contents of this file are subject to the terms of either the GNU
General Public License Version 3 only ("GPL") or the Common
Development and Distribution License("CDDL") (collectively, the
"License"). You may not use this file except in compliance with the
License. You can obtain a copy of the License at
http://gephi.org/about/legal/license-notice/
or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the
specific language governing permissions and limitations under the
License. When distributing the software, include this License Header
Notice in each file and include the License files at
/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the
License Header, with the fields enclosed by brackets [] replaced by
your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"

If you wish your version of this file to be governed by only the CDDL
or only the GPL Version 3, indicate your decision by adding
"[Contributor] elects to include this software in this distribution
under the [CDDL or GPL Version 3] license." If you do not indicate a
single choice of license, a recipient has the option to distribute
your version of this file under either the CDDL, the GPL Version 3 or
to extend the choice of license to its licensees as provided above.
However, if you add GPL Version 3 code and therefore, elected the GPL
Version 3 license, then the option applies only if the new code is
made subject to such option by the copyright holder.

Contributor(s):

Portions Copyrighted 2011 Gephi Consortium.

Please put your name on the top of the license at 'YOUR_NAME' and put this license in all files you own.

You can directly include license texts in Netbeans using Tools>Templates.

Javadoc​

All open APIs (public interfaces) should have a complete Javadoc. This is important but commit to it only when you estimate a module is finished. +In the mean time, be sure your real name appears completely in all classes you own. This is the minimum thing you should add. As for license, it can be done with Netbeans.

It is recommended to read the Javadoc Good practices. It gives guidance and rules to make good Javadoc.

Module name convention​

Please respect new modules naming convention:

  • No whitespace
  • Add Wrapper in case of a library wrapper

Codebase convention​

New modules should follow the following codebase rules:

First HeaderSecond Header
APIorg.gephi.NAME.api
API Implementationorg.gephi.NAME
SPIorg.gephi.NAME.spi
SPI Implementationorg.gephi.NAME.plugin
SPI Implementation UIorg.gephi.ui.NAME.plugin
Desktop UIorg.gephi.desktop.NAME

Module branding​

Branding options for Netbeans modules. Set it from module Properties > Display.

  • Display name can have whitespace
  • Display Category:
    • Gephi Core for all API and Impl modules
    • Plugin for all Plugin and PluginUI modules
    • Libraries for all libs
    • Gephi UI for all Desktop modules

And don't forget to set the license and author in the Build > Packaging settings.

License should be ../gpl-3.0.txt and Author Gephi.org

Distributed development​

Get started​

Follow these links to get started with the development environment:

Git at Gephi​

There is a master branch on the Gephi repository which we call the trunk. This is the main branch where all the daily work happen.

When we are releasing a major version we create a release branche (ex: 0.8) from master. These branches shouldn't get new features, only bug fixes. After the version is released, bugs that don't require to break compatibility of make significant changes (add/removed modules etc) should be developed in this branch and released as hot fixes.

We like to always have the master branch working and developers should always make sure the code builds before commit.

Before commit​

'''Some simple steps to make sure it's done right:'''

  • Run git status to see what's going on.
  • Run git pull upstream BRANCH to get latest updates from GitHub.
  • Run git add ... on the files you want to commit. If you removed some files run git rm .... This step is called 'staging' and add stuff to your commit.
  • Run git status again. That lists the files you modified and are part of your next commit.
  • Make sure you didn't forget any essential file.
  • Run git commit -m "message" with a message with enough information for a fellow to understand.

If you 'staged' something you didn't ant to stage run git reset FILES. If you want to reset a file changes run git checkout FILE. This will revert any changes you made to that files.

'''Some things not to do:'''

  • Don't add anything to the .gitignore file unless you've been told to.
  • Don't commit changes in modules you are not working on. It happens that Netbeans will override some random xml or properties file. Don't commit those and revert them use 'git checkout'.
  • If you encounter a conflict and you're not sure how to fix it, don't try random things. Ask we can help :-)

Command line is fine for Git but you can also use TortoiseGit on Windows or [http://gitx.frim.nl/ GitX] if you're on Mac. A Netbeans Git module exists but is still in beta, so you should avoid using it.

Merging branches​

The master branch contains the trunk and all work happens there. When all developers work on separate modules it's relatively easy to manage and it's convenient to all work on the same code. However it gets complicated really fast when developers work on APIs, rewrite modules or refactor code. Therefore, for any significant work developers should create feature branches. This is typically the case for Google Summer of Code projects or large code changes.

To create a new branch:

  • Make sure you're on the master branch by running git branch
  • Run git branch NAME to create the branch. Run git branch. Your new branch should appear.
  • Run git checkout NAME to go to your branch
  • Run git push origin NAME to push it to GitHub

Features branches typically need to merge the master branch time to time to get up to date with core developments. To merge the master branch:

  • Make sure you're on your feature branch by running git branch. If not, run git checkout BRANCH
  • Run git pull upstream master. That will pull and merge the master branch.

The merge will fail if some of the files Git want to merge have uncommited changes. IF that happens, commit your changes and in most cases Git will do the merge automatically.

The master branch merges hotfixes in release branches when done.

Hot fixes​

Gephi is distributed through a installation package but also online as NBM packages. Thanks to Netbeans Platform, Gephi has the capability to update itself using the NBMs packages we store on our server. We call this the 'Update Center' and it is the same system we use to distribute third party plug-ins. It works like this. There is a XML files with all modules and version on our server and Gephi can read that files and compare online versions with it's local versions. If some modules have been updated the user is asked to update.

This capability allows us to deploy hot fixes. When a bug is fixed and the version of the module is incremented the NBM file of the module is created and uploaded to our server. This is process is manual at the moment but it just takes a few minutes. We have done it many times to deliver bug fixes as soon as they are ready without waiting for a release.

All bugs for hot fixes should be developed in release branches. For instance, if the latest stable release is 0.8 and we want to fix an issue and release it as hotfix the bug should be fixed in the 0.8 branch. The branch should be then merged to master to make sure the fix is in trunk as well.

Auto-Update​

Thanks to Netbeans Platform, Gephi has an auto-update feature. Update is done according to the "Specification version" for each module. Therefore, if you made a change that will be deployed through auto-update, increment the Specification Version of all modules you touched.

+ + + + \ No newline at end of file diff --git "a/Plugins/de\314\201marrage-rapide-fr/index.html" "b/Plugins/de\314\201marrage-rapide-fr/index.html" new file mode 100644 index 0000000..c03a05c --- /dev/null +++ "b/Plugins/de\314\201marrage-rapide-fr/index.html" @@ -0,0 +1,43 @@ + + + + + +Démarrage rapide (FR) | Gephi Documentation + + + + +
+
Skip to main content

Tutoriel Gephi
Démarrage rapide

Bienvenue sur ce tutoriel. Vous apprendrez ici les étapes fondamentales pour visualiser et manipuler un réseau dans Gephi.

Ce tutoriel se base sur la version 0.7alpha2 de Gephi.
+Télécharger Gephi

Import de fichiers

Ouverture d’un fichier graphe​

  • Téléchargez le fichier LesMiserables.gexf
  • Dans la barre de menu, allez dans le menu Fichier et Ouvrir...

~~ Image : tutorial_quickstart1_FR ~~

Format des graphes
- GEXF - GraphML - Pajek NET - GDF - GML - Tulip TLP - CSV - ZIP compressé

Rapport d’import​

  • Lorsque votre fichier s’ouvre, le rapport récapitule les données trouvées et les problèmes rencontrés.
    • Nombre de noeuds
    • Nombre de liens
    • Type de graphe
* Cliquez sur **OK** pour valider et visualiser le graphe.

~~ Image : tutorial_quickstart2_FR ~~

Affichage du graphe​

Nous avons importé le fichier de données LesMiserables.gexf1. Il s’agit du réseau pondéré des apparitions simultanées des personnages du roman Les Misérables de Victor Hugo.
+~~ Image : ? ~~

Les noeuds sont d’abord placés de manière aléatoire, la présentation que vous voyez peut donc différer légèrement.

1D. E. Knuth, The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley, Reading, MA (1993)

Visualisation

Visualisation du graphe​

  • Utilisez votre souris pour vous déplacer dans la visualisation et modifier son échelle.
    • Zoom : Molette de la souris
    • ~~ Image : ? ~~
    • Panoramique : Glisser à droite
    • ~~ Image : ? ~~
* L’**échelle du poids des liens** se trouve en bas de la fenêtre.

~~ Image : gephi_configure_labels__bisFR ~~

  • Si vous ne voyez plus votre graphe, réinitialisez l’échelle.

~~ Image : ? ~~

Spatialisation

Spatialisation du graphe​

La fonction principale des algorithmes de spatialisation est de définir la forme du graphe.

  • Repérez le module Spatialisation dans le volet à gauche de l’écran.
  • Sélectionnez Force Atlas.
    Vous pouvez voir les propriétés de la spatialisation sous son nom. Conservez les valeurs.
  • Pour lancer l’algorithme, cliquez sur Exécuter.
Algorithmes de spatialisation
La spatialisation des graphes est généralement réalisée à partir d’algorithmes basés sur les forces. Ils suivent un principe simple : les noeuds reliés s’attirent et les noeuds non reliés se repoussent.

Contrôle de la spatialisation​

Les propriétés de spatialisation vous permettent de contrôler l’algorithme afin de générer une représentation esthétique.
+~~ Image : tutorial_quickstart9_FR ~~

  • Pour agrandir le graphe, réglez la Force de répulsion sur 10 000.
  • Pour valider la valeur modifiée, appuyez sur la touche Entrée de votre clavier.
  • Vous pouvez maintenant Arrêter l’algorithme.

Affichage du graphe spatialisé​

~~ Image : ? ~~

Classement (par couleur)

Classement (par couleur)​

Le module Classement vous permet de configurer la couleur et la taille d’un noeud.

  • Cliquez sur le module Classement en haut à gauche de l’écran.
  • Sélectionnez Degré comme paramètre de classement.

~~ Image : tutorial_quickstart12_FR ~~

Le panneau de configuration suivant s’affiche :
+~~ Image : tutorial_quickstart13_FR ~~

  • Cliquez sur Appliquer pour afficher le résultat.

Configuration des couleurs​

~~ Image : tutorial_quickstart13_FR ~~

  • Déplacez la souris sur le curseur de dégradé.
    ~~ Image : ? ~~
  • Pour configurer la couleur, double-cliquez sur les triangles.
    ~~ Image : ? ~~
Palette
Pour utiliser la palette, double-cliquez sur le volet. ~~ Image : tutorial_quickstart17_FR + ? ~~

Tableau des résultats du classement​

Vous pouvez voir les valeurs du classement en affichant le tableau des résultats. Le noeud Valjean possède 36 liens et est le plus connecté du réseau.

  • Activez l’affichage des résultats sous forme de tableau.
  • Cliquez à nouveau sur le bouton Appliquer.

~~ Image : tutorial_quickstart18_FR ~~

Métriques

Métriques​

Nous allons calculer la longueur de chemin moyenne pour le réseau. Cela permet de calculer la longueur du chemin entre toutes les paires de noeuds et de fournir des informations sur la distance entre les noeuds.

  • Dans le volet droit, cliquez sur le module Statistiques.
  • Cliquez sur Exécuter en face de Plus courts chemins.

~~ Image : tutorial_quickstart19_FR ~~

Métriques disponibles
- Diamètre - Plus courts chemins - Coefficient de Clustering - PageRank - HITS - Betweeness Centrality - Closeness Centrality - Excentricité - Détection de communauté (Modularité)

Configuration des métriques​

Le panneau de configuration s’affiche.
+~~ Image : tutorial_quickstart20_FR ~~
+Pour calculer la métrique, sélectionnez Dirigé, puis cliquez sur OK.

Résultat des métriques​

À la fin du traitement, le résultat de la métrique est affiché dans un rapport.
+~~ Image : tutorial_quickstart21 ~~

Classement (par taille)

Classement (par taille)​

Les métriques génèrent des rapports généraux ainsi que les résultats pour chaque noeud.
+Ainsi, trois nouvelles valeurs ont été créées par l’algorithme Plus courts chemins.

  • **Betweeness Centrality**
  • **Closeness Centrality**
  • **Excentricité**
  • Retournez sur l’onglet Classement.
  • Sélectionnez Betweeness Centrality dans la liste déroulante.
    ~~ Image : tutorial_quickstart22_FR ~~
    Cette métrique fait ressortir les noeuds les plus importants dont la fréquence est la plus élevée.

À présent, paramétrez la taille des noeuds. L’indicateur de Degree (Degré) est toujours représenté par des couleurs.

  • Pour définir la taille, sélectionnez l’icône en forme de diamant dans la barre d’outils.
  • Définissez la taille minimale sur 10 et la taille maximale sur 50.
    ~~ Image : tutorial_quickstart23_FR ~~
  • Pour voir le résultat, cliquez sur Appliquer.

Graphe avec différenciation de couleurs et de tailles​

~~ Image : ? ~~
+Couleur : Degree (Degré)
+Taille : Métrique Betweeness Centrality

Nouvelle spatialisation

Nouvelle spatialisation​

La spatialisation n’est pas totalement satisfaisante. En effet, des noeuds de grande taille chevauchent parfois des noeuds plus petits.
+L’algorithme Force Atlas dispose d’une option qui permet de prendre la taille des noeuds en considération lors de la spatialisation.

  • Retournez sur le volet Spatialisation.
  • Cochez l’option Ajustement par taille, puis exécutez à nouveau l’algorithme pendant quelques instants.
  • Les noeuds ne se chevauchent plus désormais.

~~ Image : tutorial_quickstart26_FR ~~

Affichage des labels

Affichage des labels​

Explorons le réseau plus en détails maintenant que les couleurs et la taille mettent en valeur les noeuds importants.
+~~ Image : tutorial_quickstart27_FR ~~

  • Affichez les labels des noeuds.
    ~~ Image : tutorial_quickstart ~~
  • Paramétrez l’affichage des labels afin que leur taille soit proportionnelle à celle des noeuds.
    ~~ Image : gephi_configure_labels__bisbisFR ~~
  • Pour régler la taille des labels, faites glisser le curseur de l’échelle.
    ~~ Image : gephi_configure_labels__bisbisbisFR ~~

Détection de communauté

Détection de communauté​

La capacité à détecter et à étudier les communautés est essentielle à l’analyse du réseau. Dans notre exemple, nous souhaitons colorer les groupes de noeuds.
+Gephi utilise la méthode Louvain1, disponible dans le volet Statistiques.
+Cliquez sur Exécuter en regard de la ligne Modularité.
+~~ Image : tutorial_quickstart28_FR ~~

  • Sélectionnez Aléatoire dans le volet.
  • Pour lancer la détection, cliquez sur OK. +~~ Image : tutorial_quickstart29_FR ~~
1Blondel V, Guillaume J, Lambiotte R, Mech E (2008) Fast unfolding of communities in large networks. J Stat Mech : Theory Exp 2008:P10008. (http://findcommunities.googlepages.com)

Partition

Partition​

L’algorithme de détection de communauté a créé une valeur de Modularity Class (classe de modularité) pour chaque noeud.
+Le module Partition peut utiliser ces nouvelles données pour colorer les communautés.

  • Dans le volet gauche, cliquez sur le module Partition.
  • Pour remplir la liste de partitions, cliquez sur le bouton Rafraîchir.
    ~~ Image : tutorial_quickstart30_FR ~~
Comment visualiser les colonnes affichant les noeuds et les liens ?
Pour afficher les colonnes et les valeurs des noeuds et des liens, consultez le **Tableau de données**. Pour actualiser le tableau, cliquez sur l’onglet **Laboratoire des données**, puis cliquez sur **Noeuds**.
* Dans la liste de partitions, sélectionnez **Modularity Class** (classe de modularité). Dans l’exemple ci-dessous, neuf communautés ont été trouvées. Le nombre de communautés est variable. Une couleur a été définie au hasard pour chaque identifiant de communauté. ~~ Image : tutorial_quickstart31_FR ~~ * Pour afficher les noeuds en couleur, cliquez sur **Appliquer**. Pour accéder à la fonction **Générer les couleurs aléatoirement**, cliquez sur le volet à l’aide du bouton droit de la souris. ~~ Image : tutorial_quickstart33_FR ~~

Nouvelle apparence du réseau​

~~ Image : ? ~~

Filtrage

Filtrage​

Le filtrage constitue la dernière manipulation. Il est possible de créer des filtres permettant de masquer certains noeuds et liens du réseau. Dans cet exemple, nous allons créer un filtre afin de supprimer les feuilles, c’est-à-dire les noeuds à lien unique.
+~~ Image : tutorial_quickstart34_FR ~~

  • Dans le volet droit, cliquez sur le module Filtres.
  • Dans la catégorie Topologie, sélectionnez Plage de degrés.
    ~~ Image : tutorial_quickstart35_FR ~~
  • Sous Requêtes, faites glisser l’option sur Glissez le filtre ici.
    ~~ Image : tutorial_quickstart36_FR ~~
  • Pour activer le filtre, cliquez sur Plage de degrés. Le volet des paramètres s’affiche.
    ~~ Image : tutorial_quickstart37_FR ~~
    Ce volet comprend un curseur de réglage de la plage de degrés ainsi qu’un graphique représentant les données, ici la répartition par degrés.
    ~~ Image : tutorial_quickstart39_FR ~~
  • Déplacez le curseur de gauche afin de régler le degré minimum sur 2.
  • Pour appliquer le filtre, cliquez sur le bouton Filtrer.
    Les noeuds dont le degré est inférieur à 2 sont désormais masqués.
Astuce
Pour modifier les limites des degrés, double-cliquez sur les valeurs correspondantes. ~~ Image : ? ~~

Réseau filtré​

~~ Image : ? ~~
+La manipulation est terminée. Nous allons à présent prévisualiser la modélisation et préparer l’export.

Prévisualisation

Prévisualisation​

  • Avant d’exporter le graphe au format SVG ou PDF, allez sur la **Prévisualisation** pour :
    • obtenir un aperçu exact du graphe ;
    • y apporter la touche finale.
* Dans le ruban, sélectionnez l’onglet **Prévisualisation** : ~~ Image : tutorial_quickstart41_FR ~~ * Pour afficher la prévisualisation, cliquez sur **Rafraîchir**. ~~ Image : tutorial_quickstart_preview_FR ~~
Astuce
Si le graphe est trop grand, vous pouvez afficher un graphe partiel en déplaçant le curseur du **Ratio** à 50 % ou à 25 %.
  • Dans la catégorie Labels de noeud, activez la case à cocher Afficher les labels.
  • Cliquez sur Prévisualiser.
    ~~ Image : tutorial_quickstart44_FR ~~
    Dans les Paramètres d’aperçu, cliquez sur la liste de Réglages prédéfinis et essayez différentes configurations.

Prévisualisation du graphe​

~~ Image : ~~

Export

Export au format SVG​

À partir de la Prévisualisation, cliquez sur SVG en face de Export.
+~~ Image : tutorial_quickstart43_FR ~~

Tout comme les PDF, les fichiers SVG sont des graphiques vectoriels. Les images peuvent facilement être redimensionnées. Il est donc possible de les imprimer ou de les intégrer à des présentations en haute résolution.

Les fichiers SVG peuvent être modifiés à l’aide du logiciel Inkscape ou Adobe Illustrator.
+~~ Image : ~~

Captures d’écran en haute résolution
Si vous préférez uniquement les captures d’écran au format PNG en haute résolution, cliquez sur l’icône ~~ Image : ? ~~ située sous l’aperçu, dans la barre des paramètres d’aperçu.

Enregistrement

Enregistrement du projet​

L’enregistrement de votre projet regroupe l’ensemble des données et des résultats dans un fichier de session unique.
+~~ Image : tutorial_quickstart48_FR ~~
+~~ Image : ? ~~
+Si vous n’avez pas suivi toutes les étapes, vous pouvez télécharger la session :
+https://gephi.org/datasets/lesmiserables.gml.zip

Conclusion

Ce tutoriel vous a présenté les manipulations de base permettant d’ouvrir, de visualiser, de manipuler et de générer un fichier de réseau avec Gephi.
+~~ Images : ??? ~~
+Pour en savoir plus :

Ces pages sont disponibles uniquement en anglais.

Dernière mise à jour le 5 mars 2010

+ + + + \ No newline at end of file diff --git a/Plugins/export/index.html b/Plugins/export/index.html new file mode 100644 index 0000000..54e791e --- /dev/null +++ b/Plugins/export/index.html @@ -0,0 +1,19 @@ + + + + + +Export | Gephi Documentation + + + + +
+
Skip to main content

Export

This HowTo shows, in about 15 minutes how to create a new exporter in Gephi. Exporters export data from Gephi to various targets, like files or streams.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyExporter, you can start this tutorial.

One can find file exporter examples in the ExportPlugin and PreviewExport modules.

Create a new Exporter​

Set Dependencies​

Add ExportAPI, ProjectAPI, and Lookup modules as dependencies for your plugin module MyExport. See [[How To Set Module Dependencies]].

Create Exporter Builder​

ExporterBuilder is a factory class for building the important instance, all Exporters should have their own builder. +Create a new builder MyExporterBuilder class, which implements one of the following interface:

Let's say we create a exporter for a custom graph format with .foo extension, so we choose GraphFileExporterBuilder.

Fill the getFileTypes() and getName() methods like below, for a single file format supported named foo.

public String getName() {
return "foo";
}

public FileType[] getFileTypes() {
return new FileType[]{new FileType(".foo", "Foo files")};
}

Add @ServiceProvider annotation to your builder class to declare you are implementing an Exporter service. Add the following line before MyExporterBuilder class definition, as shown below:

@ServiceProvider(service = GraphFileExporterBuilder.class)
public class MyExporterBuilder implements GraphFileExporterBuilder{
...

This annotation registers your implementation in the system, in order it can be discovered at runtime.

Put GraphFileExporterBuilder.class as the annotation service parameter for graph files, VectorFileExporterBuilder.class for vector graphics and ExportBuilder.class for the rest.

Create Exporter​

Create a new exporter class, which implements GraphExporter, VectorExporter or simply Exporter, depending what you set for the builder.

The exporter is where the job is done, in its execute() method. The main input object the export needs is the Workspace. In Gephi, data are stored within workspaces. It is the place the exporter will find what to export. Before being executed by the export controller, the exporter will receive the workspace and other parameters through setters methods.

Implement also ByteExporter interface for byte streams or CharacterExporter for texts. These are the two ways you can output data in a exporter, either text (java.io.Writer) or byte (java.io.OutputStream). Note that XML is text-based. So exporters are not specifically exporting to a file or a stream, they export to a Writer or an OutputStream. The controller later decides what to do with it.

Add also LongTask interface to your class, in order you will be able to use progress and cancel management. Add LongTaskAPI as a dependency to profit from LongTask. +Your exporter should now look like below:

public class MyExporter implements GraphExporter, CharacterExporter {

private boolean exportVisible = false;
private Workspace workspace;
private Writer writer;

@Override
public boolean execute() {
//Do the job
}

@Override
public void setWorkspace(Workspace workspace) {
this.workspace = workspace;
}

@Override
public Workspace getWorkspace() {
return workspace;
}

@Override
public void setWriter(Writer writer) {
this.writer = writer;
}

@Override
public void setExportVisible(boolean exportVisible) {
this.exportVisible = exportVisible;
}

@Override
public boolean isExportVisible() {
return exportVisible;
}
}

The GraphExporter interface has an additional parameter: exportVisible. It indicates if either the complete or only the visible graph should be exported. At any time the system keeps the complete graph in memory. When users use filtering, the visible graph is different, as some nodes/edges have been removed. Below is the way to retrieve the good graph with this parameter.

public boolean execute() {
GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class);
Graph graph = null;
if (exportVisible) {
graph = graphModel.getGraphVisible();
} else {
graph = graphModel.getGraph();
}
//Do the job
}

Finish the builder​

In the builder, return a new instance of your exporter in the buildExporter() method.

@Override
public GraphExporter buildExporter() {
return new MyExporter();
}

With settings UI​

You can create an ExporterUI class for your exporter. It is not mandatory and the exporter will work normally with default settings.

Create MyExporterUI​

Create a new exporter UI class, for instance MyExporterUI that implements ExporterUI.

Your UI class is responsible of providing the JPanel associated to your exporter and set settings value to your MyExporter instance. The system will ask for a JPanel, show a setting dialog and then call unsetup(). If users validate the settings panel by hitting OK, the unsetup() method is called with update set as true and ask the UI to write the setting values. +The sample below will help you:

public class MyExporterUI implements ExporterUI {

private JPanel panel;
private MyExporter exporter;

public void setup(Exporter exporter) {
this.exporter= (MyExporter)exporter;
}

public JPanel getPanel() {
panel = new JPanel();
return panel;
}

public void unsetup(boolean update) {
if(update) {
//The user clicked OK when closing settings
} else {
//Cancel was hit
}
panel = null;
exporter = null;
}

public String getDisplayName() {
return "Exporter Foo";
}

public boolean isUIForExporter(Exporter exporter) {
return exporter instanceof MyExporter;
}
}

Register the UI​

Add @ServiceProvider annotation to your UI class. Add the following line before MyexporterUI class definition, as shown below:

@ServiceProvider(service = ExporterUI.class)
public class MyExporterUI implements ExporterUI{
...

Note that by doing this your class becomes a singleton.

Remember settings​

How to remember last settings set to the exporter, as each time a new export is made, a new instance of Exporter is created.

It is the ExporterUI's role to remember settings. The only thing to do is load settings at setup() and save settings at unsetup. Look at existing classes in the ExporterPluginUI module to have an example.

image

+ + + + \ No newline at end of file diff --git a/Plugins/filter/index.html b/Plugins/filter/index.html new file mode 100644 index 0000000..c21a4e0 --- /dev/null +++ b/Plugins/filter/index.html @@ -0,0 +1,33 @@ + + + + + +Filter | Gephi Documentation + + + + +
+
Skip to main content

Filter

Filters are pruning the graph by keeping only nodes and edges that satisfies filters conditions. They are either predicates or functions that reduce the graph, predicates are easy and return only true or false, whereas functions input a graph and output a graph.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyFilter, you can start this tutorial.

One can find filters examples in the FiltersPlugin module.

How filtering works in Gephi​

Gephi has a filter pipeline working with graph copies, where each filter can remove nodes and edges with settings. The Graph API in Gephi has the concept of View, a copy of the complete graph structure identified by an ID and where filters can work on it without disturbing other views. So, when a filter is removing nodes, it is removing them on a copy of the graph structure, the complete graph (named the main view) remains the same. This copy is eventually set as the visible view, the graph shown in the graph window. That is how users visualize a filtered graph. When filtering is disabled, the main view is simply set again as the visible view.

The filter pipeline is executed on a separate Thread and therefore doesn't block the rest of the application. +Filters are wrapped into queries, which can be chained and combined. Similar as SQL nested queries concept, filter queries can have sub-queries and be represented as a tree, where the last executed query is the root. For example, the query INDEGREE(3, EDGE_WEIGHT(2)) would be executed like below:

  • A complete copy of the graph structure is created in a new view
  • It is passed to the EDGE_WEIGHT filter, which removes edges under weight 2
  • The sub-graph is passed to the INDEGREE filter, which removes nodes with in-degree less than 3 here
  • The graph view is set as visible view, the graph windows automatically refreshes

When a property is changed in the user interface, for instance the weight threshold, the complete process above is just re-executed and the former graph view is destroyed.

Create a new Filter​

Set Dependencies​

Add FiltersAPI, GraphAPI, and Lookup modules as dependencies for your plugin module. See [[How To Set Module Dependencies]].

Create FilterBuilder​

  • FilterBuilder is a factory class for building the Filters. The builder is registered in the FilterLibrary. The library is the upper panel where users choose the filters they want to use. Another type of builders, named CategoryBuilder can create several builders at once and will be detailed later.
  • Create a new builder MyFilterBuilder class, which implements FilterBuilder.
  • Add @ServiceProvider annotation to your builder class, in order it is detected by the filter library. +Here is how it should look like:
@ServiceProvider(service = FilterBuilder.class)
public class MyFilterBuilder implements FilterBuilder {

public Category getCategory() {
return FilterLibrary.NODE;
}

public String getName() {
return "My Filter";
}

public Icon getIcon() {
return null;
}

public String getDescription() {
return "A filter example";
}

public Filter getFilter() {
//TODO
}

public JPanel getPanel(Filter filter) {
return null;
}

public void destroy(Filter filter) {
}
}

Notice the getCategory() method. As the FilterLibrary is a tree, this builder needs a parent. That is the category. Use default categories defined in FilterLibrary like above or simply return your own:

public Category getCategory() {
return new Category("Samples Filters");
}

Create Filter​

Before creating the filter class, you should decide which filter interface to implement:

  • NodeFilter: Basic filters for nodes, that works as predicates. For a given node the filter's role is to return true if the node is kept or false if it is removed.
  • EdgeFilter: Basic filters for edges, that works as predicates. For a given edge the filter's role is to return true if the edge is kept or false if it is removed.
  • ComplexFilter: Filter working with full graphs and returning a subgraph.

The ComplexFilter interface is useful when both nodes and edges have to be filtered. +For instance, in the case of an edge weight filter (a filter that keeps edges only in a particular weight threshold) we only need EdgeFilter. But if I want to design a filter that prunes the graph until it's average degree is 5.5 I need to have control on both nodes and edges. The complex filter is a black box, where nodes and edges can be filtered (e.g. removed) with tricky or complex processes.

NodeFilter​

Create a new MyFilter class, which implements NodeFilter interface. The main filter method is evaluate(). The init() asks if the filter is valid for the given graph. Only valid filters are executed by the system. +The example below removes isolated nodes (e.g. with degree equal to 0). The filter is said valid only if the graph have nodes.

public class MyFilter implements NodeFilter {

public boolean init(Graph graph) {
return graph.getNodeCount() > 0;
}

public boolean evaluate(Graph graph, Node node) {
return graph.getDegree(node) > 0;
}

public void finish() {
}

public String getName() {
return "My Filter";
}

public FilterProperty[] getProperties() {
return new FilterProperty[0]; //Will be explained later
}
}

For specific directed or undirected graphs, just cast the Graph in DirectedGraph or UndirectedGraph.

ComplexFilter​

The complex filter interface is very simple, the filter() method directly gives the Graph.

public Graph filter(Graph graph);

Here is a example of a complex filter. It removes the 50% edges with the lowest weight.

public Graph filter(Graph graph) {
int edgeCount = graph.getEdgeCount();
edgeCount /= 2;

Edge[] edges = graph.getEdges().toArray();
Arrays.sort(edges, new Comparator<Edge>() {
public int compare(Edge o1, Edge o2) {
return Float.compare(o1.getWeight(), o2.getWeight());
}
});

for (int i = 0; i < edgeCount; i++) {
Edge edge = edges[i];
graph.removeEdge(edge);
}
return graph;
}

It uses the removeEdge() method from the Graph API and returns the graph it received.

Can a filter also add elements? +Yes, as far as they are part of the main view as well. +As as exemple, here is how the NOT operator works:

GraphView graphView = graph.getView();
Graph mainGraph = graph.getView().getGraphModel().getGraph();
for (Node n : mainGraph.getNodes().toArray()) {
if (n.getNodeData().getNode(graphView.getViewId()) == null) {
//The node n is not in graph
graph.addNode(n);
} else {
//The node n is in graph
graph.removeNode(n);
}
}

It is possible to find the graph model from the view object. Then the n.getNodeData().getNode(graphView.getViewId()) line gets the same node in another view. The NodeData is common at all views and maintains a list of views where the node is.

Can the complex filter returns a different graph view? +It's possible yes, but a use-case needing this is not obvious to find. The GraphModel.newView() is the method that duplicates the complete structure.

Can filters work with Hierarchical graph? +Yes, the view copy is copying the complete hierarchy tree. +Just cast the received graph in HierarchicalGraph.

Finish the builder​

In the builder, return a new instance of your filter in the getFilter() method.

@Override
public Filter getFilter() {
return new MyFilter();
}

Properties​

It's very likely your filter will need to define properties, for instance a threshold or a pattern. In the case your filter has a user interface, the Filters API implementation has a system to automatically refresh the filter when a property value is changed. But for that it needs to be aware of these properties. That's why Filter interface has a getProperties() method.

If your filter doesn't have any user interface, it is therefore not necessary to return properties. Otherwise, it is mandatory. +Below is how to define a simple useRegex boolean property:

FilterProperty p = FilterProperty.createProperty(this, Boolean.class, "useRegex");

As it uses introspection to get and set the value, your class simply needs proper getters and setters. As a result that is how the method id filled:

public FilterProperty[] getProperties() {
return new FilterProperty[]{
FilterProperty.createProperty(this, Boolean.class, "useRegex")
};
}

public boolean isUseRegex() {
return useRegex;
}

public void setUseRegex(boolean useRegex) {
this.useRegex = useRegex;
}

When the useRegex value will be changed (through a checkbox for example), the system will be notified and re-execute the filter.

Provide a UI​

The getPanel() method in MyFilterBuilder can return a user interface for the filter. +One can find existing filters user interface code in the FiltersPluginUI module. +The panel is needed to configure a Filter instance, already created. That's why the getPanel() method gives the Filter. Cast this filter to MyFilter, it cannot be anything else and configure settings. +When settings are modified, use properties to set the new value. Below is an example of a simple panel, with a checkbox to set the useRegex property which we defined earlier.

public class MyFilterPanel extends javax.swing.JPanel implements ItemListener {

private MyFilter filter;
private javax.swing.JCheckBox regexCheckbox;

public MyFilterPanel(MyFilter filter) {
this.filter = filter;

regexCheckbox = new javax.swing.JCheckBox("Use Regex");
add(regexCheckbox);

regexCheckbox.addItemListener(this);
}

public void itemStateChanged(ItemEvent e) {
FilterProperty useRegex = filter.getProperties()[0];
useRegex.setValue(regexCheckbox.isSelected());
}
}

It is important to set the value to the FilterProperty, not to MyFilter directly.

Appendix​

Create a CategoryBuilder​

Category builders are typically designed to build a filter that work on Attributes. For example, the AttributeRangeFilter works with all attribute columns. That means a FilterBuilder has to be created for each column, under a category (e.g. a folder). +The following example shows how several AttributeRangeFilterBuilder (which implements FilterBuilder) are created, one per attribute column. +The AttributeUtils helps to know if a column is a numerical one.

@ServiceProvider(service = CategoryBuilder.class)
public class AttributeRangeBuilder implements CategoryBuilder {

public Category getCategory() {
return new Category("Range", null, FilterLibrary.ATTRIBUTES); //The 'Range' folder will be in the 'Attributes' folder
}

public FilterBuilder[] getBuilders() {
List<FilterBuilder> builders = new ArrayList<FilterBuilder>();
AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel();
for (AttributeColumn c : am.getNodeTable().getColumns()) {
if (AttributeUtils.getDefault().isNumberColumn(c) || AttributeUtils.getDefault().isDynamicNumberColumn(c)) {
AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c);
builders.add(b);
}
}
for (AttributeColumn c : am.getEdgeTable().getColumns()) {
if (AttributeUtils.getDefault().isNumberColumn(c) || AttributeUtils.getDefault().isDynamicNumberColumn(c)) {
AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c);
builders.add(b);
}
}
return builders.toArray(new FilterBuilder[0]);
}
}

Provide an icon​

Simply return an icon in the FilterBuilder implementation.

Custom Properties​

Properties natively supports all Java types, as well as Range and AttributeColumn. For other types you may have to register a property editor to guarantee serialization to work. +Serialization is used to write and read properties values, when a Gephi project is saved. +Implement a property editor class and register it:

  • Create a new class that extends java.beans.PropertyEditorSupport and fill getAstext() and setAsText() methods.
  • Register this editor by doing java.beans.PropertyEditorManager.registerEditor() method.
+ + + + \ No newline at end of file diff --git a/Plugins/generator/index.html b/Plugins/generator/index.html new file mode 100644 index 0000000..656e5a2 --- /dev/null +++ b/Plugins/generator/index.html @@ -0,0 +1,18 @@ + + + + + +Generator | Gephi Documentation + + + + +
+
Skip to main content

Generator

This HowTo shows how to create a new graph generator in Gephi.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyGenerator, you can start this tutorial.

Create a new Generator​

Set Dependencies​

Add Lookup, GraphAPI and LongTaskAPI modules as dependencies for your plugin module MyGenerator. See [[How To Set Module Dependencies]].

Create Generator​

  • Create a new class that implements Generator. This is the place the code belongs.
  • Fill getName() method by returning a display name like "My Generator". Fill getUI() method by returning null. Leaves other methods untouched for the moment.
  • Add @ServiceProvider annotation to your builder class. Add the following line before MyGenerator class definition, as shown below:
@ServiceProvider(service = Generator.class)
public class MyGenerator implements Generator {
...

Generate the graph​

Fill generate() method by creating NodeDraft and EdgeDraft elements to add to the ContainerLoader.

Set LongTask​

To let your graph creation task be canceled and its progress watched, implement LongTask interface on MyGenerator. +Add two fields:

private boolean cancel = false; +private ProgressTicket progressTicket;

and implement new methods:

public boolean cancel() {
cancel = true;
return true;
}

public void setProgressTicket(ProgressTicket progressTicket) {
this.progressTicket = progressTicket;
}

Use the cancel field to terminate your algorithm execution properly and return from generate().

Sample​

@ServiceProvider(service = Generator.class)
public class HelloWorld implements Generator {

protected ProgressTicket progress;
protected boolean cancel = false;

public void generate(ContainerLoader container) {
// create nodes
NodeDraft n1 = container.factory().newNodeDraft();
NodeDraft n2 = container.factory().newNodeDraft();

// set node labels
n1.setLabel("Hello");
n2.setLabel("World");

// create edge
EdgeDraft e = container.factory().newEdgeDraft();
e.setSource(n1);
e.setTarget(n2);

// fill in the graph
container.addNode(n1);
container.addNode(n2);
container.addEdge(e);
}

public String getName() {
return "Hello World";
}

public GeneratorUI getUI() {
return null;
}

public boolean cancel() {
cancel = true;
return true;
}

public void setProgressTicket(ProgressTicket progressTicket) {
this.progress = progressTicket;
}
}
+ + + + \ No newline at end of file diff --git a/Plugins/graphstreaming/index.html b/Plugins/graphstreaming/index.html new file mode 100644 index 0000000..7e6856a --- /dev/null +++ b/Plugins/graphstreaming/index.html @@ -0,0 +1,21 @@ + + + + + +GraphStreaming | Gephi Documentation + + + + +
+
Skip to main content

GraphStreaming

Description​

The purpose of the Graph Streaming API is to build a unified framework for streaming graph objects. Gephi’s data structure and visualization engine has been built with the idea that a graph is not static and might change continuously. By connecting Gephi with external data-sources, we leverage its power to visualize and monitor complex systems or enterprise data in real-time. Moreover, the idea of streaming graph data goes beyond Gephi, and a unified and standardized API could bring interoperability with other available tools for graph and network analysis, as they could start to interoperate with other tools in a distributed and cooperative fashion.

This plugin is also used to produce real-time analysis and visualization of graphs using Gephi. For more information on how to visualize Twitter data as graph objects using this plugin, see [[GraphStreaming#Other Examples|Other Examples]].

Modules​

Gephi Graph Streaming is divided in different modules: The core modules, that defines the Graph Streaming API and its implementation, the Server modules, responsible for the HTTP REST Server, and the interface modules.

Graph Streaming API​

The Graph Streaming API is the core of this plugin. High-level modules can use this API in order to connect to external event sources. The API is format-agnostic, and the programmer must use an implemented StreamType for a given format, or implement one for a different format. For current supported formats, see [[GraphStreaming#Supported formats|Supported formats]].

You can use the Graph Streaming API to connect from the Toolkit, without a user interface. In order to connect to a stream data source, a component have to:

  1. Get the current Graph instance:
ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class);
Project project = projectController.getCurrentProject();
Workspace workspace = projectController.getCurrentWorkspace();

// Get the graph instance
GraphController graphController = Lookup.getDefault().lookup(GraphController.class);
GraphModel graphModel = graphController.getModel();
Graph graph = graphModel.getHierarchicalMixedGraph();
  1. Get the StreamingController:
StreamingController controller = Lookup.getDefault().lookup(StreamingController.class);
  1. Define the endpoint to connect to:
// Connect to stream using the Streaming API
StreamingEndpoint endpoint = new StreamingEndpoint();
// put the url of your master here
endpoint.setUrl(new URL("http://localhost:8080/workspace0"));
// endpoint.setStreamType() accepts a StreamType instance, so you
// have to get it using the controller
StreamType type = controller.getStreamType("JSON");
endpoint.setStreamType(type);
  1. Connect to it and process:
StreamingConnection connection = controller.connect(endpoint, graph);
connection.asynchProcess(); // or connection.process() for synchronous processing

The client will connect to the endpoint, process the events and update the graph accordingly. Note that the method connection.process() returns only when the stream finishes. If you want to asynchronously process the stream, you will want to call connection.asynchProcess(). But if you start the asynchronous processing of the stream, you lose control of when the stream finishes. In order to know when the stream finishes, you can control the StreamingConnection object to know when the connection was closed. If you want to know asynchronously when the connection was closed, without controlling the connection object, you can inform a listener to receive the event:

        StreamingConnection connection = controller.connect(endpoint, graph);
connection.addStatusListener(new StatusListener() {
public void onConnectionClosed(StreamingConnection connection) {
System.out.println("Connection was closed!");
}
});
connection.asynchProcess();

If you want to customize the behavior of event processing, doing something else than updating the graph, you can work with more low-level objects like StreamReaders. You can implement you own GraphEventHandler and pass it directly to the StreamReader implementation. For example, to count the received events you could do this:

final AtomicInteger counter = new AtomicInteger();

GraphEventHandler eventHandler = new GraphEventHandler() {
public void handleGraphEvent(GraphEvent event) {
counter.incrementAndGet();
}
};

URL url = new URL("http://streamingserver/streamingcontext");
url.openConnection();
InputStream inputStream = url.openStream();

GraphEventBuilder eventBuilder = new GraphEventBuilder(endpoint.getUrl());

StreamReaderFactory readerFactory = Lookup.getDefault().lookup(StreamReaderFactory.class);
StreamReader reader = readerFactory.createStreamReader("JSON", eventHandler, eventBuilder);
streamReader.processStream(inputStream);

The graph events will be sent to the GraphEventHandler as they arrive in the inputStream. The reported problems/exceptions during the streaming process are reported in the object Report:

Report report = connection.getReport();

You can also write the events in a given format using the StreamWriter:

ByteArrayOutputStream out = new ByteArrayOutputStream();
StreamWriterFactory factory = Lookup.getDefault().lookup(StreamWriterFactory.class);
StreamWriter streamWriter = factory.createStreamWriter("JSON", out);

Now you can use it as a GraphEventHandler instance (StreamWriter implements the GraphEventHandler interface), and you can write the events to the output using the given format:

StreamReaderFactory factory = Lookup.getDefault().lookup(StreamReaderFactory.class);
StreamReader reader = readerFactory.createStreamReader("JSON", streamWriter, eventBuilder);
streamReader.processStream(inputStream);

Server Module​

The Server Module is implemented using Servlet standards. The servlets are run by an embedded [http://jetty.codehaus.org/jetty/ Jetty] instance.

You can start a master programmatically using the API:

StreamingServer server = Lookup.getDefault().lookup(StreamingServer.class);
ServerControllerFactory controllerFactory = Lookup.getDefault().lookup(ServerControllerFactory.class);
ServerController serverController = controllerFactory.createServerController(graph);
String context = "/mycontext";
server.register(serverController, context);

Using this code, the Gephi master will be accessible in the following url: [http://your_ip_here:8080/mycontext http://your_ip_here:8080/mycontext]

=== Plugin interface === +The modules responsible for the plugin interface use the core Graph Streaming API to connect to external streams, and the classes in the Server Module to start/stop the internal HTTP server.

== Supported formats == +The main Streaming API format supported by Gephi is JSON. For web-based systems, JSON is strongly encouraged over XML, as JSON is more compact and parsing is greatly simplified by the delimited parameter: every object is returned on its own line, and ends with a carriage return. In a streaming situation, it is more practical, as it is possible to parse the data as it arrives, without waiting for a closing tag or for the end of the stream.

The current implementation of JSON Streaming Format is very simple and '''still subject to changes'''. It is composed of 6 types of events, divided in 2 types of elements (nodes and edges) and 3 types of operations (add, change, delete):

  • an: Add node
  • cn: Change node
  • dn: Delete node
  • ae: Add edge>
  • ce: Change edge
  • de: Delete edge +Each event is composed by its event type and a list of objects of type node or edge, depending on the event type. Node and edge objects are similar, and composed of an identifier and a list of attributes. The "add edge" is the only operation in which there is three mandatory attributes: source, target and directed. Source and target are node identifiers, and directed is a boolean representing if the edge is directed or not.

The events are currently represented in the JSON format as follows:

{ <event_type> :{ <object_identifier> :{ <attribute_name> : <attribute_value> , <attribute_name> : <attribute_value> }}} 

Following, we show a list of events with some examples for each type of event, represented in the current JSON format implementation:

{"an":{"A":{"label":"Streaming Node A","size":2}}} // add node A
{"an":{"B":{"label":"Streaming Node B","size":1}}} // add node B
{"an":{"C":{"label":"Streaming Node C","size":1}}} // add node C
{"ae":{"AB":{"source":"A","target":"B","directed":false,"weight":2}}} // add edge A->B
{"ae":{"BC":{"source":"B","target":"C","directed":false,"weight":1}}} // add edge B->C
{"ae":{"CA":{"source":"C","target":"A","directed":false,"weight":2}}} // add edge C->A
{"cn":{"C":{"size":2}}} // changes the size attribute to 2
{"cn":{"B":{"label":null}}} // removes the label attribute
{"ce":{"AB":{"label":"From A to B"}}} // add the label attribute
{"de":{"BC":{}}} // delete edge BC
{"de":{"CA":{}}} // delete edge CA
{"dn":{"C":{}}} // delete node C

With this format it is possible to put more than one object in each event, as in the following example:

{ "an" : { "A" : { "label" : "Streaming Node A" , "size" : 2 } , "B" : { "label" : "Streaming Node B" , "size" : 1 } , "C" : { "label" : "Streaming Node C" , "size" : 1 } } } 

But we recommend to send only one object in each event, as it is more suitable for a streaming approach: the data should be read as soon as possible by the client, and the approach using multiple objects by event slows the client reading, because it can't parse the JSON event object until a '\r' appears.

'''We recall that this format is subject to changes, as more requirements are being added to the Graph Streaming API.'''

'''Format changing considerations currently in progress'''

There are some considerations in progress in order to adapt the JSON format to some requirements.

The first one is to add support to '''filters'''. Filters are very important when changing groups of objects with the same characteristic. For example, if you want to change the color of all nodes with size=x, you could use a filter event. It would cost much less than sending one event for each node.

Another requirement is to support '''identifiers to events'''. In some cases, it would be interesting to assign an identifier to the event. For example, in a distributed environment, the events are produced by event producers, but you cannot be sure that the event consumers receive the events in the same order. As a way to solve this problem, each event producer could assign a timestamp to the event, as a way to ensure that each event consumer produce the same results.

Event identifiers will be assigned to events using a special "id" attribute, at the same level of the event type:

{ "id" : "1278944510" , "an" : { "A" : { "label" : "Streaming Node A" , "size" : 2 } } } 

This way, the event identifier will be parsed only if the "id" attribute is present in the event object. Someone that does not want to use identifiers should only ignore the "id" attribute: no overhead is added to the format, it remains compatible with "old style" events, and the format remains concise.

== Source code == +The Gephi Graph Streaming is a Gephi Plugin supported by the core team, and the source code is available as a branch of the [https://github.com/gephi/gephi-plugins gephi-plugins repository]. In order to build the latest version, follow these steps:

  • Download and install the latest version of [http://netbeans.org/ Netbeans IDE].
  • Fork and checkout the latest version of the gephi-plugins repository:
git clone git@github.com:username/gephi-plugins.git
  • Checkout the graph-streaming branch:
git checkout -t origin/graph-streaming
  • Start Netbeans and Open Project. This folder is automatically recognized as a module suite.
  • Right click on the project and select 'Run'. This starts Gephi with the Graph Streaming plugin.

Examples​

The Graph Streaming specification allow clients to interact with a master getting data and pushing data to it, in a REST architecture. The same data format used by the master to send graph events to the clients is used by clients to interact with the master.

Gephi as Master​

In the first example, we will start Gephi as a master to provide graph information to its clients. At the Streaming Tab in the Gephi application, you can access all the features of graph streaming. You can start the Gephi Master by executing the following steps:

  • Run the Gephi application
  • Create an empty workspace (File/New Project)
  • Add some nodes and edges to your graph
  • Go to the tab Streaming and right-click on the “Master Server” and select “Start” +By default, the HTTP server will listen at port 8080 in plain HTTP, and at port 8443 using SSL. The server path depends on your workspace: each workspace uses a different path. You can configure these parameters (and also Basic Authentication) at the “Settings…” button.

By following these steps, an HTTP server is started, and it exposes a REST interface to access the workspace data by submitting events in the graph streaming format.

Now, you can connect to Gephi using any HTTP client. For example, you can use [http://curl.haxx.se/ curl] to see the data flowing. First of all, open a shell prompt and execute the following command to get the complete graph, using the operation getGraph or no operation at all (getGraph is the default operation):

curl "http://localhost:8080/workspace0?operation=getGraph"

This operation connects to Gephi in streaming mode. You first receive the graph objects that are already in the graph. Every new object added to the graph is sent to the streaming client. For example, add some nodes to the graph in your workspace, and you will see the events appearing in the command line client.

Other operations are used to retrieve node and edge data:

curl "http://localhost:8080/workspace0?operation=getNode&id=A"
curl "http://localhost:8080/workspace0?operation=getEdge&id=AB"

You can use the updateGraph operation to submit new events to your graph. For example, open another shell prompt and execute the following lines, one after the other:

curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\"an\":{\"A\":{\"label\":\"Streaming Node A\"}}}"
curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\"an\":{\"B\":{\"label\":\"Streaming Node B\"}}}"
curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\"an\":{\"C\":{\"label\":\"Streaming Node C\"}}}"
curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\"ae\":{\"AB\":{\"source\":\"A\",\"target\":\"B\",\"directed\":false}}}"
curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\"ae\":{\"BC\":{\"source\":\"B\",\"target\":\"C\",\"directed\":false}}}"
curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\"ae\":{\"CA\":{\"source\":\"C\",\"target\":\"A\",\"directed\":false}}}"

You should see the nodes and edges appearing in the workspace, until they form a triangle. At the same time, the events are sent to any client connected to the Master. You can send more events to the workspace using the same command line, just change the node and edge identifiers.

The same events can be sent by just one HTTP request:

curl "http://localhost:8080/workspace0?operation=updateGraph" -d $'{"an":{"A":{"label":"Streaming Node A"}}}\r
{"an":{"B":{"label":"Streaming Node B"}}}\r
{"an":{"C":{"label":"Streaming Node C"}}}\r
{"ae":{"AB":{"source":"A","target":"B","directed":false}}}\r
{"ae":{"BC":{"source":"B","target":"C","directed":false}}}\r
{"ae":{"CA":{"source":"C","target":"A","directed":false}}}'

You are not limited to a single master by host: each Gephi workspace can be available as a master.

Gephi as Client​

To illustrate how to connect to a master, [http://www.youtube.com/watch?v=7SW_FDiY0sg this video] shows Gephi connecting to a master and visualizing the received graph data in real time. The graph in this demo is a part of the Amazon.com library, where the nodes represent books and the edges represent their similarities. For each book, a node is added, the similar books are explored, adding the similar ones as nodes and the similarity as an edge.

Using a WebSocket Client​

'''This feature will be available in a near future.'''

Other Examples​

Some other examples are available by using a Python client. Source code and instructions are available in the [https://github.com/panisson/pygephi_graphstreaming pygephi_graphstreaming repository]. This repository also contains the source code of the Python server used to collect data from Twitter and create the video about the [https://gephi.org/2011/the-egyptian-revolution-on-twitter/ Egyptian Revolution on Twitter].

Acknowledgements​

This plugin was implemented by [http://gephi.org/about/people/ André Panisson].

+ + + + \ No newline at end of file diff --git a/Plugins/import/index.html b/Plugins/import/index.html new file mode 100644 index 0000000..0e60d68 --- /dev/null +++ b/Plugins/import/index.html @@ -0,0 +1,21 @@ + + + + + +Import | Gephi Documentation + + + + +
+
Skip to main content

Import

This HowTo shows, in about 15 minutes how to create a new importer in Gephi. Importers push data from files, databases or external datasources to a Container. The role of the container is to host all data collected by importers (i.e. nodes, edges and attributes). This HowTo is focused on file importers, but the procedure is slightly similar for databases or spigots.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyImporter, you can start this tutorial.

One can find file importer examples in the Gephi source code.

Create a new Importer​

Set Dependencies​

Add ImportAPI, LongTaskAPI, FileSystemAPI, UtilitiesAPI and Lookup modules as dependencies for your plugin module MyImport. See [[How To Set Module Dependencies]].

Create FileImporterBuilder​

  • ImporterBuilder is a factory class for building the important instance, all Importers should have their own builder.
  • Create a new builder class, for instance MyImporterBuilder that implements FileImporterBuilder.
  • Fill the getFileTypes() and getName() methods like below, for a single file format supported named foo.
public String getName() {
return "foo";
}

public FileType[] getFileTypes() {
return new FileType[]{new FileType(".foo", "Foo files")};
}

Add @ServiceProvider annotation to your builder class. Add the following line before MyImporterBuilder class definition, as shown below:

@ServiceProvider(service = FileImporterBuilder.class)
public class MyImporterBuilder implements FileImporterBuilder {
...

Create FileImporter​

The importer is where the job will be done. Create a new importer class, for instance MyImporter that implements FileImporter.

Notice the setReader() method. That means you will work with a reader instead directly with files. The system is responsible of setting the reader before the importer you're developing will be executed.

Add also LongTask interface to your class, in order you will be able to use progress and cancel management. +Your MyImporter would look like this:

public class MyImporter implements FileImporter, LongTask {

private Reader reader;
private ContainerLoader container;
private Report report;
private ProgressTicket progressTicket;
private boolean cancel = false;

public void setReader(Reader reader) {
this.reader = reader;
}

public boolean execute(ContainerLoader loader) {
this.container = loader;
this.report = new Report();
//Import
return !cancel;
}

public ContainerLoader getContainer() {
return container;
}

public Report getReport() {
return report;
}

public boolean cancel() {
cancel = true;
return true;
}

public void setProgressTicket(ProgressTicket progressTicket) {
this.progressTicket = progressTicket;
}
}

The infrastructure is set, the container for pushing data, the report for pushing logs and errors, and the progress management.

Finish the builder​

Go back to the MyImporterBuilder and complete buildImporter() and isMatchingImporter() methods:

public FileImporter buildImporter() {
return new MyImporter();
}

public boolean isMatchingImporter(FileObject fileObject) {
return fileObject.getExt().equalsIgnoreCase("foo");
}

With settings UI​

You can create an ImporterUI class for your importer. It is not mandatory and the importer will work normally with default settings.

Create MyImporterUI​

Create a new ImporterUI class, for instance MyImporterUI that implements ImporterUI.

Your UI class is responsible of providing the JPanel associated to your importer and set settings value to your MyImporter instance. The system will ask for a JPanel, show a setting dialog and then call unsetup(). If users validate the settings panel by hitting OK, the unsetup() method is called with update set as true and ask the UI to write the setting values. +The sample below will help you:

public class MyImporterUI implements ImporterUI {

private JPanel panel;
private JCheckBox option;
private MyImporter importer;

public void setup(Importer importer) {
this.importer = (MyImporter)importer;
}

public JPanel getPanel() {
panel = new JPanel();
option = new JCheckBox("Option");
panel.add(option);
return panel;
}

public void unsetup(boolean update) {
if(update) {
importer.setOption(option.isSelected());
}
panel = null;
importer = null;
option = null;
}

public String getDisplayName() {
return "Importer Foo";
}

public boolean isUIForImporter(Importer importer) {
return importer instanceof MyImporter;
}
}

In the example below, notice the importer.setOption(option.isSelected()) line. The setOption() method doesn't exist in MyImporter but it shows how to configure it easily.

Register the UI​

Add @ServiceProvider annotation to your UI class. Add the following line before MyImporterUI class definition, as shown below:

@ServiceProvider(service = ImporterUI.class)
public class MyImporterUIimplements ImporterUI{
...

Advices​

How to write a text file importer​

The best way for text files is to use a LineNumberReader. +One can get it from the ImportUtils class:

LineNumberReader lineReader = ImportUtils.getTextReader(reader);

How to write an XML file importer​

XML files can be read with different methods (DOM, SAX, StAX) in Java. +StAX is combining simplicity and efficiency and should be favored to read XML files:

XMLStreamReader xmLReader = ImportUtils.getXMLReader(reader);

Thought it is not recommended to use DOM as it's too much memory consuming, here is how to get a Document from the reader:

Document document = ImportUtils.getXMLDocument(reader);

How to handle errors and exceptions​

Warnings and errors are generated by importers to let users get feedback about the import process. Data is rarely clean and perfectly formated, thus it's necessary to give a specific error message for each problem. The report present in your importer class is here for that.

Similar as classical logging framework, that is how to log a information message:

report.logIssue(new Issue("The attribute label has been found", Issue.Level.INFO));

There are four levels: INFO, WARNING, SEVERE, CRITICAL. Note that the critical level will stop the import process and throw an exception, so it is reserved if the file cannot be read or the XML is not valid for instance. +About exceptions, it is recommended that you throw RuntimeException from your execute method. They will be properly catched and displayed to users in a message box.

image

+ + + + \ No newline at end of file diff --git a/Plugins/index.html b/Plugins/index.html new file mode 100644 index 0000000..bea16cd --- /dev/null +++ b/Plugins/index.html @@ -0,0 +1,16 @@ + + + + + +Introduction | Gephi Documentation + + + + +
+
Skip to main content

Introduction

This section is designed to help developers write Gephi Plugins.

Gephi can be extended in many ways but the major categories are Layout, Export, Import, Data Laboratory, Filter, Generator, Metric, Preview, Tool, Appearance and Clustering. A good way to start is to look at examples with the bootcamp.

+ + + + \ No newline at end of file diff --git a/Plugins/layout/index.html b/Plugins/layout/index.html new file mode 100644 index 0000000..bb1074a --- /dev/null +++ b/Plugins/layout/index.html @@ -0,0 +1,18 @@ + + + + + +Layout | Gephi Documentation + + + + +
+
Skip to main content

Layout

Available layouts​

  • [[Force Atlas 2]]
  • [[Fruchterman-Reingold]]
  • [[OpenOrd]]
  • [[YifanHu Multilevel]]

Create a new Layout​

This How To shows how to create a new layout algorithm in Gephi.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyLayout, you can start this tutorial.

Set Dependencies​

Add LayoutAPI, GraphAPI (UtilitiesAPI for @ServiceProvider see below and LookupAPI since it's almost always useful) modules as dependencies for your plugin module MyLayout. See [[How To Set Module Dependencies]].

Create LayoutBuilder​

  • Layout Builder provides information about the layout algorithm and is responsible for creating your Layout algorithm instances. All Layout algorithms should have their own builder.
  • Create a new builder class, for instance MyLayoutBuilder that implements LayoutBuilder.
  • The builder interface is requesting a LayoutUI object. Create an inner or anonymous class that implements LayoutUI.
  • Add @ServiceProvider annotation to your builder class. Add the following line before MyLayoutBuilder class definition, as shown below:
import org.openide.util.lookup.ServiceProvider;

@ServiceProvider(service = LayoutBuilder.class)
public class MyLayoutBuilder implements LayoutBuilder {
...

Create Layout​

Create a new class that implements Layout. This is the place the algorithm belongs.

Methods canAlgo(), initAlgo(), goAlgo() and endAlgo() are the logic of the algorithm. But the algorithm is manipulating a graph, so where is this graph? The graph can be get from the GraphModel, which is injected through the setGraphModel() method (fill setGraphModel() with this.graphModel = graphModel;). The system always sets this graph model before initAlgo() is called.

Add the graph model as a new private field of your class. +In your goAlgo() method, add the following code to get the current visible graph:

graph = graphModel.getHierarchicalGraphVisible();

Properties​

Your algorithm may have settings and properties that users may control. To be visible and editable in the Layout UI, properties need to be properly defined.

Let's say you have a float speed parameter that you want to expose. That is how to create the appropriate LayoutPropery:

LayoutProperty mySpeedProperty = LayoutProperty.createProperty(
this,
Float.class,
"Speed"
"Category",
"A short description what is this propery doing and how users may modify it",
"getSpeed",
"setSpeed");

Note that you need to create proper getter and setter for each property you want to expose.

Advanced concepts​

Layout Data​

A special mechanism is available if you need to store temporary objects in nodes. In the following example, we will create a new type of layout data which stores a dx and dy value.

Create a new MyLayoutData class that implements LayoutData and add two floats dx and dy. +How to init? Place the following code at the beginning of goAlgo():

for (Node n : nodes) {
if (n.getNodeData().getLayoutData() == null || !(n.getNodeData().getLayoutData() instanceof MyLayoutData)) {
n.getNodeData().setLayoutData(new MyLayoutData());
}
}

That ensure you have a layout data object for each of your nodes.

Custom properties​

Properties can be basic types like Boolean, Float etc. If you want to expose custom types, for instance date, you can provide a PropertyEditor class when building the property.

Note that a custom PropertyEditor class has been created for AttributeColumn in the AttributeColumnPropertyEditor module. Add this module as a new dependency.

+ + + + \ No newline at end of file diff --git a/Plugins/preview-renderer/index.html b/Plugins/preview-renderer/index.html new file mode 100644 index 0000000..ac2963f --- /dev/null +++ b/Plugins/preview-renderer/index.html @@ -0,0 +1,17 @@ + + + + + +Preview renderer | Gephi Documentation + + + + +
+
Skip to main content

Preview renderer

Introduction​

Preview is a highly customizable module and plug-ins can implements new renderers to display additional elements on screen, for instance hulls for groups. It's also possible to overwrite existing renderers and replace node or edge aspect.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyRenderer, you can start this tutorial.

One can find renderers examples in the PreviewPlugin module.

How renderers work​

Renderers describe how a particular item is rendered and has the code to dray on a rendering target (Processing, SVG or PDF). Items are for example the node or edges of the graph and are given to renderers to be drawn. Each item (e.g. node, edge) should have it's renderer.

Rendering is a three-steps process:

  1. First the preProcess() method is called on all renderers to let them initialize additional attributes for their items. The best example is the edge renderer which will initialize the source and target position in the EdgeItem object during this phase. In general the preProcess() method is the best for complex algorithms or gathering data from other items. Note that the preProcess() method is called only once per refresh, unlike render() which is called many times.
  2. The isRendererForitem() is then used to determine which renderer should be used to render an item. The method provides an access to the preview properties. For instance, if the properties says the edge display is disabled, the edge renderer should return false for every item. Note that nothing avoids several renderer to returns true for the same item.
  3. The render() method is finally called for every item which the renderer returned true at isRendererForitem(). It receives the properties and the render target. It uses the item attributes and properties to determine item aspects and the render target to obtain the canvas.

If you want to create your own Item look at [[HowTo add a preview item]]

Create a new Renderer​

Set Dependencies​

Add Preview API, Processing Wrapper, iText Wrapper and Lookup modules as dependencies for your plugin module. See [[How To Set Module Dependencies]].

Create new Renderer​

Create a new renderer MyRenderer class, which implements Renderer.

Add @ServiceProvider annotation to your renderer class, so it is detected by the system.

Here is how it should look like:

@ServiceProvider(service = Renderer.class)
public class MyRenderer implements Renderer {

public String getDisplayName(){
//return user friendly name for the renderer
}

public void preProcess(PreviewModel previewModel) {
//TODO
}

public void render(Item item, RenderTarget target, PreviewProperties properties) {
//TODO
}

public PreviewProperty[] getProperties() {
//TODO
}

public boolean isRendererForitem(Item item, PreviewProperties properties) {
//TODO
}

public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) {
//TODO
}
}

Implement the isRendererForItem​

Each item returns a different value for its getType() method so it's easy to know if the item is a node, an edge or a label.

The method also receives the current properties and can query values.

Here is the code from the edge arrow renderer that only works when items are non-directed edges:

public boolean isRendererForitem(Item item, PreviewProperties properties) {
return item.getType().equals(Item.EDGE) && properties.getBooleanValue(PreviewProperty.DIRECTED)
&& (Boolean) item.getData(EdgeItem.DIRECTED);
}

Implement getProperties​

You can add your own properties attached to the renderer. Typically each renderer has its own properties. For instance the node renderer has border size or color as properties. Once defined a property will be shawn to the user who can change its value.

Properties have a identifier, a display name, a description and a type. It's important to have a unique identifier to each property. Be sure to choose something not already taken.

Properties are displayed in categories. You can either set an existing category or define a new one. Existing categories are PreviewProperty.CATEGORY_NODES, PreviewProperty.CATEGORY_EDGES, PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.CATEGORY_EDGE_LABELS and PreviewProperty.CATEGORY_EDGE_ARROWS.

Here is how to create a property "Border width":

public PreviewProperty[] getProperties() {
return new PreviewProperty[]{
PreviewProperty.createProperty(this, "border_width", Float.class,
"Border width",
"",
PreviewProperty.CATEGORY_NODES).setValue(1f)};
}

Properties should have a default value. It is set at the creation of the property simply by calling setValue().

Implement render​

The render method receives an item and draw it to a render target. There is three possible render targets:

Renderers should implement the drawing routines for the three targets. One might ask why the same code has to be duplicated in three different ways. Unfortunately there is no unified drawing toolkit flexible and efficient enough to support this task at this point. The good news is that renderers have total control on what is drawn. It's verbose but flexible.

When the target is Processing, renderers obtain the PGraphicsJava2D object. For the SVG target, renderers obtain Batik's Document instance. As the PDF target rely on the iText library renderers obtain the PdfContentByte object.

Example how to handle the three targets in render:

public void render(Item item, RenderTarget target, PreviewProperties properties) {
if (target instanceof ProcessingTarget) {
renderProcessing(item, (ProcessingTarget) target, properties);
} else if (target instanceof SVGTarget) {
renderSVG(item, (SVGTarget) target, properties);
} else if (target instanceof PDFTarget) {
renderPDF(item, (PDFTarget) target, properties);
}
}

public void renderProcessing(Item item, ProcessingTarget target, PreviewProperties properties) {
PGraphics graphics = target.getGraphics();
...
}

public void renderPDF(Item item, PDFTarget target, PreviewProperties properties) {
PdfContentByte cb = target.getContentByte();
...
}

public void renderSVG(Item item, SVGTarget target, PreviewProperties properties) {
Element elem = target.createElement("circle");
...
target.getTopElement("nodes").appendChild(elem);
}

Look at renderers examples in the PreviewPlugin module.

Overwrite an existing renderer​

The default renderers can be overridden or extended. +Extend or replace an existing renderer

To extend or completely replace a default Renderer by your own implementation, create a new Renderer and set the annotation like below. In addition add [[Preview Plugin]] module as a dependency.

@ServiceProvider(service=Renderer.class, position=XXX) public class MyRenderer extends NodeRenderer

Being XXX the new position of the renderer Then you can reuse parts of the base class or just override them.

Default renderers are:

  • org.gephi.preview.plugin.renderers.NodeRenderer
  • org.gephi.preview.plugin.renderers.EdgeRenderer
  • org.gephi.preview.plugin.renderers.NodeLabelRenderer
  • org.gephi.preview.plugin.renderers.EdgeLabelRenderer
  • org.gephi.preview.plugin.renderers.ArrowRenderer

Appendix​

Custom properties​

Properties are usually default Java primitives like Float or Color. Custom property types can be used if a valid property editor is defined. Property editors define how a property value should be serialized and provide a custom UI to let the user modify the value. For instance to define a new property type NumberRange one could create a UI with two text fields to enter number ranges.

Create the new type class and then create a new property editor:

public class NumberRangePropertyEditor extends java.beans.PropertyEditorSupport {
@Override
public Component getCustomEditor() {
//TODO returns custom JPanel
}

@Override
public String getAsText() {
//TODO returns the value as string
}

@Override
public void setAsText(String text) {
//TODO set value from the text
}

@Override
public boolean supportsCustomEditor() {
return true;
}
}

One can find property editors examples in the DesktopPreview module.

Complex pre-process​

In each renderer the preProcess() method allows to access all preview data and execute complex algorithms.

How to read all items of a particular type​

Simply by querying the preview model:

Item[] edgeItems = previewModel.getItems(Item.EDGE);

How to use constants and data generated in pre-process​

Renderers should remain stateless. That means one shouldn't define any variable or fields in the renderer class itself. Instead all data can be put in the property system.

Here is an example how to calculate the min and max edge weight in the preProcess() and use it in render():

public void preProcess(PreviewModel previewModel) {
PreviewProperties properties = previewModel.getProperties();
Item[] edgeItems = previewModel.getItems(Item.EDGE);

for (Item edge : edgeItems) {
minWeight = Math.min(minWeight, (Float) edge.getData(EdgeItem.WEIGHT));
maxWeight = Math.max(maxWeight, (Float) edge.getData(EdgeItem.WEIGHT));
}
properties.putValue("weight.min", minWeight);
properties.putValue("weight.max", maxWeight);
}

public void render(Item item, RenderTarget target, PreviewProperties properties) {
float minWeight = properties.getFloatValue("weight.min");
float maxWeight = properties.getFloatValue("weight.max");
...
}

For additional data generated per item, simply call item.setData().

Default item data​

Node

  • x (float)
  • y (float)
  • size (float)
  • color (color)

Edge

  • weight (float)
  • directed (boolean)
  • mutual (boolean)
  • self_loop (boolean)
  • meta_edge (boolean)
  • color (color)

Node Label

  • label (string)
  • color (color)
  • size (float)
  • width (float)
  • height (float)
  • visible (boolean)

Edge Labels

  • label (string)
  • color (color)
  • size (float)
  • width (float)
  • height (float)
  • visible (boolean)

Edges have additional data set by the default edge renderer:

  • source (nodeitem)
  • target (nodeitem)
+ + + + \ No newline at end of file diff --git a/Plugins/statistics/index.html b/Plugins/statistics/index.html new file mode 100644 index 0000000..1e4ca18 --- /dev/null +++ b/Plugins/statistics/index.html @@ -0,0 +1,20 @@ + + + + + +Statistics | Gephi Documentation + + + + +
+
Skip to main content

Statistics

Available statistics​

  • [[Average Clustering Coefficient]]
  • [[Average Path Length]]
  • [[Betweenness Centrality]]
  • [[Closeness Centrality]]
  • [[Connected Components]]
  • [[Degree]]
  • [[Degree Power Law]]
  • [[Diameter]]
  • [[Eigenvector Centrality]]
  • [[Graph Density]]
  • [[HITS]]
  • [[Modularity]]
  • [[PageRank]]

Create a new Metric​

This HowTo shows how to create a new statistic/metric algorithm in Gephi.

Please look at [[Plugin Quick Start]] to know how to create a new Netbeans Module. When you have your plugin module, that we will call MyMetric, you can start this tutorial.

Set Dependencies​

Add StatisticsAPI, GraphAPI and AttributesAPI modules as dependencies for your plugin module MyMetric. See [[How To Set Module Dependencies]]. Also add LongTaskAPI and Lookup, which will be used.

Create StatisticsBuilder​

  • Statistics Builder provides information about the metric algorithm and is responsible for creating your Statistics algorithm instances. All metric algorithms should have their own builder.
  • Create a new builder class, for instance MyMetricBuilder that implements StatisticsBuilder.
  • Fill getName() method by returning a display name like My Metric. Leaves other methods untouched for the moment.
  • Add @ServiceProvider annotation to your builder class. Add the following line before MyMetricBuilder class definition, as shown below:
@ServiceProvider(service = StatisticsBuilder.class)
public class MyMetricBuilder implements StatisticsBuilder {
...

Create Statistics​

Create a new class that implements Statistics and name it MyMetric. This is the place the algorithm belongs. +Locate the execute() method, you will add your code here. The getReport() method should return plain text or HTML text that describe the algorithm execution. Create a new field

private String report = "";

and return report in getReport(). That done, go back to StatisticsBuilder and fill remaining methods like above:

public Statistics getStatistics() {
return new MyMetric();
}

public Class<? extends Statistics> getStatisticsClass() {
return MyMetric.class;
}

Details about how to use GraphModel and AttributeModel are said in the next section.

Set LongTask​

To let your algorithm task be cancelled and its progress watched, implement LongTask interface on MyMetric. +Add two fields:

private boolean cancel = false;
private ProgressTicket progressTicket;

and implement new methods:

public boolean cancel() {
cancel = true;
return true;
}

public void setProgressTicket(ProgressTicket progressTicket) {
this.progressTicket = progressTicket;
}

Use the cancel field to terminate your algorithm execution properly and return from execute(). +See [[HowTo use Progress]] for more details.

Create StatisticsUI​

Create a new class that implements StatisticsUI and name it MyMetricUI. The user interfaces is defined here and allows to be automatically added to the Statistics module in Gephi. +Add @ServiceProvider annotation to your UI class. Add the following line before MyMetricUI class definition, as shown below:

@ServiceProvider(service = StatisticsUI.class)
public class MyMetricUI implements StatisticsUI{
...

First implement description method:

public String getDisplayName() {
return "My Metric";
}

public String getCategory() {
return StatisticsUI.CATEGORY_NETWORK_OVERVIEW;
}

public int getPosition() {
return 800;
}

public Class<? extends Statistics> getStatisticsClass() {
return MyMetric.class;
}

The category is just where you want your metric to be displayed: NODE, EDGE or NETWORK. The position control the order the metric front-end are displayed. Returns a value between 1 and 1000, that indicates the position. Less means upper.

Now create a new JPanel for your metric settings panel. Name it MyMetricPanel. Add setters and getters for all properties users can edit. Let's say the panel gives the choice on the graph type and has isDirected() and setDirected() methods.

Now the setup() and unsetup() are filled. It follow the injection pattern, an instance of MyMetric is pushed to let the UI control it.

First add fields to store the current metric:

private MyMetricPanel panel;
private MyMetric myMetric;

and fill getSettingsPanel(), setup() and unsetup():

public JPanel getSettingsPanel() {
panel = new MyMetricPanel();
return panel;
}

public void setup(Statistics statistics) {
this.myMetric = (MyMetric) statistics;
if(panel!=null) {
panel.setDirected(myMetric.isDirected());
}
}

public void unsetup() {
if(panel!=null) {
myMetric.setDirected(panel.isDirected());
}
panel = null;
}

The final step is the getValue(), which returns the result value on the front-end. If your metric doesn't have a single result value, return null.

Implementation help​

The execute() method gives both GraphModel for getting graph structure and AttributeModel to write results in new attribute columns.

Use Progress​

If you know how many steps your algorithm is doing, for instance if your algorithm just reads nodes:

Progress.start(progressTicket, graph.getNodeCount());

and Progress.progress(progressTicket) within the loop.

Lock your algorithm​

It's preferable to execute your algorithm in a read lock, in order no other thread can modify the graph while execution. Never return execute() with a lock open, see Graph Locking

graph.readLock();
//Your algorithm
graph.readUnlockAll();

Write results for each node/edge​

It's easy, you create a new column and set row's value for each node. If you want to write an in-degree column, in execute():

AttributeTable nodeTable = attributeModel.getNodeTable();
AttributeColumn inCol = nodeTable.getColumn("indegree");

if (inCol == null) {
inCol = nodeTable.addColumn("indegree", "In Degree", AttributeType.INT, AttributeOrigin.COMPUTED, 0);
}

for (Node n : graph.getNodes()) {
AttributeRow row = (AttributeRow) n.getNodeData().getAttributes();
row.setValue(inCol, graph.getInDegree(n));
}

Sample​

public void execute(GraphModel graphModel, AttributeModel attributeModel) {
report += "Algorithm started ";
Graph graph = graphModel.getGraphVisible();
graph.readLock();

try {
Progress.start(progressTicket, graph.getNodeCount());

for (Node n : graph.getNodes()) {
//do something
Progress.progress(progressTicket);
if (cancel) {
break;
}
}
graph.readUnlockAll();
} catch (Exception e) {
e.printStackTrace();
//Unlock graph
graph.readUnlockAll();
}
}
+ + + + \ No newline at end of file diff --git a/Plugins/update-a-plugin/index.html b/Plugins/update-a-plugin/index.html new file mode 100644 index 0000000..20dabdd --- /dev/null +++ b/Plugins/update-a-plugin/index.html @@ -0,0 +1,16 @@ + + + + + +Update a plugin | Gephi Documentation + + + + +
+
Skip to main content

Update a plugin

Step1: New code​

A plugin usually use some of Gephi's APIs. For example for a layout plugin, it will depend on LayoutAPI and GraphAPI. Gephi developers sometimes have to change existing APIs, and break compatibility with existing plug-ins. In that case, plugin developers have to update their code to make it work with the new version. This is not likely to happen on APIs marked as stable on the API Index.

When an API is updated, a message is sent on the gephi-plugins mailing-list and the API Changes section is updated on the API Index.

Step2: Update specification version​

The specification version is a version number given by the plugin developers in the module properties. Gephi uses specification versions to know when a plugin should be updated. For instance if a Gephi user has the plugin "SuperLayout" at version 1.1 and the 1.2 version is available on the website, Gephi will ask the user if he wants to update it.

So, before uploading a new version of your plug-in, always increment the Specification Version.

Right click on your plugin and select Properties. On the "API Versionning" tab increase the number of the specification version.

Step3: Upload on the Gephi Marketplace​

Upload a new plugin​

  1. Go to https://gephi.org/plugins/#/
  • Click on the List your own > New plugin menu item
  • Log in
  • Follow the instructions to upload the file.
  • Wait for and admin approval. You will receive a notification by email when it is published.

Update an existing plugin​

  1. Go to https://gephi.org/plugins/#/
  • Log in
  • Go to your user profile
  • Select the plugin to update and follow instructions to upload a new version
+ + + + \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index b20e904..0000000 --- a/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Gephi documentations websites - -This repository is for the gephi projects documentation, with one site for Gephi (desktop) and an other one for Gephi-Lite. -In the futur, we can have others. - -Each of those sites are a docusaurus instance. - -## How to use it - -It's a javascript mono-repo project. - -Before all, you need to install the project's dependencies -``` -$> npm install -``` - -There are 3 main commands in the project - -### npm start - -``` -$> npm start -``` - -It starts the project in dev mode, so you will have the hot reload feature. -Under the hood, it starts the docusaurus instance for geph & gephi-lite, as well as a vite server that serves the root index.html files and has a proxy for each docusaurus instance. - -Open the url http://localhost:5173 - -### npm run build - -It builds the static website inside the `/build` directory. - -``` -$> npm run build -``` - -### npm run preview - -It runs a webserver that serves the `/build` directory. So it should be used after a `npm run build` to preview the build - -``` -$> npm run preview -``` - -Open the url http://localhost:5174 \ No newline at end of file diff --git a/User_Manual/Import_CSV_Data/index.html b/User_Manual/Import_CSV_Data/index.html new file mode 100644 index 0000000..5c3f02d --- /dev/null +++ b/User_Manual/Import_CSV_Data/index.html @@ -0,0 +1,16 @@ + + + + + +Import CSV Data | Gephi Documentation + + + + +
+
Skip to main content

Import CSV Data

Introduction​

This manual shows what steps are necessary to import CSV files into Gephi with data laboratory, which will expect that each row of the file is a node or an edge.

Note that the import can be done at any moment, the workspace does not need to be empty. You should know some general aspects of the import process:

  • You may choose which columns to import. The only exceptions are 'Source' and 'Target' for edges tables, which are mandatory and can't be deselected
  • If a column title already exists in the workspace you will be able to use it but the data type of the column can't be changed, and imported data will be parsed to fit the existing column type
  • Data for each row and column will be parsed to the given/existing column data type when possible. If this is not possible for a given cell, then it will be set to a null value
  • You can choose what table to import the rows to (nodes or edges), but the behaviour and requirements are different. Be aware of what options you have selected before executing the import process

Next we'll learn how to use the import wizard to customize the data to our needs based on the options available.

Launching the import CSV wizard and first step​

Start by clicking 'Import CSV' button in Data Laboratory as shown in the picture

launch-import-csv-wizard

Then the import wizard will open and you are presented with some generic, table independent options.

import-csv-step1

In this step you will indicate the format of the CSV file and can preview the resulting table.

  • First specify a CSV file that is not empty
  • Then choose the values separator from some common options and the encoding/charset of the file
  • Finally select the table to import the rows and columns of the file. Edges table files require, at minimum, columns labeled 'Source' and 'Target' (which can be case insensitive)

Last step - Choosing columns details and table specific options​

This final step offers some common options and behaviour descriptions for both nodes tables or edges tables:

  • You can mark what columns to use and select their type when they don't exist yet
  • If no node/edge Id column is provided or it is empty for some row, an automatic id will be assigned

Importing to nodes table​

When importing to nodes table you can also indicate if you want to update a node's data instead of creating a new node when a node with that id already exists.

import-csv-step2-nodes

Importing to edges table​

In case of importing to edges table, the behaviour is a bit different:

  • 'Source' and 'Target' node Ids are mandatory for all rows
  • Edge type is optional and its default is 'Directed'

import-csv-step2-edges

+ + + + \ No newline at end of file diff --git a/User_Manual/Import_Dynamic_Data/index.html b/User_Manual/Import_Dynamic_Data/index.html new file mode 100644 index 0000000..0f036bf --- /dev/null +++ b/User_Manual/Import_Dynamic_Data/index.html @@ -0,0 +1,16 @@ + + + + + +Import Dynamic Data | Gephi Documentation + + + + +
+
Skip to main content

Import Dynamic Data

Longitudinal (also called dynamic) networks are simply networks that evolve chronologically. If you imagine the network of your friends, the number of nodes, connections and attribute values grow and change as time passes. We call these dynamic attributes, because they have values associated with a particular moment.

intro-longitudinal

Longitudinal Networks

There are two ways to model a longitudinal network, either a collection of networks where each network is a particular point in time (a day, a month, ...) or a slice network where each element has an interval of existence. This can also be described as Discrete vs. Continuous representations of time. Gephi uses the latter, also known as Intervals, because it's more flexible.

For example:

Imagine a network of three nodes for the years 2007, 2008 and 2009. The years these nodes are present can be represented either as distinct points in time or as time intervals (as pictured on the left and right sides of the arrow below, respectively).

importdynamics-intervals

The second node, 'n2', is present during all three years and is represented by brackets enclosing the first and last years [2007, 2009]. Gephi automatically includes any dates, such as 2008, within this range. The first node, 'n1', however, is closed with a parenthesis rather than a bracket. This means the node was present in 2008 but NOT in 2009.

Technically speaking, brackets are used for closed (also known as inclusive) intervals, while parentheses represent open intervals. In other words, dates enclosed within two brackets include both the startpoint and endpoint, whereas dates enclosed within two parentheses begins after the startpoint and ends before the endpoint. Half-closed intervals that incorporate both, like the [2007, 2009) example above, are also possible.

Check the Data Laboratory to see how intervals are created for each node or edge. When the network is longitudinal, a Time Interval column is present that shows when the interval is present in the graph. You can visualize this by clicking the checkbox next to 'Time intervals as graphics' in the Configuration tab of the Data Laboratory. After enabling the timeline, be sure to adjust the size of the window of the sliding filter of your timeline, otherwise you will receive an error stating that Gephi "cannot animate timeline without an animation interval."

Import from GEXF File​

The GEXF format includes everything needed to represent longitudinal networks with intervals. You define a single network but add 'start' and 'end' attributes to set when a node/edge appears or vanish.

Basic example​

Below is our earlier example with three nodes from 2007 to 2009, but we've added edges to complete the example graph.

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.1draft"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.gexf.net/1.1draft
http://www.gexf.net/1.1draft/gexf.xsd"
version="1.1">
<graph mode="dynamic" defaultedgetype="directed">
<nodes>
<node id="n1" label="Node 1" start="2007" endopen="2009" />
<node id="n2" label="Node 2" start="2007" end="2009" />
<node id="n3" label="Node 3" start="2008" end="2009" />
</nodes>
<edges>
<edge source="n1" target="n2" />
<edge source="n1" target="n3" start="2008"/>
<edge source="n3" target="n2" start="2008" endopen="2009"/>
</edges>
</graph>
</gexf>

Notice the following important points:

  • We set mode="dynamic" to the graph element, that is needed, as GEXF can represent static graphs as well
  • Use start and end for closed intervals (ex: [2007, 2009]) and startopen and endopen for open (ex: (2008, 2009))
  • Start and end dates for each element are optional. Leaving these empty will create an [-infinity, +infinity] interval. If only one bound is defined like for the second edge, it becomes [2009, +infinity].

The GEXF specifications, including dynamics, are available in the GEXF Primer.

Dynamic attributes​

The example above described how to represent the network topology over time, where nodes and edges are added or remove. Now let's see how to represent values changing over time, for example 'Price'. Below is the same network with a price attribute. The attribute definition in the <attribute> element is the same as it would be for a static GEXF, but the way that values are written has changed.

<gexf xmlns="http://www.gexf.net/1.1draft"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.gexf.net/1.1draft
http://www.gexf.net/1.1draft/gexf.xsd"
version="1.1">
<graph mode="dynamic" defaultedgetype="directed">
<attributes class="node" mode="dynamic">
<attribute id="price" title="Price" type="float"/>
</attributes>
<nodes>
<node id="n1" label="Node 1" start="2007" endopen="2009" >
<attvalues>
<attvalue for="price" value="25.5" start="2007"/>
<attvalue for="price" value="42.5" start="2008"/>
</attvalues>
</node>
<node id="n2" label="Node 2" start="2007" end="2009" >
<attvalues>
<attvalue for="price" value="12" start="2008"/>
</attvalues>
</node>
<node id="n3" label="Node 3" start="2008" end="2009" >
<attvalues>
<attvalue for="price" value="40.5" start="2008" end="2009" />
</attvalues>
</node>
</nodes>
<edges>
<edge source="n1" target="n2" />
<edge source="n1" target="n3" start="2008"/>
<edge source="n3" target="n2" start="2008" endopen="2009"/>
</edges>
</graph>
</gexf>

Keep in mind the following

  • To represent several values over time, the idea is to repeat the same attvalue for each period, with the same for but with different values and start/end
  • It's not mandatory to set a value everywhere, in case of missing the default value is used
  • For the node 'n2', the value '12' starts in 2008 and no end period is specified. That gives the interval [2008, +infinity] which means the value remains '12' in 2009 and after.

The GEXF specifications, including dynamics attributes are available in the GEXF Primer.

Dynamic weight​

Normally an edge's weight is directly defined in the edge element with a particular value. Defining a dynamic weight attribute overrides this value and provides dynamic weight support.

The rule is to define an edge attribute with the weight keyword for identifier. Then, use multiple 'attvalue' like explained above to set different values over time.

<attributes class="edge" mode="dynamic">
<attribute id="weight" title="Weight" type="float"/>
</attributes>

Transform existing column in Time Interval​

Imagine a social network where each node represents a friend of yours and one of the attribute columns is the date you met. In order to transform this column into a dynamic interval take the following steps:

  • Step 1: Click on Merge Columns manipulator in the Data Laboratory.

transformlongitudinal-datalab1

  • Step 2: From the available columns on the left, add the column or columns (if you have both a start and end period) you want to use to create the time interval. Then select Create time interval from the available merge strategies.

transformlongitudinal-datalab2

  • Step 3: Select which column is the start and which is the end (or leave this blank if no end exists). If the column is numerical (integer, float, double), select Parse numbers. If the data are date strings, they can also be parsed and transformed into a time interval. Our 'First Met' column is just the day in the year, just a number.

transformlongitudinal-datalab3

Use Time Frame Import with several static files​

NOTE: Outdated for Gephi 0.9.1, this documentation needs to be updated. Check https://github.com/gephi/gephi/issues/1546

This method can create a longitudinal network from a set of static "snaphsots" files. If you have a complete network at different point in time and want to see how both the network and its attributes changes over time this is the right method.

Note that this method implementation is still experimental and may not work in all cases. Be sure to verify the following points:

  • Your node identifiers are exactly the same between the files. If not, at least the labels are (you can choose in the wizard).
  • If GEXF, your network mode is set at static
  • There is no previous graph in the workspace when you start importing Time Frame
  • Attribute columns are the same in all files

Dataset​

We can take for instance three GEXF files and say each of this file is for a particular year, the network in 2007, in 2008 and in 2009.

The static network in 2007, notice the price attribute:

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
<graph mode="static" defaultedgetype="directed">
<attributes class="node" type="static">
<attribute id="price" title="Price" type="int"/>
</attributes>
<nodes>
<node id="1" label="Node 1">
<attvalue for="price" value="12"/>
</node>
<node id="2" label="Node 2">
<attvalue for="price" value="8"/>
</node>
<node id="3" label="Node 3">
<attvalue for="price" value="5"/>
</node>
</nodes>
<edges>
<edge source="1" target="2" weight="1" />
<edge source="1" target="3" weight="2" />
</edges>
</graph>
</gexf>

The static network in 2008, the node '3' disappeared and a node '4' appears. Prices and edge's weight have changed also.

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
<graph mode="static" defaultedgetype="directed">
<attributes class="node" type="static">
<attribute id="price" title="Price" type="int"/>
</attributes>
<nodes>
<node id="1" label="Node 1">
<attvalue for="price" value="15"/>
</node>
<node id="2" label="Node 2">
<attvalue for="price" value="6"/>
</node>
<node id="4" label="Node 4">
<attvalue for="price" value="8"/>
</node>
</nodes>
<edges>
<edge source="1" target="2" weight="4" />
<edge source="1" target="4" weight="3" />
<edge source="2" target="4" weight="1" />
</edges>
</graph>
</gexf>

The static network in 2009, the node '3' is back, the node '2' is gone and priced changed again.

<?xml version="1.0" encoding="UTF-8"?>
<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">
<graph mode="static" defaultedgetype="directed">
<attributes class="node" type="static">
<attribute id="price" title="Price" type="int"/>
</attributes>
<nodes>
<node id="1" label="Node 1">
<attvalue for="price" value="10"/>
</node>
<node id="3" label="Node 3">
<attvalue for="price" value="3"/>
</node>
<node id="4" label="Node 4">
<attvalue for="price" value="12"/>
</node>
</nodes>
<edges>
<edge source="1" target="3" weight="5" />
</edges>
</graph>
</gexf>

Import in Gephi​

Do the following steps on a clear project to import your dataset:

  • Step 1: Import the first file and select Time Frame in the import report, click on OK. That will display a settings dialog.

importtimeframe1

  • Step 2: Select either a Date or a real number as a time format. Real numbers is the default choice, here we put the year 2007. Click on OK, the file is imported.

importtimeframe2

  • Step 3: You can now do the same for all other files, in a chronological order. For the second file select 2008, then 2009 etc.

importtimeframe3

The result is a longitudinal network in Gephi where nodes and edges have time intervals according how they were present in the different files. Similarly all attributes are dynamic attributes. The 'Price' attribute in the dataset in a DYNAMIC_INTEGER column and each value is associated with its interval. Moreover the edge's weight itself is dynamic.

+ + + + \ No newline at end of file diff --git a/User_Manual/Official_Videos/01-first-contact-with-gephi/index.html b/User_Manual/Official_Videos/01-first-contact-with-gephi/index.html new file mode 100644 index 0000000..fb05254 --- /dev/null +++ b/User_Manual/Official_Videos/01-first-contact-with-gephi/index.html @@ -0,0 +1,16 @@ + + + + + +First contact with Gephi | Gephi Documentation + + + + +
+
Skip to main content
+ + + + \ No newline at end of file diff --git a/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them/index.html b/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them/index.html new file mode 100644 index 0000000..7065384 --- /dev/null +++ b/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them/index.html @@ -0,0 +1,16 @@ + + + + + +Layouts, clusters, and where to find them | Gephi Documentation + + + + +
+
Skip to main content
+ + + + \ No newline at end of file diff --git a/User_Manual/datasets/index.html b/User_Manual/datasets/index.html new file mode 100644 index 0000000..155d1ce --- /dev/null +++ b/User_Manual/datasets/index.html @@ -0,0 +1,16 @@ + + + + + +Datasets | Gephi Documentation + + + + +
+
Skip to main content

Datasets

The Gephi sample datasets below are available in various formats (GEXF, GDF, GML, NET, GraphML, DL, DOT). Feel free to add new datasets, but be sure to cite the original authors.

Supported graph formats are described here.

Gephi can open zipped files directly.

Web and Internet​

  • GEXF file. EuroSiS web mapping study: Mapping interactions between Science in Society actors on the Web of 12 European countries. Original report and data can be found here.
  • GML file. Internet: a symmetrized snapshot of the structure of the Internet at the level of autonomous systems, reconstructed from BGP tables posted by the University of Oregon Route Views Project. This snapshot was created by Mark Newman on July 22, 2006 and was not previously published.

Social networks​

  • GML file. Les Miserables: coappearance weighted network of characters in the novel Les Miserables. D. E. Knuth, The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley, Reading, MA (1993).
  • GEXF file. Hypertext 2009 dynamic contact network: contact network during the Hypertext 2009 conference. Source: Sociopatterns.org.
  • GEXF file. CLASS OF 1880/81: friendship network of a German boys' school class from 1880/1881. It's based on the probably first ever primarily collected social network dataset, assembled by the primary school teacher Johannes Delitsch. The data was reanalyzed and compiled for the article: Heidler, R., Gamper, M., Herz, A., Eßer, F. (2014): Relationship patterns in the 19th century: The friendship network in a German boys' school class from 1880 to 1881 revisited. Social Networks 13: 1--13..
  • GML file. Zachary's karate club: social network of friendships between 34 members of a karate club at a US university in the 1970s. W. W. Zachary, An information flow model for conflict and fission in small groups, Journal of Anthropological Research 33, 452-473 (1977).
  • GML file. Coauthorships in network science: coauthorship network of scientists working on network theory and experiment, as compiled by M. Newman in May 2006. A figure depicting the largest component of this network can be found here. M. E. J. Newman, Phys. Rev. E 74, 036104 (2006).
  • GEXF file. CPAN authors: CPAN Explorer is a visualization project aiming at analyzing the relationships between the developers and the packages of the Perl language, known as the CPAN community. This snapshot was created by Linkfluence in July 2009. This file contains the network of developers, linked when they use the same Perl module. Original data can be found here.
  • GEXF file. CPAN distributions: CPAN Explorer is a visualization project aiming at analyzing the relationships between the developers and the packages of the Perl language, known as the CPAN community. This snapshot was created by Linkfluence in July 2009. This file contains the network of Perl modules dependencies. Orginal data can be found here.
  • NET file. Jazz musicians network: List of edges of the network of Jazz musicians. P.Gleiser and L. Danon , Adv. Complex Syst.6, 565 (2003).
  • TGZ file. Github open source developers: See https://github.com/franckcuny/blog/blob/master/posts/2010-03-25-github-explorer.md/
  • DL file. Online Social Network 1899 nodes - Opsahl, T., Panzarasa, P., 2009. Clustering in weighted networks. Social Networks 31 (2), 155-163
  • GEPHI file. The Marvel Social Network Networks of super heroes, constructed by Cesc Rosselló, Ricardo Alberich, and Joe Miro from the University of the Balearic Islands. Collected by Infochimps and transformed & enhanced by Kai Chang.
  • GDF file. Comic and Hero Network Same data as above, but this includes the comics the heroes appear in.
  • DOT file. Twitter mentions and retweets of some part of the Twitter network. The file is updated from time to time.
  • GEXF file. Contact networks in a primary school, SocioPatterns team, 2011.
  • GEXF file. Historical Social Network of Chinese Buddhism 漢傳佛教歷史社會網絡 17,000+ persons, 25,000+ connections.

Biological networks​

  • GEXF. Diseasome: A network of disorders and disease genes linked by known disorder–gene associations, indicating the common genetic origin of many diseases. Genes associated with similar disorders show both higher likelihood of physical interactions between their products and higher expression profiling similarity for their transcripts, supporting the existence of distinct disease-specific functional modules. The original dataset can be found here: The Human Disease Network, Goh K-I, Cusick ME, Valle D, Childs B, Vidal M, Barabási A-L (2007), Proc Natl Acad Sci USA 104:8685-8690
  • GEXF. C. Elegans neural network: A directed, weighted network representing the neural network of C. Elegans. Data compiled by D. Watts and S. Strogatz and made available on the web here. Please cite D. J. Watts and S. H. Strogatz, Nature 393, 440-442 (1998). Original experimental data taken from J. G. White, E. Southgate, J. N. Thompson, and S. Brenner, Phil. Trans. R. Soc. London 314, 1-340 (1986).
  • GEXF. Yeast: Protein-Protein interaction network in yeast. Original data can be found here.

Infrastructure networks​

  • GML. Power grid: An undirected, unweighted network representing the topology of the Western States Power Grid of the United States. Data compiled by D. Watts and S. Strogatz and made available on the web here. Please cite D. J. Watts and S. H. Strogatz, Nature 393, 440-442 (1998).
  • GRAPHML. Airlines: unknown source.
  • NET. US Air97: North American Transportation Atlas Data (NORTAD). Original data can be found here.

Other networks​

  • GEXF. Java code: Source code structure of a Java program, by S.Heymann & J.Palmier, 2008.
  • GEXF. Dynamic Java code: Dynamic source code structure of a Java program by evolution of commits on the SVN, by S.Heymann & J.Bilcke, 2008.
  • GML. Word adjacencies: adjacency network of common adjectives and nouns in the novel David Copperfield by Charles Dickens. Please cite M. E. J. Newman, Phys. Rev. E 74, 036104 (2006).
  • NET. Wordnet English dictionary: unknown source.
  • DOT. Abstract mesh: 331 nodes.

Sources​

Some of the above datasets are from:

Other network data repositories​

+ + + + \ No newline at end of file diff --git a/User_Manual/gui/index.html b/User_Manual/gui/index.html new file mode 100644 index 0000000..bbc9b08 --- /dev/null +++ b/User_Manual/gui/index.html @@ -0,0 +1,25 @@ + + + + + +Graphical User Interface | Gephi Documentation + + + + +
+
Skip to main content

Graphical User Interface

Global visual framework​

Organization​

Gephi is a flexible desktop application and a visual framework: it does not constrain the user to do some tasks in a predefined way. On the contrary, the user is free to rearrange the environment, move panels, show/hide windows, etc. The GUI is set by default for three task families grouped as Overview, Data Laboratory and Preview.

Modes are accessible under the main menu:

  • Overview: graph manipulation mode.
  • Data Laboratory: data visualization in tables.
  • Preview: visual tuning before vectorial export.

image

image

image

Workspaces​

A workspace is a whole environment for exploring one graph. If you want to analyze more graphs simultaneously, you need to create new workspaces. Create, delete and clean workspace data from the Edit menu. +Note that each new graph import creates a new workspace if you select the "Add full graph" option in the import window. Hence you are still able to work on the first graph later.

image

Overview​

Graph and Tools​

image +Graph window - Graph rendered on the center and tools on the sides.

image +Select Highlight nodes under the cursor.

image +Edge selection color Incoming links are colored differently than outgoing links.

image +Heatmap Set color intensity on a node neighborhood, by the distance.

image +Multiple select Nodes are selected under the rectangle.

image +Shorthest path Display the shortest path if exist between two clicked nodes.

Layout​

Select an algorithm and set parameters on the fly. Save them into presets.

image

Ranking​

Set numerical attributes to distribute node/edge colors, sizes, label colors and label sizes. Right-click on the window to display the ranked list of nodes or edges.

image

Partition​

Node or edge grouping on attribute or computed metric. A color is assigned to each group, and can be changed by right-clicking on the window.

image +Group List

image +Pie chart

Statistics/metrics​

Run metrics and save reports in HTML. Node and edge computed results are available as attributes.

image

Filters​

A library of filters is available to combine. Drag the filter (e.g., Degree Range) to build the query, and then set the parameters visually. Finally apply the query output to select elements or to filter them. When filtering is activated, changes appear in real time.

image

Timeline​

Move left and right cursors to filter the graph on time intervals.

image

The timeline opens automatically when you open a dynamic network. Enable the timeline to set the time interval. Drag the bounds of the interval using your mouse.

Context​

Display the number of nodes and edges, the type of the graph and the percentage of visible nodes.

image

Edit​

View and edit the attributes of a selected node.

image

Data Laboratory​

Show node and edge attributes in a table, which also allows for dynamic regexp filtering.

image

Preview​

Settings​

Customizable visuals for vectorial export, which may be saved as presets.

image

Visualization​

Fine tuning on nodes, edges and labels rendering.

image

+ + + + \ No newline at end of file diff --git a/User_Manual/troubleshooting/index.html b/User_Manual/troubleshooting/index.html new file mode 100644 index 0000000..ad52d98 --- /dev/null +++ b/User_Manual/troubleshooting/index.html @@ -0,0 +1,17 @@ + + + + + +Troubleshooting | Gephi Documentation + + + + +
+
Skip to main content

Troubleshooting

Memory issues​

Memory available to Gephi is determined by Java. Less or more memory can be allocated by configuring Gephi's startup settings. If too little memory is allocated, Gephi will stop running when it reached the limit and you will loose your current work. If too much memory is set, Java will not be able to start and return JVM Creation failed message. By default, maximum memory is set to 256mo or 512mo.

To modify memory settings, you need to edit Gephi settings file. Modify the value after the -Xmx option to change the maximum heap space. For example, to use a heap size between 256 and 1024 MB, change the options to -Xms256m and -Xmx1024m. If you have Gephi open, you must close and reopen Gephi before new options take effect. On computers with 2GB of memory, you can set -Xmx1400 to get maximum performance.

How to edit gephi.conf:​

  • On Windows, go to the Gephi folder in Start menu and click on Startup Settings. Edit this file with Notepad or WordPad. Alternatively, go to C:\Program Files\Gephi\etc\gephi.conf and edit file manually.
  • On Mac OS X, right-click on Gephi application icon and select Show Package Contents to open a new Finder window displaying a Contents folder. Open the Contents folder, and then open the Resources/gephi/etc folder, in which the gephi.conf file resides. Use TextEdit to edit the file.
  • On Linux, go into your application directory and then into the etc folder. Edit the file with a text editor.

To use Gephi with more than ~1.5GB of memory, which could happen with very large graphs, you need to use A 64-bit version of Java. See following section.

64-bit​

Gephi has been successfully tested on 64-bit architecture (AMD64, Intel Core 2 Duo, Intel Core i7), 64 bits OS (Windows Vista 64-bit, Windows 7 64-bit) and 64-bit version of Java (JVM 64-Bit Server). To use more than ~1.5GB of memory in Gephi, which could happen with very large graphs, you need to have a 64-bit architecture, OS and a 64-bit JVM. A compatible 64-bit JRE or JDK can be downloaded from Java website.

When multiple JRE or JDK are installed on the same machine, you can specify to Gephi to use a particular path. Edit gephi.conf as described in the upper section, uncomment the jdkhome line and set the JRE or JDK path.

Where are user files?​

Locate and delete gephi user directory to clean your installation.

On Windows 2K/XP, user directory is located in

C:\Documents and Settings\username\Application Data\.gephi

On Windows Vista/Seven, user directory is located in

C:\Users\username\AppData\Roaming\.gephi
+(the logs files are under C:\Users\username\AppData\Roaming\.gephi\{gephiVersion}\dev\var\log\messages.log

On Mac OS X, user directory is located in

/Users/username/Library/Application\ Support/gephi

On Linux, user directory is located in

/home/username/.gephi

Linux issues​

Select Sun JRE on Ubuntu​

After installing the Sun Java package, remember to run in command line:

sudo update-alternatives --config java
sudo update-alternatives --config javac

In both cases select the option that has a path with java-6-sun in it.

Improve text rendering​

Add the following JVM parameter in the Gephi configuration file:

-J-Dawt.useSystemAAFontSettings=on

Or add it to your environment variables:

export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on"

Mac OS X issues​

Improve text rendering​

Add the following JVM parameter in the Gephi configuration file:

-J-Dapple.awt.graphics.UseQuartz=true

Windows issues​

Gephi not using Graphical Card on Laptop​

The troubleshooting explained is for Intel + Nvidia based laptop, note that the process is still relevant for AMD based laptop, just the tools involved might be different

If you have a laptop that has a dedicated graphical card (Nvidia), it's very probable that the laptop has also integrated card (Intel(R) UHD Graphics).

Windows might probably, by default, wont' give Gephi the ability to use the dedicated graphical card, which will result in degraded performance for visualisation.

To check that Gephi has or not get granted to use the correct graphical card :

  • Open Gephi
  • On the top bar, go to Tools -> Options, a window will open
  • On the tab go to Visualisation and then on the tab under Open GL

image

On the right side of the windows, if you see something like Nvidia Corporation it means that Gephi is using the dedicated graphical card, all good.

If you see something like Intel UHD it means Gephi is using the integrated graphical card.

To change this and force Windows to let Gephi use the dedicated graphical card :

  • Search for Nvidia Control Panel on your computer and open it.
  • On left side, select 3D Settings -> Manage 3D settings
  • Then select the Program settings tab
  • Click on Add and select Gephi
  • Make sure the option NVIDIA High Performance is selected
  • Click on Apply

image

Then, restart Gephi. It should be now using the dedicated graphical card.

+ + + + \ No newline at end of file diff --git a/User_Manual/vocabulary/index.html b/User_Manual/vocabulary/index.html new file mode 100644 index 0000000..aa775e1 --- /dev/null +++ b/User_Manual/vocabulary/index.html @@ -0,0 +1,30 @@ + + + + + +Vocabulary | Gephi Documentation + + + + +
+
Skip to main content

Vocabulary

AutoUpdate +The application can update itself.

Attribute +Data associated to a node or an edge. Could be text, numbers, booleans and more.

Clustering +Algorithm that group nodes in clusters or communities.

Exporter +Module that exports in a particular file format.

Generator +Algorithm that generates a network.

Graph file +File format that describes a graph structure: list of nodes, list of edges and attributes. Example: GEXF.

Importer +Module that imports a particular file format.

Ranking +Sorting nodes or edges by an attribute's value.

Partition +Visual clustering. Give colors to categories.

Preview +Display the graph exactly as it is exported.

Project +A Gephi session, which contains all workspaces and data.

Tool +Way to interact with the displayed graph.

Vectorial file +Graphical file format that descibes shapes.

Workspace +A whole environment for exploring one graph.

+ + + + \ No newline at end of file diff --git a/assets/css/styles.eb267b25.css b/assets/css/styles.eb267b25.css new file mode 100644 index 0000000..236e481 --- /dev/null +++ b/assets/css/styles.eb267b25.css @@ -0,0 +1 @@ +.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal);color:var(--ifm-code-color)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter);content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.docsWrapper_BCFX,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center .navbar__brand{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-duration:.1s;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#414106;--ifm-color-primary-dark:#646464;--ifm-color-primary-darker:#555;--ifm-color-primary-darkest:#4e4e4e;--ifm-color-primary-light:#949494;--ifm-color-primary-lighter:#acacac;--ifm-color-primary-lightest:#d3d3d3;--ifm-link-color:#708841;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--ifm-code-color:var(--ifm-color-primary-darkest);--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#d2ff48;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--ifm-link-color:#d2ff48;--docusaurus-highlighted-code-line-bg:#0000004d;--ifm-code-color:var(--ifm-color-primary-light)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity .2s ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:.15s;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_OVgt{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL,.docSidebarContainer_b6E3,.sidebarLogo_isFc{display:none}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg);position:sticky}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{height:0;opacity:0;overflow:hidden;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;max-height:100vh;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/gephi-desktop/static/docs/Plugins/Add_a_module_panel/00_800px-add-module-panel.png b/assets/images/00_800px-add-module-panel-002fdb521132a92329f6637753dff9f6.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_module_panel/00_800px-add-module-panel.png rename to assets/images/00_800px-add-module-panel-002fdb521132a92329f6637753dff9f6.png diff --git a/gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/00_800px-data-lab-overview.png b/assets/images/00_800px-data-lab-overview-d19fa2e4451d3ab84e176235f1a30ff3.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/00_800px-data-lab-overview.png rename to assets/images/00_800px-data-lab-overview-d19fa2e4451d3ab84e176235f1a30ff3.png diff --git a/gephi-desktop/static/docs/Plugins/Build_a_plugin_without_Gephi_source_code/00_addnetbeansplatform.png b/assets/images/00_addnetbeansplatform-deb9768ab2304c7b9da58eec1a50752c.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Build_a_plugin_without_Gephi_source_code/00_addnetbeansplatform.png rename to assets/images/00_addnetbeansplatform-deb9768ab2304c7b9da58eec1a50752c.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_submenu/00_addsubmenu-new-action.png b/assets/images/00_addsubmenu-new-action-4e8a64e7070a7454672f484a8807887a.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_submenu/00_addsubmenu-new-action.png rename to assets/images/00_addsubmenu-new-action-4e8a64e7070a7454672f484a8807887a.png diff --git a/gephi-desktop/static/docs/Plugins/Import/00_image.png b/assets/images/00_image-00ee9f547367b62e87cec08fc069ff94.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Import/00_image.png rename to assets/images/00_image-00ee9f547367b62e87cec08fc069ff94.png diff --git a/gephi-desktop/static/docs/Plugins/Export/00_image.png b/assets/images/00_image-190bbf83f8d3044278ec3f70d6848c5a.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Export/00_image.png rename to assets/images/00_image-190bbf83f8d3044278ec3f70d6848c5a.png diff --git a/gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/00_image.png b/assets/images/00_image-534af93e96d2dc4f71cd330c21d4dd0b.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/00_image.png rename to assets/images/00_image-534af93e96d2dc4f71cd330c21d4dd0b.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_CSV_Data/00_launch-import-csv-wizard.png b/assets/images/00_launch-import-csv-wizard-f877ea5368f61ec86eeeab89737ac8b0.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_CSV_Data/00_launch-import-csv-wizard.png rename to assets/images/00_launch-import-csv-wizard-f877ea5368f61ec86eeeab89737ac8b0.png diff --git a/gephi-desktop/static/docs/Plugins/Spigot_importer_with_Wizard/00_spigot_menu.png b/assets/images/00_spigot_menu-43fabe3ba509ac94d1403d9d59d22d3e.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Spigot_importer_with_Wizard/00_spigot_menu.png rename to assets/images/00_spigot_menu-43fabe3ba509ac94d1403d9d59d22d3e.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_module_panel/01_add-module-panel1.png b/assets/images/01_add-module-panel1-fbce06db73726d71c916a95216583fb6.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_module_panel/01_add-module-panel1.png rename to assets/images/01_add-module-panel1-fbce06db73726d71c916a95216583fb6.png diff --git a/gephi-desktop/static/docs/Plugins/Build_a_plugin_without_Gephi_source_code/01_addnetbeansplatformdone.png b/assets/images/01_addnetbeansplatformdone-b0594d8bdc1e585353d7de06e3f696e8.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Build_a_plugin_without_Gephi_source_code/01_addnetbeansplatformdone.png rename to assets/images/01_addnetbeansplatformdone-b0594d8bdc1e585353d7de06e3f696e8.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_submenu/01_addsubmenu-new-action-gui.png b/assets/images/01_addsubmenu-new-action-gui-a852ab4c6e2dda76156a5563bd63f2c2.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_submenu/01_addsubmenu-new-action-gui.png rename to assets/images/01_addsubmenu-new-action-gui-a852ab4c6e2dda76156a5563bd63f2c2.png diff --git a/gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/01_image.png b/assets/images/01_image-59bffee27488927aea528385585e617a.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/01_image.png rename to assets/images/01_image-59bffee27488927aea528385585e617a.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/01_image.png b/assets/images/01_image-efff16c231cfbb0f96dcabeb32f405c9.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/01_image.png rename to assets/images/01_image-efff16c231cfbb0f96dcabeb32f405c9.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_CSV_Data/01_import-csv-step1.png b/assets/images/01_import-csv-step1-0daf87868b350750e1f6bb206ef5acfe.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_CSV_Data/01_import-csv-step1.png rename to assets/images/01_import-csv-step1-0daf87868b350750e1f6bb206ef5acfe.png diff --git a/gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/01_merge-strategies.png b/assets/images/01_merge-strategies-13ad19c21d8c1adac760b4821086d021.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/01_merge-strategies.png rename to assets/images/01_merge-strategies-13ad19c21d8c1adac760b4821086d021.png diff --git a/gephi-desktop/static/docs/Plugins/Spigot_importer_with_Wizard/01_spigot_howto1.png b/assets/images/01_spigot_howto1-d1abe4a5408add177fccd78edd28e723.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Spigot_importer_with_Wizard/01_spigot_howto1.png rename to assets/images/01_spigot_howto1-d1abe4a5408add177fccd78edd28e723.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/02_Build.png b/assets/images/02_Build-5d072826e1e7f557b1efbc4effc9a366.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/02_Build.png rename to assets/images/02_Build-5d072826e1e7f557b1efbc4effc9a366.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_module_panel/02_add-module-panel2.png b/assets/images/02_add-module-panel2-d5e8f55ab031fc1876dc1f358dfa1f8e.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_module_panel/02_add-module-panel2.png rename to assets/images/02_add-module-panel2-d5e8f55ab031fc1876dc1f358dfa1f8e.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_submenu/02_addsubmenu-new-action-name.png b/assets/images/02_addsubmenu-new-action-name-328501d4fca238fec86afb73dd5dbe91.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_submenu/02_addsubmenu-new-action-name.png rename to assets/images/02_addsubmenu-new-action-name-328501d4fca238fec86afb73dd5dbe91.png diff --git a/gephi-desktop/static/docs/Plugins/Build_a_plugin_without_Gephi_source_code/02_gephimoduleend.png b/assets/images/02_gephimoduleend-62ee8dbd6981f43f5c14791f7c228bcc.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Build_a_plugin_without_Gephi_source_code/02_gephimoduleend.png rename to assets/images/02_gephimoduleend-62ee8dbd6981f43f5c14791f7c228bcc.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/02_image.png b/assets/images/02_image-d2fc347511cf5a068e5428b3f347b45b.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/02_image.png rename to assets/images/02_image-d2fc347511cf5a068e5428b3f347b45b.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_CSV_Data/02_import-csv-step2-nodes.png b/assets/images/02_import-csv-step2-nodes-dc1ebe30eb3a6b1ec613b5d6471ab607.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_CSV_Data/02_import-csv-step2-nodes.png rename to assets/images/02_import-csv-step2-nodes-dc1ebe30eb3a6b1ec613b5d6471ab607.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_module_panel/03_add-module-panel3.png b/assets/images/03_add-module-panel3-806d445d35bba1b252cafe56b37b7628.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_module_panel/03_add-module-panel3.png rename to assets/images/03_add-module-panel3-806d445d35bba1b252cafe56b37b7628.png diff --git a/gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/03_image.png b/assets/images/03_image-2acf785041128db2bafd445155fdc34f.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/03_image.png rename to assets/images/03_image-2acf785041128db2bafd445155fdc34f.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/03_image.png b/assets/images/03_image-4b35fd1a55548474db5b243a02b932ed.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/03_image.png rename to assets/images/03_image-4b35fd1a55548474db5b243a02b932ed.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_CSV_Data/03_import-csv-step2-edges.png b/assets/images/03_import-csv-step2-edges-d32b570f94068e0c9d69d6cb5fef0032.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_CSV_Data/03_import-csv-step2-edges.png rename to assets/images/03_import-csv-step2-edges-d32b570f94068e0c9d69d6cb5fef0032.png diff --git a/gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/03_manipulators.png b/assets/images/03_manipulators-3a8a9920c55ae18f8b9e25339408990d.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/03_manipulators.png rename to assets/images/03_manipulators-3a8a9920c55ae18f8b9e25339408990d.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/03_transformlongitudinal-datalab2.png b/assets/images/03_transformlongitudinal-datalab2-edf4f550c9de3f758f608901bf961392.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/03_transformlongitudinal-datalab2.png rename to assets/images/03_transformlongitudinal-datalab2-edf4f550c9de3f758f608901bf961392.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/04_Run.png b/assets/images/04_Run-3899271660669251844fc9db4cc1c085.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/04_Run.png rename to assets/images/04_Run-3899271660669251844fc9db4cc1c085.png diff --git a/gephi-desktop/static/docs/Plugins/Add_a_module_panel/04_add-module-panel-design.png b/assets/images/04_add-module-panel-design-39e4848cb93bd06b362d145988c7ea36.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_module_panel/04_add-module-panel-design.png rename to assets/images/04_add-module-panel-design-39e4848cb93bd06b362d145988c7ea36.png diff --git a/gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/04_image.png b/assets/images/04_image-2e1081b8ab029eed237bf7f32ad49207.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/04_image.png rename to assets/images/04_image-2e1081b8ab029eed237bf7f32ad49207.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/04_image.png b/assets/images/04_image-b55549884bd4e8501a42f4f78c53b7f3.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/04_image.png rename to assets/images/04_image-b55549884bd4e8501a42f4f78c53b7f3.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/04_transformlongitudinal-datalab3.png b/assets/images/04_transformlongitudinal-datalab3-604bc0499cceedcb1f318ef47ba2931e.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/04_transformlongitudinal-datalab3.png rename to assets/images/04_transformlongitudinal-datalab3-604bc0499cceedcb1f318ef47ba2931e.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/05_image.png b/assets/images/05_image-069c28516523c7498f8940d06e9796aa.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/05_image.png rename to assets/images/05_image-069c28516523c7498f8940d06e9796aa.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/05_importtimeframe1.png b/assets/images/05_importtimeframe1-37ba220376a9359934c8ca8d97b99a37.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/05_importtimeframe1.png rename to assets/images/05_importtimeframe1-37ba220376a9359934c8ca8d97b99a37.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/06_importtimeframe2.png b/assets/images/06_importtimeframe2-17e68c40688a1796e04a06e4ce66fbab.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/06_importtimeframe2.png rename to assets/images/06_importtimeframe2-17e68c40688a1796e04a06e4ce66fbab.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/07_image.png b/assets/images/07_image-33280bf416fb7baa5eea795e73c40274.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/07_image.png rename to assets/images/07_image-33280bf416fb7baa5eea795e73c40274.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/07_importtimeframe3.png b/assets/images/07_importtimeframe3-df0071f962cbf53f2590d3dd04cd5926.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/07_importtimeframe3.png rename to assets/images/07_importtimeframe3-df0071f962cbf53f2590d3dd04cd5926.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/08_Build.png b/assets/images/08_Build-d52324a4a065eb0171a086612a91cc23.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/08_Build.png rename to assets/images/08_Build-d52324a4a065eb0171a086612a91cc23.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/08_image.png b/assets/images/08_image-929bfbbb6b20b25c5bc780f179776905.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/08_image.png rename to assets/images/08_image-929bfbbb6b20b25c5bc780f179776905.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/09_Build.png b/assets/images/09_Build-0643eee6daba2e8ca61b12f58dc340f4.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/09_Build.png rename to assets/images/09_Build-0643eee6daba2e8ca61b12f58dc340f4.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/11_image.png b/assets/images/11_image-dfeb3b59241d1922a1e6c6a5ddafd153.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/11_image.png rename to assets/images/11_image-dfeb3b59241d1922a1e6c6a5ddafd153.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/12_Run.png b/assets/images/12_Run-197cf774fb247b33d9a230209110a092.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/12_Run.png rename to assets/images/12_Run-197cf774fb247b33d9a230209110a092.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/12_image.png b/assets/images/12_image-b97cba7df4f0de4edcb7761481f34068.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/12_image.png rename to assets/images/12_image-b97cba7df4f0de4edcb7761481f34068.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/13_image.png b/assets/images/13_image-dea933e084421a11318b8f6d02c6ed32.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/13_image.png rename to assets/images/13_image-dea933e084421a11318b8f6d02c6ed32.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/15_image.png b/assets/images/15_image-01b7c96427865518bb75262bd83e1690.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/15_image.png rename to assets/images/15_image-01b7c96427865518bb75262bd83e1690.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/18_image.png b/assets/images/18_image-c060f3d6fd1de5a224b9de2a953a59db.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/18_image.png rename to assets/images/18_image-c060f3d6fd1de5a224b9de2a953a59db.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/19_image.png b/assets/images/19_image-a4893e8503dca1b7ebf695755f93db0b.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/19_image.png rename to assets/images/19_image-a4893e8503dca1b7ebf695755f93db0b.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/20_image.png b/assets/images/20_image-c99cc7e95b49b13fa0cd6c1935451987.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/20_image.png rename to assets/images/20_image-c99cc7e95b49b13fa0cd6c1935451987.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/21_image.png b/assets/images/21_image-ef3430f74197ecaf39901bb7854ead8c.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/21_image.png rename to assets/images/21_image-ef3430f74197ecaf39901bb7854ead8c.png diff --git a/assets/images/Graphical_Card_Information-107127dead8bc98fb74ae195694f739e.png b/assets/images/Graphical_Card_Information-107127dead8bc98fb74ae195694f739e.png new file mode 100644 index 0000000..89415a7 Binary files /dev/null and b/assets/images/Graphical_Card_Information-107127dead8bc98fb74ae195694f739e.png differ diff --git a/assets/images/Nvidia_3D_Panel-d6f7621fd0f7264afd3d848b70d3e664.png b/assets/images/Nvidia_3D_Panel-d6f7621fd0f7264afd3d848b70d3e664.png new file mode 100644 index 0000000..d7d2466 Binary files /dev/null and b/assets/images/Nvidia_3D_Panel-d6f7621fd0f7264afd3d848b70d3e664.png differ diff --git a/assets/js/028f1327.ce2f5183.js b/assets/js/028f1327.ce2f5183.js new file mode 100644 index 0000000..a16c982 --- /dev/null +++ b/assets/js/028f1327.ce2f5183.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[7210],{6780:e=>{e.exports=JSON.parse('{"label":"Code Style","permalink":"/tags/code-style","allTagsPath":"/tags","count":1,"items":[{"id":"Developer_Documentation/code_style","title":"Code Style","description":"The source code uses the CheckStyle tool to keep the code style consistent.","permalink":"/Developer_Documentation/code_style"}]}')}}]); \ No newline at end of file diff --git a/assets/js/05038888.bc9c1149.js b/assets/js/05038888.bc9c1149.js new file mode 100644 index 0000000..a0226fd --- /dev/null +++ b/assets/js/05038888.bc9c1149.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3040],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=r.createContext({}),l=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=l(e.components);return r.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=l(n),m=i,g=d["".concat(p,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(g,a(a({ref:t},s),{},{components:n})):r.createElement(g,a({ref:t},s))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:i,a[1]=c;for(var l=2;l{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var r=n(7462),i=(n(7294),n(3905));const o={id:"index",title:"Introduction",sidebar_position:1},a=void 0,c={unversionedId:"Plugins/index",id:"Plugins/index",title:"Introduction",description:"This section is designed to help developers write Gephi Plugins.",source:"@site/docs/Plugins/index.md",sourceDirName:"Plugins",slug:"/Plugins/",permalink:"/Plugins/",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"index",title:"Introduction",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Localization",permalink:"/Developer_Documentation/localization"},next:{title:"Plugin Quick Start",permalink:"/Plugins/Plugin_Quick_Start"}},p={},l=[],s={toc:l};function u(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This section is designed to help developers write ",(0,i.kt)("a",{parentName:"p",href:"https://gephi.org/plugins/#/"},"Gephi Plugins"),". "),(0,i.kt)("p",null,"Gephi can be extended in many ways but the major categories are Layout, Export, Import, Data Laboratory, Filter, Generator, Metric, Preview, Tool, Appearance and Clustering. A good way to start is to look at examples with the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi-plugins-bootcamp"},"bootcamp"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/089ea586.33921fcb.js b/assets/js/089ea586.33921fcb.js new file mode 100644 index 0000000..9990a41 --- /dev/null +++ b/assets/js/089ea586.33921fcb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5545],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>c});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),p=u(n),c=i,m=p["".concat(s,".").concat(c)]||p[c]||h[c]||o;return n?a.createElement(m,r(r({ref:t},d),{},{components:n})):a.createElement(m,r({ref:t},d))}));function c(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,r=new Array(o);r[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,r[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var a=n(7462),i=(n(7294),n(3905));const o={id:"code_sharing_strategy",title:"Code Sharing Strategy",sidebar_position:16},r=void 0,l={unversionedId:"Plugins/code_sharing_strategy",id:"Plugins/code_sharing_strategy",title:"Code Sharing Strategy",description:"Code sharing",source:"@site/docs/Plugins/Code_Sharing_Strategy.md",sourceDirName:"Plugins",slug:"/Plugins/code_sharing_strategy",permalink:"/Plugins/code_sharing_strategy",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Code_Sharing_Strategy.md",tags:[],version:"current",sidebarPosition:16,frontMatter:{id:"code_sharing_strategy",title:"Code Sharing Strategy",sidebar_position:16},sidebar:"tutorialSidebar",previous:{title:"Update a plugin",permalink:"/Plugins/update-a-plugin"},next:{title:"GraphStreaming",permalink:"/Plugins/graphstreaming"}},s={},u=[{value:"Code sharing",id:"code-sharing",level:2},{value:"Using libraries",id:"using-libraries",level:3},{value:"Code formatting",id:"code-formatting",level:3},{value:"License",id:"license",level:3},{value:"Javadoc",id:"javadoc",level:3},{value:"Module name convention",id:"module-name-convention",level:3},{value:"Codebase convention",id:"codebase-convention",level:3},{value:"Module branding",id:"module-branding",level:3},{value:"Distributed development",id:"distributed-development",level:2},{value:"Get started",id:"get-started",level:3},{value:"Git at Gephi",id:"git-at-gephi",level:3},{value:"Before commit",id:"before-commit",level:3},{value:"Merging branches",id:"merging-branches",level:3},{value:"Hot fixes",id:"hot-fixes",level:3},{value:"Auto-Update",id:"auto-update",level:3}],d={toc:u};function h(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"code-sharing"},"Code sharing"),(0,i.kt)("p",null,"Some basic rules how we code in Gephi and how we use Netbeans:"),(0,i.kt)("h3",{id:"using-libraries"},"Using libraries"),(0,i.kt)("p",null,"If you use libraries, wrap them into one or several modules. Further information here: ",(0,i.kt)("a",{parentName:"p",href:"http://wiki.netbeans.org/DevFaqWrapperModules"},"http://wiki.netbeans.org/DevFaqWrapperModules")),(0,i.kt)("p",null,"The module codebase should be ",(0,i.kt)("strong",{parentName:"p"},"org.gephi.lib.NAME"),"."),(0,i.kt)("p",null,"Please send email to DEV mailing-list about that change and include it in the ChangeLog, not to forgot to update the ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/developers/license/"},"license page")," on the website."),(0,i.kt)("h3",{id:"code-formatting"},"Code formatting"),(0,i.kt)("p",null,"Always format all the code you submit. Use the Netbeans format feature (right click > Format) with default parameters."),(0,i.kt)("h3",{id:"license"},"License"),(0,i.kt)("p",null,"This is the Gephi offical license. "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},' Copyright 2008-2012 Gephi\n Authors : YOUR NAME \n Website : http://www.gephi.org\n \n This file is part of Gephi.\n \n DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\n \n Copyright 2012 Gephi Consortium. All rights reserved.\n \n The contents of this file are subject to the terms of either the GNU\n General Public License Version 3 only ("GPL") or the Common\n Development and Distribution License("CDDL") (collectively, the\n "License"). You may not use this file except in compliance with the\n License. You can obtain a copy of the License at\n http://gephi.org/about/legal/license-notice/\n or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the\n specific language governing permissions and limitations under the\n License. When distributing the software, include this License Header\n Notice in each file and include the License files at\n /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the\n License Header, with the fields enclosed by brackets [] replaced by\n your own identifying information:\n "Portions Copyrighted [year] [name of copyright owner]"\n \n If you wish your version of this file to be governed by only the CDDL\n or only the GPL Version 3, indicate your decision by adding\n "[Contributor] elects to include this software in this distribution\n under the [CDDL or GPL Version 3] license." If you do not indicate a\n single choice of license, a recipient has the option to distribute\n your version of this file under either the CDDL, the GPL Version 3 or\n to extend the choice of license to its licensees as provided above.\n However, if you add GPL Version 3 code and therefore, elected the GPL\n Version 3 license, then the option applies only if the new code is\n made subject to such option by the copyright holder.\n \n Contributor(s):\n \n Portions Copyrighted 2011 Gephi Consortium.\n')),(0,i.kt)("p",null,"Please put your name on the top of the license at 'YOUR_NAME' and put this license in all files you own."),(0,i.kt)("p",null,"You can directly include license texts in Netbeans using Tools>Templates."),(0,i.kt)("h3",{id:"javadoc"},"Javadoc"),(0,i.kt)("p",null,"All open APIs (public interfaces) should have a complete Javadoc. This is important but commit to it only when you estimate a module is finished.\nIn the mean time, be sure your real name appears completely in all classes you own. This is the minimum thing you should add. As for license, it can be done with Netbeans."),(0,i.kt)("p",null,"It is recommended to read the Javadoc ",(0,i.kt)("a",{parentName:"p",href:"http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html"},"Good practices"),". It gives guidance and rules to make good Javadoc."),(0,i.kt)("h3",{id:"module-name-convention"},"Module name convention"),(0,i.kt)("p",null,"Please respect new modules naming convention:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"No whitespace"),(0,i.kt)("li",{parentName:"ul"},"Add Wrapper in case of a library wrapper")),(0,i.kt)("h3",{id:"codebase-convention"},"Codebase convention"),(0,i.kt)("p",null,"New modules should follow the following codebase rules:"),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"First Header"),(0,i.kt)("th",{parentName:"tr",align:null},"Second Header"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"API"),(0,i.kt)("td",{parentName:"tr",align:null},"org.gephi.NAME.api")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"API Implementation"),(0,i.kt)("td",{parentName:"tr",align:null},"org.gephi.NAME")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"SPI"),(0,i.kt)("td",{parentName:"tr",align:null},"org.gephi.NAME.spi")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"SPI Implementation"),(0,i.kt)("td",{parentName:"tr",align:null},"org.gephi.NAME.plugin")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"SPI Implementation UI"),(0,i.kt)("td",{parentName:"tr",align:null},"org.gephi.ui.NAME.plugin")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Desktop UI"),(0,i.kt)("td",{parentName:"tr",align:null},"org.gephi.desktop.NAME")))),(0,i.kt)("h3",{id:"module-branding"},"Module branding"),(0,i.kt)("p",null,"Branding options for Netbeans modules. Set it from module Properties > Display."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Display name can have whitespace"),(0,i.kt)("li",{parentName:"ul"},"Display Category:",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Gephi Core")," for all ",(0,i.kt)("strong",{parentName:"li"},"API")," and ",(0,i.kt)("strong",{parentName:"li"},"Impl")," modules"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Plugin")," for all ",(0,i.kt)("strong",{parentName:"li"},"Plugin")," and ",(0,i.kt)("strong",{parentName:"li"},"PluginUI")," modules"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Libraries")," for all libs"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Gephi UI")," for all ",(0,i.kt)("strong",{parentName:"li"},"Desktop")," modules")))),(0,i.kt)("p",null,"And don't forget to set the license and author in the Build > Packaging settings."),(0,i.kt)("p",null,"License should be ",(0,i.kt)("strong",{parentName:"p"},"../gpl-3.0.txt")," and Author ",(0,i.kt)("strong",{parentName:"p"},"Gephi.org")),(0,i.kt)("h2",{id:"distributed-development"},"Distributed development"),(0,i.kt)("h3",{id:"get-started"},"Get started"),(0,i.kt)("p",null,"Follow these links to get started with the development environment:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"[","[Developer Handbook]","]"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/gephi/gephi/issues"},"Issues on Github"))),(0,i.kt)("h3",{id:"git-at-gephi"},"Git at Gephi"),(0,i.kt)("p",null,"There is a master branch on the Gephi repository which we call the trunk. This is the main branch where all the daily work happen."),(0,i.kt)("p",null,"When we are releasing a major version we create a release branche (ex: 0.8) from master. These branches shouldn't get new features, only bug fixes. After the version is released, bugs that don't require to break compatibility of make significant changes (add/removed modules etc) should be developed in this branch and released as hot fixes."),(0,i.kt)("p",null,"We like to always have the master branch working and developers should always make sure the code builds before commit. "),(0,i.kt)("h3",{id:"before-commit"},"Before commit"),(0,i.kt)("p",null,"'''Some simple steps to make sure it's done right:'''"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git status")," to see what's going on. "),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git pull upstream BRANCH")," to get latest updates from GitHub."),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git add ...")," on the files you want to commit. If you removed some files run ",(0,i.kt)("code",null,"git rm ..."),". This step is called 'staging' and add stuff to your commit."),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git status")," again. That lists the files you modified and are part of your next commit."),(0,i.kt)("li",{parentName:"ul"},"Make sure you didn't forget any essential file."),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,'git commit -m "message"')," with a message with enough information for a fellow to understand.")),(0,i.kt)("p",null,"If you 'staged' something you didn't ant to stage run ",(0,i.kt)("code",null,"git reset FILES"),". If you want to reset a file changes run ",(0,i.kt)("code",null,"git checkout FILE"),". This will revert any changes you made to that files."),(0,i.kt)("p",null,"'''Some things not to do:'''"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Don't add anything to the .gitignore file unless you've been told to."),(0,i.kt)("li",{parentName:"ul"},"Don't commit changes in modules you are not working on. It happens that Netbeans will override some random xml or properties file. Don't commit those and revert them use 'git checkout'."),(0,i.kt)("li",{parentName:"ul"},"If you encounter a conflict and you're not sure how to fix it, don't try random things. Ask we can help :-)")),(0,i.kt)("p",null,"Command line is fine for Git but you can also use ",(0,i.kt)("a",{parentName:"p",href:"https://code.google.com/p/tortoisegit/"},"TortoiseGit")," on Windows or ","[http://gitx.frim.nl/ GitX]"," if you're on Mac. A Netbeans Git module exists but is still in beta, so you should avoid using it."),(0,i.kt)("h3",{id:"merging-branches"},"Merging branches"),(0,i.kt)("p",null,"The master branch contains the trunk and all work happens there. When all developers work on separate modules it's relatively easy to manage and it's convenient to all work on the same code. However it gets complicated really fast when developers work on APIs, rewrite modules or refactor code. Therefore, for any significant work developers should create feature branches. This is typically the case for Google Summer of Code projects or large code changes. "),(0,i.kt)("p",null,"To create a new branch:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Make sure you're on the master branch by running ",(0,i.kt)("code",null,"git branch")),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git branch NAME")," to create the branch. Run ",(0,i.kt)("code",null,"git branch"),". Your new branch should appear."),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git checkout NAME")," to go to your branch"),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git push origin NAME")," to push it to GitHub")),(0,i.kt)("p",null,"Features branches typically need to merge the master branch time to time to get up to date with core developments. To merge the master branch:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Make sure you're on your feature branch by running ",(0,i.kt)("code",null,"git branch"),". If not, run ",(0,i.kt)("code",null,"git checkout BRANCH")),(0,i.kt)("li",{parentName:"ul"},"Run ",(0,i.kt)("code",null,"git pull upstream master"),". That will pull and merge the master branch.")),(0,i.kt)("p",null,"The merge will fail if some of the files Git want to merge have uncommited changes. IF that happens, commit your changes and in most cases Git will do the merge automatically."),(0,i.kt)("p",null,"The master branch merges hotfixes in release branches when done."),(0,i.kt)("h3",{id:"hot-fixes"},"Hot fixes"),(0,i.kt)("p",null,"Gephi is distributed through a installation package but also online as NBM packages. Thanks to Netbeans Platform, Gephi has the capability to update itself using the NBMs packages we store on our server. We call this the 'Update Center' and it is the same system we use to distribute third party plug-ins. It works like this. There is a XML files with all modules and version on our server and Gephi can read that files and compare online versions with it's local versions. If some modules have been updated the user is asked to update."),(0,i.kt)("p",null,"This capability allows us to deploy hot fixes. When a bug is fixed and the version of the module is incremented the NBM file of the module is created and uploaded to our server. This is process is manual at the moment but it just takes a few minutes. We have done it many times to deliver bug fixes as soon as they are ready without waiting for a release."),(0,i.kt)("p",null,"All bugs for hot fixes should be developed in release branches. For instance, if the latest stable release is 0.8 and we want to fix an issue and release it as hotfix the bug should be fixed in the 0.8 branch. The branch should be then merged to master to make sure the fix is in trunk as well."),(0,i.kt)("h3",{id:"auto-update"},"Auto-Update"),(0,i.kt)("p",null,'Thanks to Netbeans Platform, Gephi has an auto-update feature. Update is done according to the "Specification version" for each module. Therefore, if you made a change that will be deployed through auto-update, increment the ',(0,i.kt)("strong",{parentName:"p"},"Specification Version")," of all modules you touched."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0f8eeba2.98825d49.js b/assets/js/0f8eeba2.98825d49.js new file mode 100644 index 0000000..7df1303 --- /dev/null +++ b/assets/js/0f8eeba2.98825d49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[8126],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>u});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(a),u=r,m=d["".concat(l,".").concat(u)]||d[u]||h[u]||o;return a?n.createElement(m,i(i({ref:t},c),{},{components:a})):n.createElement(m,i({ref:t},c))}));function u(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={id:"graphstreaming",title:"GraphStreaming",sidebar_position:17},i=void 0,s={unversionedId:"Plugins/graphstreaming",id:"Plugins/graphstreaming",title:"GraphStreaming",description:"Description",source:"@site/docs/Plugins/GraphStreaming.md",sourceDirName:"Plugins",slug:"/Plugins/graphstreaming",permalink:"/Plugins/graphstreaming",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/GraphStreaming.md",tags:[],version:"current",sidebarPosition:17,frontMatter:{id:"graphstreaming",title:"GraphStreaming",sidebar_position:17},sidebar:"tutorialSidebar",previous:{title:"Code Sharing Strategy",permalink:"/Plugins/code_sharing_strategy"}},l={},p=[{value:"Description",id:"description",level:2},{value:"Modules",id:"modules",level:2},{value:"Graph Streaming API",id:"graph-streaming-api",level:3},{value:"Server Module",id:"server-module",level:3},{value:"Examples",id:"examples",level:2},{value:"Gephi as Master",id:"gephi-as-master",level:3},{value:"Gephi as Client",id:"gephi-as-client",level:3},{value:"Using a WebSocket Client",id:"using-a-websocket-client",level:3},{value:"Other Examples",id:"other-examples",level:3},{value:"Acknowledgements",id:"acknowledgements",level:2}],c={toc:p};function h(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"description"},"Description"),(0,r.kt)("p",null,"The purpose of the Graph Streaming API is to build a unified framework for streaming graph objects. Gephi\u2019s data structure and visualization engine has been built with the idea that a graph is not static and might change continuously. By connecting Gephi with external data-sources, we leverage its power to visualize and monitor complex systems or enterprise data in real-time. Moreover, the idea of streaming graph data goes beyond Gephi, and a unified and standardized API could bring interoperability with other available tools for graph and network analysis, as they could start to interoperate with other tools in a distributed and cooperative fashion."),(0,r.kt)("p",null,"This plugin is also used to produce real-time analysis and visualization of graphs using Gephi. For more information on how to visualize Twitter data as graph objects using this plugin, see [","[GraphStreaming#Other Examples|Other Examples]","]."),(0,r.kt)("h2",{id:"modules"},"Modules"),(0,r.kt)("p",null,"Gephi Graph Streaming is divided in different modules: The core modules, that defines the Graph Streaming API and its implementation, the Server modules, responsible for the HTTP REST Server, and the interface modules."),(0,r.kt)("h3",{id:"graph-streaming-api"},"Graph Streaming API"),(0,r.kt)("p",null,"The Graph Streaming API is the core of this plugin. High-level modules can use this API in order to connect to external event sources. The API is format-agnostic, and the programmer must use an implemented StreamType for a given format, or implement one for a different format. For current supported formats, see [","[GraphStreaming#Supported formats|Supported formats]","]."),(0,r.kt)("p",null,"You can use the Graph Streaming API to connect from the Toolkit, without a user interface. In order to connect to a stream data source, a component have to:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Get the current Graph instance:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class);\nProject project = projectController.getCurrentProject();\nWorkspace workspace = projectController.getCurrentWorkspace();\n\n// Get the graph instance\nGraphController graphController = Lookup.getDefault().lookup(GraphController.class);\nGraphModel graphModel = graphController.getModel();\nGraph graph = graphModel.getHierarchicalMixedGraph();\n")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},"Get the StreamingController:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"StreamingController controller = Lookup.getDefault().lookup(StreamingController.class);\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Define the endpoint to connect to:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'// Connect to stream using the Streaming API\nStreamingEndpoint endpoint = new StreamingEndpoint();\n// put the url of your master here\nendpoint.setUrl(new URL("http://localhost:8080/workspace0"));\n// endpoint.setStreamType() accepts a StreamType instance, so you\n// have to get it using the controller\nStreamType type = controller.getStreamType("JSON");\nendpoint.setStreamType(type);\n')),(0,r.kt)("ol",{start:4},(0,r.kt)("li",{parentName:"ol"},"Connect to it and process:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"StreamingConnection connection = controller.connect(endpoint, graph);\nconnection.asynchProcess(); // or connection.process() for synchronous processing\n")),(0,r.kt)("p",null,"The client will connect to the endpoint, process the events and update the graph accordingly. Note that the method connection.process() returns only when the stream finishes. If you want to asynchronously process the stream, you will want to call connection.asynchProcess(). But if you start the asynchronous processing of the stream, you lose control of when the stream finishes. In order to know when the stream finishes, you can control the StreamingConnection object to know when the connection was closed. If you want to know asynchronously when the connection was closed, without controlling the connection object, you can inform a listener to receive the event:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},' StreamingConnection connection = controller.connect(endpoint, graph);\n connection.addStatusListener(new StatusListener() {\n public void onConnectionClosed(StreamingConnection connection) {\n System.out.println("Connection was closed!");\n }\n });\n connection.asynchProcess();\n')),(0,r.kt)("p",null,"If you want to customize the behavior of event processing, doing something else than updating the graph, you can work with more low-level objects like StreamReaders. You can implement you own GraphEventHandler and pass it directly to the StreamReader implementation. For example, to count the received events you could do this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'final AtomicInteger counter = new AtomicInteger();\n\nGraphEventHandler eventHandler = new GraphEventHandler() {\n public void handleGraphEvent(GraphEvent event) {\n counter.incrementAndGet();\n }\n};\n\nURL url = new URL("http://streamingserver/streamingcontext");\nurl.openConnection();\nInputStream inputStream = url.openStream();\n\nGraphEventBuilder eventBuilder = new GraphEventBuilder(endpoint.getUrl());\n\nStreamReaderFactory readerFactory = Lookup.getDefault().lookup(StreamReaderFactory.class);\nStreamReader reader = readerFactory.createStreamReader("JSON", eventHandler, eventBuilder);\nstreamReader.processStream(inputStream);\n')),(0,r.kt)("p",null,"The graph events will be sent to the GraphEventHandler as they arrive in the inputStream. The reported problems/exceptions during the streaming process are reported in the object Report:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"Report report = connection.getReport();\n")),(0,r.kt)("p",null,"You can also write the events in a given format using the StreamWriter:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'ByteArrayOutputStream out = new ByteArrayOutputStream();\nStreamWriterFactory factory = Lookup.getDefault().lookup(StreamWriterFactory.class);\nStreamWriter streamWriter = factory.createStreamWriter("JSON", out);\n')),(0,r.kt)("p",null,"Now you can use it as a GraphEventHandler instance (StreamWriter implements the GraphEventHandler interface), and you can write the events to the output using the given format:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'StreamReaderFactory factory = Lookup.getDefault().lookup(StreamReaderFactory.class);\nStreamReader reader = readerFactory.createStreamReader("JSON", streamWriter, eventBuilder);\nstreamReader.processStream(inputStream);\n')),(0,r.kt)("h3",{id:"server-module"},"Server Module"),(0,r.kt)("p",null,"The Server Module is implemented using Servlet standards. The servlets are run by an embedded ","[http://jetty.codehaus.org/jetty/ Jetty]"," instance."),(0,r.kt)("p",null,"You can start a master programmatically using the API:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'StreamingServer server = Lookup.getDefault().lookup(StreamingServer.class);\nServerControllerFactory controllerFactory = Lookup.getDefault().lookup(ServerControllerFactory.class);\nServerController serverController = controllerFactory.createServerController(graph);\nString context = "/mycontext";\nserver.register(serverController, context);\n')),(0,r.kt)("p",null,"Using this code, the Gephi master will be accessible in the following url: ","[http://your_ip_here:8080/mycontext http://your_ip_here:8080/mycontext]"),(0,r.kt)("p",null,"=== Plugin interface ===\nThe modules responsible for the plugin interface use the core Graph Streaming API to connect to external streams, and the classes in the Server Module to start/stop the internal HTTP server."),(0,r.kt)("p",null,"== Supported formats ==\nThe main Streaming API format supported by Gephi is JSON. For web-based systems, JSON is strongly encouraged over XML, as JSON is more compact and parsing is greatly simplified by the delimited parameter: every object is returned on its own line, and ends with a carriage return. In a streaming situation, it is more practical, as it is possible to parse the data as it arrives, without waiting for a closing tag or for the end of the stream."),(0,r.kt)("p",null,"The current implementation of JSON Streaming Format is very simple and '''still subject to changes'''. It is composed of 6 types of events, divided in 2 types of elements (nodes and edges) and 3 types of operations (add, change, delete):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"an: Add node"),(0,r.kt)("li",{parentName:"ul"},"cn: Change node"),(0,r.kt)("li",{parentName:"ul"},"dn: Delete node"),(0,r.kt)("li",{parentName:"ul"},"ae: Add edge>"),(0,r.kt)("li",{parentName:"ul"},"ce: Change edge"),(0,r.kt)("li",{parentName:"ul"},'de: Delete edge\nEach event is composed by its event type and a list of objects of type node or edge, depending on the event type. Node and edge objects are similar, and composed of an identifier and a list of attributes. The "add edge" is the only operation in which there is three mandatory attributes: source, target and directed. Source and target are node identifiers, and directed is a boolean representing if the edge is directed or not.')),(0,r.kt)("p",null,"The events are currently represented in the JSON format as follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"{ :{ :{ : , : }}} \n")),(0,r.kt)("p",null,"Following, we show a list of events with some examples for each type of event, represented in the current JSON format implementation:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},'{"an":{"A":{"label":"Streaming Node A","size":2}}} // add node A\n{"an":{"B":{"label":"Streaming Node B","size":1}}} // add node B\n{"an":{"C":{"label":"Streaming Node C","size":1}}} // add node C\n{"ae":{"AB":{"source":"A","target":"B","directed":false,"weight":2}}} // add edge A->B\n{"ae":{"BC":{"source":"B","target":"C","directed":false,"weight":1}}} // add edge B->C\n{"ae":{"CA":{"source":"C","target":"A","directed":false,"weight":2}}} // add edge C->A\n{"cn":{"C":{"size":2}}} // changes the size attribute to 2\n{"cn":{"B":{"label":null}}} // removes the label attribute\n{"ce":{"AB":{"label":"From A to B"}}} // add the label attribute\n{"de":{"BC":{}}} // delete edge BC\n{"de":{"CA":{}}} // delete edge CA\n{"dn":{"C":{}}} // delete node C\n')),(0,r.kt)("p",null,"With this format it is possible to put more than one object in each event, as in the following example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},'{ "an" : { "A" : { "label" : "Streaming Node A" , "size" : 2 } , "B" : { "label" : "Streaming Node B" , "size" : 1 } , "C" : { "label" : "Streaming Node C" , "size" : 1 } } } \n')),(0,r.kt)("p",null,"But we recommend to send only one object in each event, as it is more suitable for a streaming approach: the data should be read as soon as possible by the client, and the approach using multiple objects by event slows the client reading, because it can't parse the JSON event object until a '\\r' appears."),(0,r.kt)("p",null,"'''We recall that this format is subject to changes, as more requirements are being added to the Graph Streaming API.'''"),(0,r.kt)("p",null,"'''Format changing considerations currently in progress'''"),(0,r.kt)("p",null,"There are some considerations in progress in order to adapt the JSON format to some requirements."),(0,r.kt)("p",null,"The first one is to add support to '''filters'''. Filters are very important when changing groups of objects with the same characteristic. For example, if you want to change the color of all nodes with size=x, you could use a filter event. It would cost much less than sending one event for each node."),(0,r.kt)("p",null,"Another requirement is to support '''identifiers to events'''. In some cases, it would be interesting to assign an identifier to the event. For example, in a distributed environment, the events are produced by event producers, but you cannot be sure that the event consumers receive the events in the same order. As a way to solve this problem, each event producer could assign a timestamp to the event, as a way to ensure that each event consumer produce the same results."),(0,r.kt)("p",null,'Event identifiers will be assigned to events using a special "id" attribute, at the same level of the event type:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},'{ "id" : "1278944510" , "an" : { "A" : { "label" : "Streaming Node A" , "size" : 2 } } } \n')),(0,r.kt)("p",null,'This way, the event identifier will be parsed only if the "id" attribute is present in the event object. Someone that does not want to use identifiers should only ignore the "id" attribute: no overhead is added to the format, it remains compatible with "old style" events, and the format remains concise.'),(0,r.kt)("p",null,"== Source code ==\nThe Gephi Graph Streaming is a Gephi Plugin supported by the core team, and the source code is available as a branch of the ","[https://github.com/gephi/gephi-plugins gephi-plugins repository]",". In order to build the latest version, follow these steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Download and install the latest version of ","[http://netbeans.org/ Netbeans IDE]","."),(0,r.kt)("li",{parentName:"ul"},"Fork and checkout the latest version of the gephi-plugins repository:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone git@github.com:username/gephi-plugins.git\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Checkout the graph-streaming branch:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git checkout -t origin/graph-streaming\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Start Netbeans and Open Project. This folder is automatically recognized as a module suite."),(0,r.kt)("li",{parentName:"ul"},"Right click on the project and select 'Run'. This starts Gephi with the Graph Streaming plugin.")),(0,r.kt)("h2",{id:"examples"},"Examples"),(0,r.kt)("p",null,"The Graph Streaming specification allow clients to interact with a master getting data and pushing data to it, in a REST architecture. The same data format used by the master to send graph events to the clients is used by clients to interact with the master."),(0,r.kt)("h3",{id:"gephi-as-master"},"Gephi as Master"),(0,r.kt)("p",null,"In the first example, we will start Gephi as a master to provide graph information to its clients. At the Streaming Tab in the Gephi application, you can access all the features of graph streaming. You can start the Gephi Master by executing the following steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Run the Gephi application"),(0,r.kt)("li",{parentName:"ul"},"Create an empty workspace (File/New Project)"),(0,r.kt)("li",{parentName:"ul"},"Add some nodes and edges to your graph"),(0,r.kt)("li",{parentName:"ul"},"Go to the tab Streaming and right-click on the \u201cMaster Server\u201d and select \u201cStart\u201d\nBy default, the HTTP server will listen at port 8080 in plain HTTP, and at port 8443 using SSL. The server path depends on your workspace: each workspace uses a different path. You can configure these parameters (and also Basic Authentication) at the \u201cSettings\u2026\u201d button.")),(0,r.kt)("p",null,"By following these steps, an HTTP server is started, and it exposes a REST interface to access the workspace data by submitting events in the graph streaming format."),(0,r.kt)("p",null,"Now, you can connect to Gephi using any HTTP client. For example, you can use ","[http://curl.haxx.se/ curl]"," to see the data flowing. First of all, open a shell prompt and execute the following command to get the complete graph, using the operation getGraph or no operation at all (getGraph is the default operation):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'curl "http://localhost:8080/workspace0?operation=getGraph"\n')),(0,r.kt)("p",null,"This operation connects to Gephi in streaming mode. You first receive the graph objects that are already in the graph. Every new object added to the graph is sent to the streaming client. For example, add some nodes to the graph in your workspace, and you will see the events appearing in the command line client."),(0,r.kt)("p",null,"Other operations are used to retrieve node and edge data:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'curl "http://localhost:8080/workspace0?operation=getNode&id=A"\ncurl "http://localhost:8080/workspace0?operation=getEdge&id=AB"\n')),(0,r.kt)("p",null,"You can use the updateGraph operation to submit new events to your graph. For example, open another shell prompt and execute the following lines, one after the other:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'curl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\\"an\\":{\\"A\\":{\\"label\\":\\"Streaming Node A\\"}}}"\ncurl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\\"an\\":{\\"B\\":{\\"label\\":\\"Streaming Node B\\"}}}"\ncurl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\\"an\\":{\\"C\\":{\\"label\\":\\"Streaming Node C\\"}}}"\ncurl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\\"ae\\":{\\"AB\\":{\\"source\\":\\"A\\",\\"target\\":\\"B\\",\\"directed\\":false}}}"\ncurl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\\"ae\\":{\\"BC\\":{\\"source\\":\\"B\\",\\"target\\":\\"C\\",\\"directed\\":false}}}"\ncurl "http://localhost:8080/workspace0?operation=updateGraph" -d "{\\"ae\\":{\\"CA\\":{\\"source\\":\\"C\\",\\"target\\":\\"A\\",\\"directed\\":false}}}"\n')),(0,r.kt)("p",null,"You should see the nodes and edges appearing in the workspace, until they form a triangle. At the same time, the events are sent to any client connected to the Master. You can send more events to the workspace using the same command line, just change the node and edge identifiers."),(0,r.kt)("p",null,"The same events can be sent by just one HTTP request:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'curl "http://localhost:8080/workspace0?operation=updateGraph" -d $\'{"an":{"A":{"label":"Streaming Node A"}}}\\r\n{"an":{"B":{"label":"Streaming Node B"}}}\\r\n{"an":{"C":{"label":"Streaming Node C"}}}\\r\n{"ae":{"AB":{"source":"A","target":"B","directed":false}}}\\r\n{"ae":{"BC":{"source":"B","target":"C","directed":false}}}\\r\n{"ae":{"CA":{"source":"C","target":"A","directed":false}}}\'\n')),(0,r.kt)("p",null,"You are not limited to a single master by host: each Gephi workspace can be available as a master."),(0,r.kt)("h3",{id:"gephi-as-client"},"Gephi as Client"),(0,r.kt)("p",null,"To illustrate how to connect to a master, ","[http://www.youtube.com/watch?v=7SW_FDiY0sg this video]"," shows Gephi connecting to a master and visualizing the received graph data in real time. The graph in this demo is a part of the Amazon.com library, where the nodes represent books and the edges represent their similarities. For each book, a node is added, the similar books are explored, adding the similar ones as nodes and the similarity as an edge."),(0,r.kt)("h3",{id:"using-a-websocket-client"},"Using a WebSocket Client"),(0,r.kt)("p",null,"'''This feature will be available in a near future.'''"),(0,r.kt)("h3",{id:"other-examples"},"Other Examples"),(0,r.kt)("p",null,"Some other examples are available by using a Python client. Source code and instructions are available in the ","[https://github.com/panisson/pygephi_graphstreaming pygephi_graphstreaming repository]",". This repository also contains the source code of the Python server used to collect data from Twitter and create the video about the ","[https://gephi.org/2011/the-egyptian-revolution-on-twitter/ Egyptian Revolution on Twitter]","."),(0,r.kt)("h2",{id:"acknowledgements"},"Acknowledgements"),(0,r.kt)("p",null,"This plugin was implemented by ","[http://gephi.org/about/people/ Andr","\xe9"," Panisson]","."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/129a2cfd.d644b46f.js b/assets/js/129a2cfd.d644b46f.js new file mode 100644 index 0000000..66aceb2 --- /dev/null +++ b/assets/js/129a2cfd.d644b46f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5120],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},p=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,s=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),p=u(n),m=r,b=p["".concat(s,".").concat(m)]||p[m]||c[m]||l;return n?a.createElement(b,o(o({ref:t},d),{},{components:n})):a.createElement(b,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:r,o[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>i,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const l={id:"Add_a_submenu",title:"Add a submenu",sidebar_position:13},o=void 0,i={unversionedId:"Plugins/Add_a_submenu",id:"Plugins/Add_a_submenu",title:"Add a submenu",description:"From a plugin it is easy to add a menu in the menubar, for instance in Plugins. If you wanna add your action in a already existing menu, like Generate, don't follow this HowTo but look more how to create a new Generator, as the submenus may be created dynamically.",source:"@site/docs/Plugins/Add_a_submenu.md",sourceDirName:"Plugins",slug:"/Plugins/Add_a_submenu",permalink:"/Plugins/Add_a_submenu",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Add_a_submenu.md",tags:[],version:"current",sidebarPosition:13,frontMatter:{id:"Add_a_submenu",title:"Add a submenu",sidebar_position:13},sidebar:"tutorialSidebar",previous:{title:"Add a module panel",permalink:"/Plugins/Add_a_module_panel"},next:{title:"Build a plugin without Gephi source code",permalink:"/Plugins/Build_a_plugin_without_Gephi_source_code"}},s={},u=[{value:"Create Action and Menu",id:"create-action-and-menu",level:2},{value:"Fill Action",id:"fill-action",level:2}],d={toc:u};function c(e){let{components:t,...l}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"From a plugin it is easy to add a menu in the menubar, for instance in ",(0,r.kt)("strong",{parentName:"p"},"Plugins"),". If you wanna add your action in a already existing menu, like ",(0,r.kt)("strong",{parentName:"p"},"Generate"),", don't follow this HowTo but look more how to create a new Generator, as the submenus may be created dynamically. "),(0,r.kt)("h2",{id:"create-action-and-menu"},"Create Action and Menu"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 1"),": Right click on your module and select ",(0,r.kt)("strong",{parentName:"li"},"New > Other...")," and find ",(0,r.kt)("strong",{parentName:"li"},"Action")," like showed in the step 1 below. The action wizard will create everything necessary to register your action in the system and create the submenu.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"addsubmenu-new-action",src:n(6525).Z,width:"738",height:"504"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 2"),": Then click on ",(0,r.kt)("strong",{parentName:"li"},"Next"),", be sure ",(0,r.kt)("strong",{parentName:"li"},"Always Enabled")," is checked and ",(0,r.kt)("strong",{parentName:"li"},"Next")," again."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 3"),": In the ",(0,r.kt)("strong",{parentName:"li"},"Menu")," option, select where you want your submenu to be put. Select ",(0,r.kt)("strong",{parentName:"li"},"Plugins")," to be put in this menu.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"addsubmenu-new-action-gui",src:n(2994).Z,width:"750",height:"522"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 4"),": Click on ",(0,r.kt)("strong",{parentName:"li"},"Next")," and fill the class name, as well as the display name.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"addsubmenu-new-action-name",src:n(7082).Z,width:"750",height:"520"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 5"),": Finally, click on ",(0,r.kt)("strong",{parentName:"li"},"Next")," to create the file.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"addsubmenu-new-action-result",src:n(5791).Z,width:"223",height:"181"})),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Result")),(0,r.kt)("h2",{id:"fill-action"},"Fill Action"),(0,r.kt)("p",null,"The precedent step created the ",(0,r.kt)("strong",{parentName:"p"},"MyAction.java")," file in your module. Implement something in the action to be executed when users click on the menu. In the example below an empty dialog is showed, using ",(0,r.kt)("strong",{parentName:"p"},"Dialogs API"),". Include ",(0,r.kt)("strong",{parentName:"p"},"Dialogs API")," as a dependency of your module if you want to use it."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public final class MyAction implements ActionListener {\n \n public void actionPerformed(ActionEvent e) {\n //Do something - for instance display a dialog\n DialogDescriptor dd = new DialogDescriptor(new JPanel(), "My Dialog", false, null);\n DialogDisplayer.getDefault().notify(dd);\n }\n}\n')))}c.isMDXComponent=!0},6525:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/00_addsubmenu-new-action-4e8a64e7070a7454672f484a8807887a.png"},2994:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/01_addsubmenu-new-action-gui-a852ab4c6e2dda76156a5563bd63f2c2.png"},7082:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/02_addsubmenu-new-action-name-328501d4fca238fec86afb73dd5dbe91.png"},5791:(e,t,n)=>{n.d(t,{Z:()=>a});const a="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/17896441.55977ba0.js b/assets/js/17896441.55977ba0.js new file mode 100644 index 0000000..e2c2658 --- /dev/null +++ b/assets/js/17896441.55977ba0.js @@ -0,0 +1 @@ +(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[7918],{3905:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>m,kt:()=>p});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),i=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},m=function(e){var t=i(e.components);return a.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,m=c(e,["components","mdxType","originalType","parentName"]),u=i(n),p=r,f=u["".concat(s,".").concat(p)]||u[p]||d[p]||o;return n?a.createElement(f,l(l({ref:t},m),{},{components:n})):a.createElement(f,l({ref:t},m))}));function p(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=u;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:r,l[1]=c;for(var i=2;i{"use strict";n.r(t),n.d(t,{default:()=>Ht});var a=n(7294),r=n(1944),o=n(902);const l=a.createContext(null);function c(e){let{children:t,content:n}=e;const r=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(l.Provider,{value:r},t)}function s(){const e=(0,a.useContext)(l);if(null===e)throw new o.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=s();return a.createElement(r.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var m=n(6010),d=n(7524),u=n(7462),p=n(5999),f=n(9960);function h(e){const{permalink:t,title:n,subLabel:r,isNext:o}=e;return a.createElement(f.Z,{className:(0,m.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},r&&a.createElement("div",{className:"pagination-nav__sublabel"},r),a.createElement("div",{className:"pagination-nav__label"},n))}function g(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,p.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&a.createElement(h,(0,u.Z)({},t,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(h,(0,u.Z)({},n,{subLabel:a.createElement(p.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function v(){const{metadata:e}=s();return a.createElement(g,{previous:e.previous,next:e.next})}var b=n(2263),E=n(143),y=n(5281),k=n(373),N=n(4477);const L={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(p.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(p.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function C(e){const t=L[e.versionMetadata.banner];return a.createElement(t,e)}function _(e){let{versionLabel:t,to:n,onClick:r}=e;return a.createElement(p.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(f.Z,{to:n,onClick:r},a.createElement(p.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function T(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:r}}=(0,b.Z)(),{pluginId:o}=(0,E.gA)({failfast:!0}),{savePreferredVersionName:l}=(0,k.J)(o),{latestDocSuggestion:c,latestVersionSuggestion:s}=(0,E.Jo)(o),i=c??(d=s).docs.find((e=>e.id===d.mainDocId));var d;return a.createElement("div",{className:(0,m.Z)(t,y.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(C,{siteTitle:r,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(_,{versionLabel:s.label,to:i.path,onClick:()=>l(s.name)})))}function Z(e){let{className:t}=e;const n=(0,N.E)();return n.banner?a.createElement(T,{className:t,versionMetadata:n}):null}function w(e){let{className:t}=e;const n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,m.Z)(t,y.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(p.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function x(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function B(e){let{lastUpdatedBy:t}=e;return a.createElement(p.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function O(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:r}=e;return a.createElement("span",{className:y.k.common.lastUpdated},a.createElement(p.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(x,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:r?a.createElement(B,{lastUpdatedBy:r}):""}},"Last updated{atDate}{byUser}"),!1)}const A="iconEdit_Z9Sw";function H(e){let{className:t,...n}=e;return a.createElement("svg",(0,u.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,m.Z)(A,t),"aria-hidden":"true"},n),a.createElement("g",null,a.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function j(e){let{editUrl:t}=e;return a.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:y.k.common.editThisPage},a.createElement(H,null),a.createElement(p.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}var S=n(3008);const M="tags_jXut",I="tag_QGVx";function P(e){let{tags:t}=e;return a.createElement(a.Fragment,null,a.createElement("b",null,a.createElement(p.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),a.createElement("ul",{className:(0,m.Z)(M,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return a.createElement("li",{key:n,className:I},a.createElement(S.Z,{label:t,permalink:n}))}))))}const U="lastUpdated_vwxv";function z(e){return a.createElement("div",{className:(0,m.Z)(y.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(P,e)))}function V(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:r,formattedLastUpdatedAt:o}=e;return a.createElement("div",{className:(0,m.Z)(y.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(j,{editUrl:t})),a.createElement("div",{className:(0,m.Z)("col",U)},(n||r)&&a.createElement(O,{lastUpdatedAt:n,formattedLastUpdatedAt:o,lastUpdatedBy:r})))}function D(){const{metadata:e}=s(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:r,lastUpdatedBy:o,tags:l}=e,c=l.length>0,i=!!(t||n||o);return c||i?a.createElement("footer",{className:(0,m.Z)(y.k.docs.docFooter,"docusaurus-mt-lg")},c&&a.createElement(z,{tags:l}),i&&a.createElement(V,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:r})):null}var R=n(6043),$=n(6668);function W(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...r}=e;n>=0?t[n].children.push(r):a.push(r)})),a}function F(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=F({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function q(e){const t=e.getBoundingClientRect();return t.top===t.bottom?q(e.parentNode):t}function G(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>q(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function Q(e){const t=(0,a.useRef)(void 0),n=J();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:r,minHeadingLevel:o,maxHeadingLevel:l}=e;function c(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),c=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let r=t;r<=n;r+=1)a.push(`h${r}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:l}),s=G(c,{anchorTopOffset:n.current}),i=e.find((e=>s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(r),e.classList.add(r),t.current=e):e.classList.remove(r)}(e,e===i)}))}return document.addEventListener("scroll",c),document.addEventListener("resize",c),c(),()=>{document.removeEventListener("scroll",c),document.removeEventListener("resize",c)}}),[e,n])}function X(e){let{toc:t,className:n,linkClassName:r,isChild:o}=e;return t.length?a.createElement("ul",{className:o?void 0:n},t.map((e=>a.createElement("li",{key:e.id},a.createElement("a",{href:`#${e.id}`,className:r??void 0,dangerouslySetInnerHTML:{__html:e.value}}),a.createElement(X,{isChild:!0,toc:e.children,className:n,linkClassName:r}))))):null}const Y=a.memo(X);function K(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:r="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:l,maxHeadingLevel:c,...s}=e;const i=(0,$.L)(),m=l??i.tableOfContents.minHeadingLevel,d=c??i.tableOfContents.maxHeadingLevel,p=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,a.useMemo)((()=>F({toc:W(t),minHeadingLevel:n,maxHeadingLevel:r})),[t,n,r])}({toc:t,minHeadingLevel:m,maxHeadingLevel:d});return Q((0,a.useMemo)((()=>{if(r&&o)return{linkClassName:r,linkActiveClassName:o,minHeadingLevel:m,maxHeadingLevel:d}}),[r,o,m,d])),a.createElement(Y,(0,u.Z)({toc:p,className:n,linkClassName:r},s))}const ee="tocCollapsibleButton_TO0P",te="tocCollapsibleButtonExpanded_MG3E";function ne(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,m.Z)("clean-btn",ee,!t&&te,n.className)}),a.createElement(p.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const ae="tocCollapsible_ETCw",re="tocCollapsibleContent_vkbj",oe="tocCollapsibleExpanded_sAul";function le(e){let{toc:t,className:n,minHeadingLevel:r,maxHeadingLevel:o}=e;const{collapsed:l,toggleCollapsed:c}=(0,R.u)({initialState:!0});return a.createElement("div",{className:(0,m.Z)(ae,!l&&oe,n)},a.createElement(ne,{collapsed:l,onClick:c}),a.createElement(R.z,{lazy:!0,className:re,collapsed:l},a.createElement(K,{toc:t,minHeadingLevel:r,maxHeadingLevel:o})))}const ce="tocMobile_ITEo";function se(){const{toc:e,frontMatter:t}=s();return a.createElement(le,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,m.Z)(y.k.docs.docTocMobile,ce)})}const ie="tableOfContents_bqdL";function me(e){let{className:t,...n}=e;return a.createElement("div",{className:(0,m.Z)(ie,"thin-scrollbar",t)},a.createElement(K,(0,u.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}function de(){const{toc:e,frontMatter:t}=s();return a.createElement(me,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:y.k.docs.docTocDesktop})}const ue="anchorWithStickyNavbar_LWe7",pe="anchorWithHideOnScrollNavbar_WYt5";function fe(e){let{as:t,id:n,...r}=e;const{navbar:{hideOnScroll:o}}=(0,$.L)();return"h1"!==t&&n?a.createElement(t,(0,u.Z)({},r,{className:(0,m.Z)("anchor",o?pe:ue),id:n}),r.children,a.createElement("a",{className:"hash-link",href:`#${n}`,title:(0,p.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):a.createElement(t,(0,u.Z)({},r,{id:void 0}))}var he=n(3905),ge=n(5742);var ve=n(2389),be=n(2949);function Ee(){const{prism:e}=(0,$.L)(),{colorMode:t}=(0,be.I)(),n=e.theme,a=e.darkTheme||n;return"dark"===t?a:n}var ye=n(7594),ke=n.n(ye);const Ne=/title=(?["'])(?.*?)\1/,Le=/\{(?<range>[\d,-]+)\}/,Ce={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function _e(e,t){const n=e.map((e=>{const{start:n,end:a}=Ce[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")})\\s*${a})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Te(e,t){let n=e.replace(/\n$/,"");const{language:a,magicComments:r,metastring:o}=t;if(o&&Le.test(o)){const e=o.match(Le).groups.range;if(0===r.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=r[0].className,a=ke()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(a),code:n}}if(void 0===a)return{lineClassNames:{},code:n};const l=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return _e(["js","jsBlock"],t);case"jsx":case"tsx":return _e(["js","jsBlock","jsx"],t);case"html":return _e(["js","jsBlock","html"],t);case"python":case"py":case"bash":return _e(["bash"],t);case"markdown":case"md":return _e(["html","jsx","bash"],t);default:return _e(Object.keys(Ce),t)}}(a,r),c=n.split("\n"),s=Object.fromEntries(r.map((e=>[e.className,{start:0,range:""}]))),i=Object.fromEntries(r.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),m=Object.fromEntries(r.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),d=Object.fromEntries(r.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let p=0;p<c.length;){const e=c[p].match(l);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));i[t]?s[i[t]].range+=`${p},`:m[t]?s[m[t]].start=p:d[t]&&(s[d[t]].range+=`${s[d[t]].start}-${p-1},`),c.splice(p,1)}n=c.join("\n");const u={};return Object.entries(s).forEach((e=>{let[t,{range:n}]=e;ke()(n).forEach((e=>{u[e]??=[],u[e].push(t)}))})),{lineClassNames:u,code:n}}const Ze="codeBlockContainer_Ckt0";function we(e){let{as:t,...n}=e;const r=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[a,r]=e;const o=t[a];o&&"string"==typeof r&&(n[o]=r)})),n}(Ee());return a.createElement(t,(0,u.Z)({},n,{style:r,className:(0,m.Z)(n.className,Ze,y.k.common.codeBlock)}))}const xe={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function Be(e){let{children:t,className:n}=e;return a.createElement(we,{as:"pre",tabIndex:0,className:(0,m.Z)(xe.codeBlockStandalone,"thin-scrollbar",n)},a.createElement("code",{className:xe.codeBlockLines},t))}const Oe={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Ae(e,t){const[n,r]=(0,a.useState)(),l=(0,a.useCallback)((()=>{var t;r(null==(t=e.current)?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,a.useEffect)((()=>{l()}),[l]),function(e,t,n){void 0===n&&(n=Oe);const r=(0,o.zX)(t),l=(0,o.Ql)(n);(0,a.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,l),()=>t.disconnect()}),[e,r,l])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),l())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const He={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var je={Prism:n(7410).Z,theme:He};function Se(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Me(){return Me=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Me.apply(this,arguments)}var Ie=/\r\n|\r|\n/,Pe=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Ue=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},ze=function(e,t){var n=e.plain,a=Object.create(null),r=e.styles.reduce((function(e,n){var a=n.languages,r=n.style;return a&&!a.includes(t)||n.types.forEach((function(t){var n=Me({},e[t],r);e[t]=n})),e}),a);return r.root=n,r.plain=Me({},n,{backgroundColor:null}),r};function Ve(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}const De=function(e){function t(){for(var t=this,n=[],a=arguments.length;a--;)n[a]=arguments[a];e.apply(this,n),Se(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?ze(e.theme,e.language):void 0;return t.themeDict=n})),Se(this,"getLineProps",(function(e){var n=e.key,a=e.className,r=e.style,o=Me({},Ve(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),l=t.getThemeDict(t.props);return void 0!==l&&(o.style=l.plain),void 0!==r&&(o.style=void 0!==o.style?Me({},o.style,r):r),void 0!==n&&(o.key=n),a&&(o.className+=" "+a),o})),Se(this,"getStyleForToken",(function(e){var n=e.types,a=e.empty,r=n.length,o=t.getThemeDict(t.props);if(void 0!==o){if(1===r&&"plain"===n[0])return a?{display:"inline-block"}:void 0;if(1===r&&!a)return o[n[0]];var l=a?{display:"inline-block"}:{},c=n.map((function(e){return o[e]}));return Object.assign.apply(Object,[l].concat(c))}})),Se(this,"getTokenProps",(function(e){var n=e.key,a=e.className,r=e.style,o=e.token,l=Me({},Ve(e,["key","className","style","token"]),{className:"token "+o.types.join(" "),children:o.content,style:t.getStyleForToken(o),key:void 0});return void 0!==r&&(l.style=void 0!==l.style?Me({},l.style,r):r),void 0!==n&&(l.key=n),a&&(l.className+=" "+a),l})),Se(this,"tokenize",(function(e,t,n,a){var r={code:t,grammar:n,language:a,tokens:[]};e.hooks.run("before-tokenize",r);var o=r.tokens=e.tokenize(r.code,r.grammar,r.language);return e.hooks.run("after-tokenize",r),o}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,a=e.code,r=e.children,o=this.getThemeDict(this.props),l=t.languages[n];return r({tokens:function(e){for(var t=[[]],n=[e],a=[0],r=[e.length],o=0,l=0,c=[],s=[c];l>-1;){for(;(o=a[l]++)<r[l];){var i=void 0,m=t[l],d=n[l][o];if("string"==typeof d?(m=l>0?m:["plain"],i=d):(m=Ue(m,d.type),d.alias&&(m=Ue(m,d.alias)),i=d.content),"string"==typeof i){var u=i.split(Ie),p=u.length;c.push({types:m,content:u[0]});for(var f=1;f<p;f++)Pe(c),s.push(c=[]),c.push({types:m,content:u[f]})}else l++,t.push(m),n.push(i),a.push(0),r.push(i.length)}l--,t.pop(),n.pop(),a.pop(),r.pop()}return Pe(c),s}(void 0!==l?this.tokenize(t,a,l,n):[a]),className:"prism-code language-"+n,style:void 0!==o?o.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(a.Component),Re="codeLine_lJS_",$e="codeLineNumber_Tfdd",We="codeLineContent_feaV";function Fe(e){let{line:t,classNames:n,showLineNumbers:r,getLineProps:o,getTokenProps:l}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=o({line:t,className:(0,m.Z)(n,r&&Re)}),s=t.map(((e,t)=>a.createElement("span",(0,u.Z)({key:t},l({token:e,key:t})))));return a.createElement("span",c,r?a.createElement(a.Fragment,null,a.createElement("span",{className:$e}),a.createElement("span",{className:We},s)):s,a.createElement("br",null))}const qe={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Ge(e){let{code:t,className:n}=e;const[r,o]=(0,a.useState)(!1),l=(0,a.useRef)(void 0),c=(0,a.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;const a=document.createElement("textarea"),r=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";const o=document.getSelection();let l=!1;o.rangeCount>0&&(l=o.getRangeAt(0)),n.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;let c=!1;try{c=document.execCommand("copy")}catch{}a.remove(),l&&(o.removeAllRanges(),o.addRange(l)),r&&r.focus()}(t),o(!0),l.current=window.setTimeout((()=>{o(!1)}),1e3)}),[t]);return(0,a.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),a.createElement("button",{type:"button","aria-label":r?(0,p.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,p.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,p.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,m.Z)("clean-btn",n,qe.copyButton,r&&qe.copyButtonCopied),onClick:c},a.createElement("span",{className:qe.copyButtonIcons,"aria-hidden":"true"},a.createElement("svg",{className:qe.copyButtonIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})),a.createElement("svg",{className:qe.copyButtonSuccessIcon,viewBox:"0 0 24 24"},a.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}const Je="wordWrapButtonIcon_Bwma",Qe="wordWrapButtonEnabled_EoeP";function Xe(e){let{className:t,onClick:n,isEnabled:r}=e;const o=(0,p.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return a.createElement("button",{type:"button",onClick:n,className:(0,m.Z)("clean-btn",t,r&&Qe),"aria-label":o,title:o},a.createElement("svg",{className:Je,viewBox:"0 0 24 24","aria-hidden":"true"},a.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})))}function Ye(e){let{children:t,className:n="",metastring:r,title:o,showLineNumbers:l,language:c}=e;const{prism:{defaultLanguage:s,magicComments:i}}=(0,$.L)(),d=c??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}(n)??s,p=Ee(),f=function(){const[e,t]=(0,a.useState)(!1),[n,r]=(0,a.useState)(!1),o=(0,a.useRef)(null),l=(0,a.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),c=(0,a.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return Ae(o,c),(0,a.useEffect)((()=>{c()}),[e,c]),(0,a.useEffect)((()=>(window.addEventListener("resize",c,{passive:!0}),()=>{window.removeEventListener("resize",c)})),[c]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:l}}(),h=function(e){var t;return(null==e||null==(t=e.match(Ne))?void 0:t.groups.title)??""}(r)||o,{lineClassNames:g,code:v}=Te(t,{metastring:r,language:d,magicComments:i}),b=l??function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(r);return a.createElement(we,{as:"div",className:(0,m.Z)(n,d&&!n.includes(`language-${d}`)&&`language-${d}`)},h&&a.createElement("div",{className:xe.codeBlockTitle},h),a.createElement("div",{className:xe.codeBlockContent},a.createElement(De,(0,u.Z)({},je,{theme:p,code:v,language:d??"text"}),(e=>{let{className:t,tokens:n,getLineProps:r,getTokenProps:o}=e;return a.createElement("pre",{tabIndex:0,ref:f.codeBlockRef,className:(0,m.Z)(t,xe.codeBlock,"thin-scrollbar")},a.createElement("code",{className:(0,m.Z)(xe.codeBlockLines,b&&xe.codeBlockLinesWithNumbering)},n.map(((e,t)=>a.createElement(Fe,{key:t,line:e,getLineProps:r,getTokenProps:o,classNames:g[t],showLineNumbers:b})))))})),a.createElement("div",{className:xe.buttonGroup},(f.isEnabled||f.isCodeScrollable)&&a.createElement(Xe,{className:xe.codeButton,onClick:()=>f.toggle(),isEnabled:f.isEnabled}),a.createElement(Ge,{className:xe.codeButton,code:v}))))}function Ke(e){let{children:t,...n}=e;const r=(0,ve.Z)(),o=function(e){return a.Children.toArray(e).some((e=>(0,a.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof o?Ye:Be;return a.createElement(l,(0,u.Z)({key:String(r)},n),o)}const et="details_lb9f",tt="isBrowser_bmU9",nt="collapsibleContent_i85q";function at(e){return!!e&&("SUMMARY"===e.tagName||at(e.parentElement))}function rt(e,t){return!!e&&(e===t||rt(e.parentElement,t))}function ot(e){let{summary:t,children:n,...r}=e;const o=(0,ve.Z)(),l=(0,a.useRef)(null),{collapsed:c,setCollapsed:s}=(0,R.u)({initialState:!r.open}),[i,d]=(0,a.useState)(r.open);return a.createElement("details",(0,u.Z)({},r,{ref:l,open:i,"data-collapsed":c,className:(0,m.Z)(et,o&&tt,r.className),onMouseDown:e=>{at(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;at(t)&&rt(t,l.current)&&(e.preventDefault(),c?(s(!1),d(!0)):s(!0))}}),t??a.createElement("summary",null,"Details"),a.createElement(R.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{s(e),d(!e)}},a.createElement("div",{className:nt},n)))}const lt="details_b_Ee";function ct(e){let{...t}=e;return a.createElement(ot,(0,u.Z)({},t,{className:(0,m.Z)("alert alert--info",lt,t.className)}))}function st(e){return a.createElement(fe,e)}const it="containsTaskList_mC6p";const mt="img_ev3q";const dt="admonition_LlT9",ut="admonitionHeading_tbUL",pt="admonitionIcon_kALy",ft="admonitionContent_S0QG";const ht={note:{infimaClassName:"secondary",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:a.createElement(p.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 12 16"},a.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:a.createElement(p.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 14 16"},a.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:a.createElement(p.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return a.createElement("svg",{viewBox:"0 0 16 16"},a.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:a.createElement(p.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},gt={secondary:"note",important:"info",success:"tip",warning:"danger"};function vt(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=a.Children.toArray(e),n=t.find((e=>{var t;return a.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:r}}(e.children);return{...e,title:e.title??t,children:n}}const bt={head:function(e){const t=a.Children.map(e.children,(e=>a.isValidElement(e)?function(e){var t;if(null!=(t=e.props)&&t.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...r}=e.props;return a.createElement(e.props.originalType,r)}return e}(e):e));return a.createElement(ge.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return a.Children.toArray(e.children).every((e=>{var n;return"string"==typeof e&&!e.includes("\n")||(0,a.isValidElement)(e)&&t.includes(null==(n=e.props)?void 0:n.mdxType)}))?a.createElement("code",e):a.createElement(Ke,e)},a:function(e){return a.createElement(f.Z,e)},pre:function(e){var t;return a.createElement(Ke,(0,a.isValidElement)(e.children)&&"code"===(null==(t=e.children.props)?void 0:t.originalType)?e.children.props:{...e})},details:function(e){const t=a.Children.toArray(e.children),n=t.find((e=>{var t;return a.isValidElement(e)&&"summary"===(null==(t=e.props)?void 0:t.mdxType)})),r=a.createElement(a.Fragment,null,t.filter((e=>e!==n)));return a.createElement(ct,(0,u.Z)({},e,{summary:n}),r)},ul:function(e){return a.createElement("ul",(0,u.Z)({},e,{className:(t=e.className,(0,m.Z)(t,(null==t?void 0:t.includes("contains-task-list"))&&it))}));var t},img:function(e){return a.createElement("img",(0,u.Z)({loading:"lazy"},e,{className:(t=e.className,(0,m.Z)(t,mt))}));var t},h1:e=>a.createElement(st,(0,u.Z)({as:"h1"},e)),h2:e=>a.createElement(st,(0,u.Z)({as:"h2"},e)),h3:e=>a.createElement(st,(0,u.Z)({as:"h3"},e)),h4:e=>a.createElement(st,(0,u.Z)({as:"h4"},e)),h5:e=>a.createElement(st,(0,u.Z)({as:"h5"},e)),h6:e=>a.createElement(st,(0,u.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:r,icon:o}=vt(e),l=function(e){const t=gt[e]??e;return ht[t]||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),ht.info)}(n),c=r??l.label,{iconComponent:s}=l,i=o??a.createElement(s,null);return a.createElement("div",{className:(0,m.Z)(y.k.common.admonition,y.k.common.admonitionType(e.type),"alert",`alert--${l.infimaClassName}`,dt)},a.createElement("div",{className:ut},a.createElement("span",{className:pt},i),c),a.createElement("div",{className:ft},t))},mermaid:n(1875).Z};function Et(e){let{children:t}=e;return a.createElement(he.Zo,{components:bt},t)}function yt(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=s();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,m.Z)(y.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(fe,{as:"h1"},n)),a.createElement(Et,null,t))}var kt=n(2802),Nt=n(8596),Lt=n(4996);function Ct(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const _t={breadcrumbsContainer:"breadcrumbsContainer_Z_bl",breadcrumbHomeIcon:"breadcrumbHomeIcon_OVgt"};function Tt(e){let{children:t,href:n,isLast:r}=e;const o="breadcrumbs__link";return r?a.createElement("span",{className:o,itemProp:"name"},t):n?a.createElement(f.Z,{className:o,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:o},t)}function Zt(e){let{children:t,active:n,index:r,addMicrodata:o}=e;return a.createElement("li",(0,u.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,m.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(r+1)}))}function wt(){const e=(0,Lt.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(f.Z,{"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,m.Z)("breadcrumbs__link",_t.breadcrumbsItemLink),href:e},a.createElement(Ct,{className:_t.breadcrumbHomeIcon})))}function xt(){const e=(0,kt.s1)(),t=(0,Nt.Ns)();return e?a.createElement("nav",{className:(0,m.Z)(y.k.docs.docBreadcrumbs,_t.breadcrumbsContainer),"aria-label":(0,p.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(wt,null),e.map(((t,n)=>{const r=n===e.length-1;return a.createElement(Zt,{key:n,active:r,index:n,addMicrodata:!!t.href},a.createElement(Tt,{href:t.href,isLast:r},t.label))})))):null}const Bt="docItemContainer_Djhp",Ot="docItemCol_VOVn";function At(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=s(),n=(0,d.i)(),r=e.hide_table_of_contents,o=!r&&t.length>0;return{hidden:r,mobile:o?a.createElement(se,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(de,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,m.Z)("col",!n.hidden&&Ot)},a.createElement(Z,null),a.createElement("div",{className:Bt},a.createElement("article",null,a.createElement(xt,null),a.createElement(w,null),n.mobile,a.createElement(yt,null,t),a.createElement(D,null)),a.createElement(v,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function Ht(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(c,{content:e.content},a.createElement(r.FG,{className:t},a.createElement(i,null),a.createElement(At,null,a.createElement(n,null))))}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var a=n(7294),r=n(6010),o=n(9960);const l="tag_zVej",c="tagRegular_sFm0",s="tagWithCount_h2kH";function i(e){let{permalink:t,label:n,count:i}=e;return a.createElement(o.Z,{href:t,className:(0,r.Z)(l,i?s:c)},n,i&&a.createElement("span",null,i))}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>c,q:()=>l});var a=n(7294),r=n(902);const o=a.createContext(null);function l(e){let{children:t,version:n}=e;return a.createElement(o.Provider,{value:n},t)}function c(){const e=(0,a.useContext)(o);if(null===e)throw new r.i6("DocsVersionProvider");return e}},7594:(e,t)=>{function n(e){let t,n=[];for(let a of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(a))n.push(parseInt(a,10));else if(t=a.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,a,r,o]=t;if(a&&o){a=parseInt(a),o=parseInt(o);const e=a<o?1:-1;"-"!==r&&".."!==r&&"\u2025"!==r||(o+=e);for(let t=a;t!==o;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/1be78505.adfebf8d.js b/assets/js/1be78505.adfebf8d.js new file mode 100644 index 0000000..9a55e0b --- /dev/null +++ b/assets/js/1be78505.adfebf8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[9514,4972],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Ie});var a=n(7294),l=n(6010),o=n(1944),r=n(5281),c=n(3320),i=n(2802),s=n(4477),d=n(1116),m=n(3285),u=n(5999),b=n(2466),p=n(5936);const h="backToTopButton_sjWU",E="backToTopButtonShow_xfvO";function f(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,l]=(0,a.useState)(!1),o=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=null==n?void 0:n.scrollY;r&&(o.current?o.current=!1:a>=r?(c(),l(!1)):a<t?l(!1):a+window.innerHeight<document.documentElement.scrollHeight&&l(!0))})),(0,p.S)((e=>{e.location.hash&&(o.current=!0,l(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,l.Z)("clean-btn",r.k.common.backToTopButton,h,e&&E),type:"button",onClick:t})}var g=n(6775),v=n(7524),_=n(6668),k=n(1327),C=n(7462);function I(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const N="collapseSidebarButton_PEFL",S="collapseSidebarButtonIcon_kv0_";function Z(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,l.Z)("button button--secondary button--outline",N),onClick:t},a.createElement(I,{className:S}))}var x=n(9689),y=n(902);const T=Symbol("EmptyContext"),w=a.createContext(T);function L(e){let{children:t}=e;const[n,l]=(0,a.useState)(null),o=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:l})),[n]);return a.createElement(w.Provider,{value:o},t)}var M=n(6043),A=n(8596),B=n(9960),F=n(2389);function P(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,_.L)(),f=function(e){const t=(0,F.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,o),v=(0,A.Mg)(h,o),{collapsed:k,setCollapsed:I}=(0,M.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:N,setExpandedItem:S}=function(){const e=(0,a.useContext)(w);if(e===T)throw new y.i6("DocSidebarItemsExpandedStateProvider");return e}(),Z=function(e){void 0===e&&(e=!k),S(e?null:s),I(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:l}=e;const o=(0,y.D9)(t);(0,a.useEffect)((()=>{t&&!o&&n&&l(!1)}),[t,o,n,l])}({isActive:g,collapsed:k,updateCollapsed:Z}),(0,a.useEffect)((()=>{b&&null!=N&&N!==s&&E&&I(!0)}),[b,N,s,I,E]),a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":k},p)},a.createElement("div",{className:(0,l.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(B.Z,(0,C.Z)({className:(0,l.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{null==n||n(t),h?Z(!1):(e.preventDefault(),Z())}:()=>{null==n||n(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!k:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(P,{categoryLabel:u,onClick:e=>{e.preventDefault(),Z()}})),a.createElement(M.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:k},a.createElement(q,{items:m,tabIndex:k?-1:0,onItemClick:n,activePath:o,level:c+1})))}var W=n(3919),D=n(9471);const R="menuExternalLink_NmtK";function z(e){let{item:t,onItemClick:n,activePath:o,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,o),E=(0,W.Z)(m);return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(B.Z,(0,C.Z)({className:(0,l.Z)("menu__link",!E&&R,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(D.Z,null)))}const U="menuHtmlItem_M9Kj";function V(e){let{item:t,level:n,index:o}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,l.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[U,"menu__list-item"],s),key:o,dangerouslySetInnerHTML:{__html:c}})}function K(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(V,(0,C.Z)({item:t},n));default:return a.createElement(z,(0,C.Z)({item:t},n))}}function j(e){let{items:t,...n}=e;return a.createElement(L,null,t.map(((e,t)=>a.createElement(K,(0,C.Z)({key:t,item:e,index:t},n)))))}const q=(0,a.memo)(j),G="menu_SIkG",Y="menuWithAnnouncementBar_GW3s";function O(e){let{path:t,sidebar:n,className:o}=e;const c=function(){const{isActive:e}=(0,x.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{className:(0,l.Z)("menu thin-scrollbar",G,c&&Y,o)},a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(q,{items:n,activePath:t,level:1})))}const X="sidebar_njMd",J="sidebarWithHideableNavbar_wUlq",Q="sidebarHidden_VK0M",$="sidebarLogo_isFc";function ee(e){let{path:t,sidebar:n,onCollapse:o,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,_.L)();return a.createElement("div",{className:(0,l.Z)(X,c&&J,r&&Q)},c&&a.createElement(k.Z,{tabIndex:-1,className:$}),a.createElement(O,{path:t,sidebar:n}),i&&a.createElement(Z,{onClick:o}))}const te=a.memo(ee);var ne=n(3102),ae=n(2961);const le=e=>{let{sidebar:t,path:n}=e;const o=(0,ae.e)();return a.createElement("ul",{className:(0,l.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(q,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&o.toggle(),"link"===e.type&&o.toggle()},level:1}))};function oe(e){return a.createElement(ne.Zo,{component:le,props:e})}const re=a.memo(oe);function ce(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,l="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(te,e),l&&a.createElement(re,e))}const ie="expandButton_m80_",se="expandButtonIcon_BlDH";function de(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:ie,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(I,{className:se}))}const me="docSidebarContainer_b6E3",ue="docSidebarContainerHidden_b3ry";function be(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:(null==n?void 0:n.name)??"noSidebar"},t)}function pe(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:o}=e;const{pathname:c}=(0,g.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),o((e=>!e))}),[o,i]);return a.createElement("aside",{className:(0,l.Z)(r.k.docs.docSidebarContainer,me,n&&ue),onTransitionEnd:e=>{e.currentTarget.classList.contains(me)&&n&&s(!0)}},a.createElement(be,null,a.createElement(ce,{sidebar:t,path:c,onCollapse:d,isHidden:i})),i&&a.createElement(de,{toggleSidebar:d}))}const he={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function Ee(e){let{hiddenSidebarContainer:t,children:n}=e;const o=(0,d.V)();return a.createElement("main",{className:(0,l.Z)(he.docMainContainer,(t||!o)&&he.docMainContainerEnhanced)},a.createElement("div",{className:(0,l.Z)("container padding-top--md padding-bottom--lg",he.docItemWrapper,t&&he.docItemWrapperEnhanced)},n))}const fe="docPage__5DB",ge="docsWrapper_BCFX";function ve(e){let{children:t}=e;const n=(0,d.V)(),[l,o]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:ge},a.createElement(f,null),a.createElement("div",{className:fe},n&&a.createElement(pe,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(Ee,{hiddenSidebarContainer:l},t)))}var _e=n(4972),ke=n(197);function Ce(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(ke.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(o.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function Ie(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(_e.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(Ce,e),a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(ve,null,c)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),l=n(5999),o=n(1944),r=n(3285);function c(){return a.createElement(a.Fragment,null,a.createElement(o.d,{title:(0,l.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(l.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(l.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},4477:(e,t,n)=>{n.d(t,{E:()=>c,q:()=>r});var a=n(7294),l=n(902);const o=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(o.Provider,{value:n},t)}function c(){const e=(0,a.useContext)(o);if(null===e)throw new l.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/assets/js/1d809187.f3a197c7.js b/assets/js/1d809187.f3a197c7.js new file mode 100644 index 0000000..5035ba3 --- /dev/null +++ b/assets/js/1d809187.f3a197c7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5333],{3905:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>m});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?a(Object(o),!0).forEach((function(t){n(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function l(e,t){if(null==e)return{};var o,r,n=function(e,t){if(null==e)return{};var o,r,n={},a=Object.keys(e);for(r=0;r<a.length;r++)o=a[r],t.indexOf(o)>=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)o=a[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var c=r.createContext({}),p=function(e){var t=r.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},s=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=p(o),m=n,h=d["".concat(c,".").concat(m)]||d[m]||u[m]||a;return o?r.createElement(h,i(i({ref:t},s),{},{components:o})):r.createElement(h,i({ref:t},s))}));function m(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,i=new Array(a);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var p=2;p<a;p++)i[p]=o[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}d.displayName="MDXCreateElement"},7266:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=o(7462),n=(o(7294),o(3905));const a={id:"localization",title:"Localization",sidebar_position:5},i=void 0,l={unversionedId:"Developer_Documentation/localization",id:"Developer_Documentation/localization",title:"Localization",description:"Gephi has a localization program to provide the software in your language: this page describes how to contribute! We use the Weblate.",source:"@site/docs/Developer_Documentation/Localization.md",sourceDirName:"Developer_Documentation",slug:"/Developer_Documentation/localization",permalink:"/Developer_Documentation/localization",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Developer_Documentation/Localization.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{id:"localization",title:"Localization",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Code Style",permalink:"/Developer_Documentation/code_style"},next:{title:"Introduction",permalink:"/Plugins/"}},c={},p=[{value:"Short and long term team goal",id:"short-and-long-term-team-goal",level:2},{value:"Translation guide",id:"translation-guide",level:2},{value:"Get started!",id:"get-started",level:3}],s={toc:p};function u(e){let{components:t,...o}=e;return(0,n.kt)("wrapper",(0,r.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Gephi has a localization program to provide the software in your language: this page describes how to contribute! We use the ",(0,n.kt)("a",{parentName:"p",href:"https://hosted.weblate.org/projects/gephi/"},"Weblate"),"."),(0,n.kt)("h2",{id:"short-and-long-term-team-goal"},"Short and long term team goal"),(0,n.kt)("p",null,"Lots of people are not comfortable with English. Our goal is to distribute Gephi in French, Spanish and other languages the community requests."),(0,n.kt)("h2",{id:"translation-guide"},"Translation guide"),(0,n.kt)("h3",{id:"get-started"},"Get started!"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Create an account on ",(0,n.kt)("a",{parentName:"li",href:"https://hosted.weblate.org/projects/gephi/"},"Weblate"),".")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Best is to login with your GitHub account so your contributions will be directly linked to your GitHub profile")),(0,n.kt)("ol",{start:2},(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Take a look at the ",(0,n.kt)("a",{parentName:"p",href:"https://hosted.weblate.org/projects/gephi/#information"},"latest guidelines"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Browse the components and start translating! "))),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Important Note: only English texts should be written directly in the source code .properties files. All translations should be made on Weblate platform, otherwise there will be conflicts.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2413df23.edfd05c8.js b/assets/js/2413df23.edfd05c8.js new file mode 100644 index 0000000..ba838bb --- /dev/null +++ b/assets/js/2413df23.edfd05c8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[956],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>c});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),m=s(r),c=a,h=m["".concat(p,".").concat(c)]||m[c]||u[c]||i;return r?n.createElement(h,o(o({ref:t},d),{},{components:r})):n.createElement(h,o({ref:t},d))}));function c(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var s=2;s<i;s++)o[s]=r[s];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},6969:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var n=r(7462),a=(r(7294),r(3905));const i={id:"preview-renderer",title:"Preview renderer",sidebar_position:11},o=void 0,l={unversionedId:"Plugins/preview-renderer",id:"Plugins/preview-renderer",title:"Preview renderer",description:"Introduction",source:"@site/docs/Plugins/Preview_renderer.md",sourceDirName:"Plugins",slug:"/Plugins/preview-renderer",permalink:"/Plugins/preview-renderer",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Preview_renderer.md",tags:[],version:"current",sidebarPosition:11,frontMatter:{id:"preview-renderer",title:"Preview renderer",sidebar_position:11},sidebar:"tutorialSidebar",previous:{title:"Extend Data Laboratory",permalink:"/Plugins/Extend_Data_Laboratory"},next:{title:"Add a module panel",permalink:"/Plugins/Add_a_module_panel"}},p={},s=[{value:"Introduction",id:"introduction",level:2},{value:"How renderers work",id:"how-renderers-work",level:3},{value:"Create a new Renderer",id:"create-a-new-renderer",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create new Renderer",id:"create-new-renderer",level:3},{value:"Implement the <code>isRendererForItem</code>",id:"implement-the-isrendererforitem",level:3},{value:"Implement <code>getProperties</code>",id:"implement-getproperties",level:3},{value:"Implement render",id:"implement-render",level:3},{value:"Overwrite an existing renderer",id:"overwrite-an-existing-renderer",level:2},{value:"Appendix",id:"appendix",level:2},{value:"Custom properties",id:"custom-properties",level:3},{value:"Complex pre-process",id:"complex-pre-process",level:3},{value:"How to read all items of a particular type",id:"how-to-read-all-items-of-a-particular-type",level:3},{value:"How to use constants and data generated in pre-process",id:"how-to-use-constants-and-data-generated-in-pre-process",level:3},{value:"Default item data",id:"default-item-data",level:3}],d={toc:s};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"Preview is a highly customizable module and plug-ins can implements new renderers to display additional elements on screen, for instance hulls for groups. It's also possible to overwrite existing renderers and replace node or edge aspect."),(0,a.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,a.kt)("strong",{parentName:"p"},"MyRenderer"),", you can start this tutorial."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"One can find renderers examples in the ",(0,a.kt)("a",{parentName:"strong",href:"https://github.com/gephi/gephi/tree/master/modules/PreviewPlugin"},"PreviewPlugin")," module.")),(0,a.kt)("h3",{id:"how-renderers-work"},"How renderers work"),(0,a.kt)("p",null,"Renderers describe how a particular item is rendered and has the code to dray on a rendering target (Processing, SVG or PDF). Items are for example the node or edges of the graph and are given to renderers to be drawn. Each item (e.g. node, edge) should have it's renderer."),(0,a.kt)("p",null,"Rendering is a three-steps process:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"First the ",(0,a.kt)("inlineCode",{parentName:"li"},"preProcess()")," method is called on all renderers to let them initialize additional attributes for their items. The best example is the edge renderer which will initialize the source and target position in the ",(0,a.kt)("inlineCode",{parentName:"li"},"EdgeItem")," object during this phase. In general the ",(0,a.kt)("inlineCode",{parentName:"li"},"preProcess()")," method is the best for complex algorithms or gathering data from other items. Note that the ",(0,a.kt)("inlineCode",{parentName:"li"},"preProcess()")," method is called only once per refresh, unlike ",(0,a.kt)("inlineCode",{parentName:"li"},"render()")," which is called many times."),(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("inlineCode",{parentName:"li"},"isRendererForitem()")," is then used to determine which renderer should be used to render an item. The method provides an access to the preview properties. For instance, if the properties says the edge display is disabled, the edge renderer should return false for every item. Note that nothing avoids several renderer to returns true for the same item."),(0,a.kt)("li",{parentName:"ol"},"The ",(0,a.kt)("inlineCode",{parentName:"li"},"render()")," method is finally called for every item which the renderer returned ",(0,a.kt)("inlineCode",{parentName:"li"},"true")," at ",(0,a.kt)("inlineCode",{parentName:"li"},"isRendererForitem()"),". It receives the properties and the render target. It uses the item attributes and properties to determine item aspects and the render target to obtain the canvas.")),(0,a.kt)("p",null,"If you want to create your own ",(0,a.kt)("inlineCode",{parentName:"p"},"Item")," look at [","[HowTo add a preview item]","]"),(0,a.kt)("h2",{id:"create-a-new-renderer"},"Create a new Renderer"),(0,a.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,a.kt)("p",null,"Add Preview API, Processing Wrapper, iText Wrapper and Lookup modules as dependencies for your plugin module. See [","[How To Set Module Dependencies]","]."),(0,a.kt)("h3",{id:"create-new-renderer"},"Create new Renderer"),(0,a.kt)("p",null,"Create a new renderer ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("inlineCode",{parentName:"strong"},"MyRenderer"))," class, which implements ",(0,a.kt)("inlineCode",{parentName:"p"},"Renderer"),"."),(0,a.kt)("p",null,"Add ",(0,a.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your renderer class, so it is detected by the system."),(0,a.kt)("p",null,"Here is how it should look like:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = Renderer.class)\npublic class MyRenderer implements Renderer {\n \n public String getDisplayName(){\n //return user friendly name for the renderer\n }\n \n public void preProcess(PreviewModel previewModel) {\n //TODO\n }\n \n public void render(Item item, RenderTarget target, PreviewProperties properties) {\n //TODO\n }\n \n public PreviewProperty[] getProperties() {\n //TODO\n }\n \n public boolean isRendererForitem(Item item, PreviewProperties properties) {\n //TODO\n }\n \n public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) {\n //TODO\n }\n}\n")),(0,a.kt)("h3",{id:"implement-the-isrendererforitem"},"Implement the ",(0,a.kt)("inlineCode",{parentName:"h3"},"isRendererForItem")),(0,a.kt)("p",null,"Each item returns a different value for its ",(0,a.kt)("inlineCode",{parentName:"p"},"getType()")," method so it's easy to know if the item is a node, an edge or a label."),(0,a.kt)("p",null,"The method also receives the current properties and can query values."),(0,a.kt)("p",null,"Here is the code from the edge arrow renderer that only works when items are non-directed edges:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"public boolean isRendererForitem(Item item, PreviewProperties properties) {\n return item.getType().equals(Item.EDGE) && properties.getBooleanValue(PreviewProperty.DIRECTED)\n && (Boolean) item.getData(EdgeItem.DIRECTED);\n}\n")),(0,a.kt)("h3",{id:"implement-getproperties"},"Implement ",(0,a.kt)("inlineCode",{parentName:"h3"},"getProperties")),(0,a.kt)("p",null,"You can add your own properties attached to the renderer. Typically each renderer has its own properties. For instance the node renderer has border size or color as properties. Once defined a property will be shawn to the user who can change its value."),(0,a.kt)("p",null,"Properties have a identifier, a display name, a description and a type. It's important to have a unique identifier to each property. Be sure to choose something not already taken."),(0,a.kt)("p",null,"Properties are displayed in categories. You can either set an existing category or define a new one. Existing categories are ",(0,a.kt)("inlineCode",{parentName:"p"},"PreviewProperty.CATEGORY_NODES"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"PreviewProperty.CATEGORY_EDGES"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"PreviewProperty.CATEGORY_NODE_LABELS"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"PreviewProperty.CATEGORY_EDGE_LABELS")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"PreviewProperty.CATEGORY_EDGE_ARROWS"),"."),(0,a.kt)("p",null,"Here is how to create a property ",(0,a.kt)("inlineCode",{parentName:"p"},'"Border width"'),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},'public PreviewProperty[] getProperties() {\n return new PreviewProperty[]{\n PreviewProperty.createProperty(this, "border_width", Float.class,\n "Border width",\n "",\n PreviewProperty.CATEGORY_NODES).setValue(1f)};\n}\n')),(0,a.kt)("p",null,"Properties should have a default value. It is set at the creation of the property simply by calling ",(0,a.kt)("inlineCode",{parentName:"p"},"setValue()"),". "),(0,a.kt)("h3",{id:"implement-render"},"Implement render"),(0,a.kt)("p",null,"The render method receives an item and draw it to a render target. There is three possible render targets:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/preview/api/ProcessingTarget.html"},"Processing")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/preview/api/SVGTarget.html"},"SVG")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/preview/api/PDFTarget.html"},"PDF"))),(0,a.kt)("p",null,"Renderers should implement the drawing routines for the three targets. One might ask why the same code has to be duplicated in three different ways. Unfortunately there is no unified drawing toolkit flexible and efficient enough to support this task at this point. The good news is that renderers have total control on what is drawn. It's verbose but flexible."),(0,a.kt)("p",null,"When the target is Processing, renderers obtain the ",(0,a.kt)("a",{parentName:"p",href:"http://processing.googlecode.com/svn/trunk/processing/build/javadoc/core/index.html?processing/core/PGraphicsJava2D.html"},"PGraphicsJava2D")," object. For the SVG target, renderers obtain Batik's ",(0,a.kt)("a",{parentName:"p",href:"http://xmlgraphics.apache.org/batik/using/dom-api.html"},"Document")," instance. As the PDF target rely on the iText library renderers obtain the ",(0,a.kt)("a",{parentName:"p",href:"http://api.itextpdf.com/itext/index.html?com/itextpdf/text/pdf/PdfContentByte.html"},"PdfContentByte")," object."),(0,a.kt)("p",null,"Example how to handle the three targets in render:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},'public void render(Item item, RenderTarget target, PreviewProperties properties) {\n if (target instanceof ProcessingTarget) {\n renderProcessing(item, (ProcessingTarget) target, properties);\n } else if (target instanceof SVGTarget) {\n renderSVG(item, (SVGTarget) target, properties);\n } else if (target instanceof PDFTarget) {\n renderPDF(item, (PDFTarget) target, properties);\n }\n}\n \npublic void renderProcessing(Item item, ProcessingTarget target, PreviewProperties properties) {\n PGraphics graphics = target.getGraphics();\n ...\n}\n \npublic void renderPDF(Item item, PDFTarget target, PreviewProperties properties) {\n PdfContentByte cb = target.getContentByte();\n ...\n}\n \npublic void renderSVG(Item item, SVGTarget target, PreviewProperties properties) {\n Element elem = target.createElement("circle");\n ...\n target.getTopElement("nodes").appendChild(elem);\n}\n')),(0,a.kt)("p",null,"Look at renderers examples in the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/PreviewPlugin"},"PreviewPlugin")," module."),(0,a.kt)("h2",{id:"overwrite-an-existing-renderer"},"Overwrite an existing renderer"),(0,a.kt)("p",null,"The default renderers can be overridden or extended.\nExtend or replace an existing renderer"),(0,a.kt)("p",null,"To extend or completely replace a default Renderer by your own implementation, create a new Renderer and set the annotation like below. In addition add [","[Preview Plugin]","] module as a dependency."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"@ServiceProvider(service=Renderer.class, position=XXX) public class MyRenderer extends NodeRenderer")),(0,a.kt)("p",null,"Being XXX the new position of the renderer Then you can reuse parts of the base class or just override them."),(0,a.kt)("p",null,"Default renderers are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"org.gephi.preview.plugin.renderers.NodeRenderer")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"org.gephi.preview.plugin.renderers.EdgeRenderer")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"org.gephi.preview.plugin.renderers.NodeLabelRenderer")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"org.gephi.preview.plugin.renderers.EdgeLabelRenderer")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"org.gephi.preview.plugin.renderers.ArrowRenderer"))),(0,a.kt)("h2",{id:"appendix"},"Appendix"),(0,a.kt)("h3",{id:"custom-properties"},"Custom properties"),(0,a.kt)("p",null,"Properties are usually default Java primitives like ",(0,a.kt)("inlineCode",{parentName:"p"},"Float")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"Color"),". Custom property types can be used if a valid property editor is defined. Property editors define how a property value should be serialized and provide a custom UI to let the user modify the value. For instance to define a new property type ",(0,a.kt)("inlineCode",{parentName:"p"},"NumberRange")," one could create a UI with two text fields to enter number ranges."),(0,a.kt)("p",null,"Create the new type class and then create a new property editor:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"public class NumberRangePropertyEditor extends java.beans.PropertyEditorSupport {\n @Override\n public Component getCustomEditor() {\n //TODO returns custom JPanel\n }\n \n @Override\n public String getAsText() {\n //TODO returns the value as string\n }\n \n @Override\n public void setAsText(String text) {\n //TODO set value from the text\n }\n \n @Override\n public boolean supportsCustomEditor() {\n return true;\n }\n}\n")),(0,a.kt)("p",null,"One can find property editors examples in the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/DesktopPreview"},"DesktopPreview")," module."),(0,a.kt)("h3",{id:"complex-pre-process"},"Complex pre-process"),(0,a.kt)("p",null,"In each renderer the ",(0,a.kt)("inlineCode",{parentName:"p"},"preProcess()")," method allows to access all preview data and execute complex algorithms."),(0,a.kt)("h3",{id:"how-to-read-all-items-of-a-particular-type"},"How to read all items of a particular type"),(0,a.kt)("p",null,"Simply by querying the preview model:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"Item[] edgeItems = previewModel.getItems(Item.EDGE);\n")),(0,a.kt)("h3",{id:"how-to-use-constants-and-data-generated-in-pre-process"},"How to use constants and data generated in pre-process"),(0,a.kt)("p",null,"Renderers should remain ",(0,a.kt)("strong",{parentName:"p"},"stateless"),". That means one shouldn't define any variable or fields in the renderer class itself. Instead all data can be put in the property system."),(0,a.kt)("p",null,"Here is an example how to calculate the min and max edge weight in the ",(0,a.kt)("inlineCode",{parentName:"p"},"preProcess()")," and use it in ",(0,a.kt)("inlineCode",{parentName:"p"},"render()"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},'public void preProcess(PreviewModel previewModel) {\n PreviewProperties properties = previewModel.getProperties();\n Item[] edgeItems = previewModel.getItems(Item.EDGE);\n \n for (Item edge : edgeItems) {\n minWeight = Math.min(minWeight, (Float) edge.getData(EdgeItem.WEIGHT));\n maxWeight = Math.max(maxWeight, (Float) edge.getData(EdgeItem.WEIGHT));\n }\n properties.putValue("weight.min", minWeight);\n properties.putValue("weight.max", maxWeight);\n}\n \npublic void render(Item item, RenderTarget target, PreviewProperties properties) {\n float minWeight = properties.getFloatValue("weight.min");\n float maxWeight = properties.getFloatValue("weight.max");\n ...\n}\n')),(0,a.kt)("p",null,"For additional data generated per item, simply call ",(0,a.kt)("inlineCode",{parentName:"p"},"item.setData()"),"."),(0,a.kt)("h3",{id:"default-item-data"},"Default item data"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Node")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"x (float)"),(0,a.kt)("li",{parentName:"ul"},"y (float)"),(0,a.kt)("li",{parentName:"ul"},"size (float)"),(0,a.kt)("li",{parentName:"ul"},"color (color)")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Edge")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"weight (float)"),(0,a.kt)("li",{parentName:"ul"},"directed (boolean)"),(0,a.kt)("li",{parentName:"ul"},"mutual (boolean)"),(0,a.kt)("li",{parentName:"ul"},"self_loop (boolean)"),(0,a.kt)("li",{parentName:"ul"},"meta_edge (boolean)"),(0,a.kt)("li",{parentName:"ul"},"color (color)")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Node Label")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"label (string)"),(0,a.kt)("li",{parentName:"ul"},"color (color)"),(0,a.kt)("li",{parentName:"ul"},"size (float)"),(0,a.kt)("li",{parentName:"ul"},"width (float)"),(0,a.kt)("li",{parentName:"ul"},"height (float)"),(0,a.kt)("li",{parentName:"ul"},"visible (boolean)")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Edge Labels")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"label (string)"),(0,a.kt)("li",{parentName:"ul"},"color (color)"),(0,a.kt)("li",{parentName:"ul"},"size (float)"),(0,a.kt)("li",{parentName:"ul"},"width (float)"),(0,a.kt)("li",{parentName:"ul"},"height (float)"),(0,a.kt)("li",{parentName:"ul"},"visible (boolean)")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Edges have additional data set by the default edge renderer:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"source (nodeitem)"),(0,a.kt)("li",{parentName:"ul"},"target (nodeitem)")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/36190045.9e829738.js b/assets/js/36190045.9e829738.js new file mode 100644 index 0000000..d29c7e1 --- /dev/null +++ b/assets/js/36190045.9e829738.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[4525],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),u=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},s=function(e){var t=u(e.components);return n.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=u(a),m=r,g=c["".concat(p,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(g,i(i({ref:t},s),{},{components:a})):n.createElement(g,i({ref:t},s))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var u=2;u<o;u++)i[u]=a[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},2009:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>u});var n=a(7462),r=(a(7294),a(3905));const o={id:"Extend_Data_Laboratory",title:"Extend Data Laboratory",sidebar_position:10},i=void 0,l={unversionedId:"Plugins/Extend_Data_Laboratory",id:"Plugins/Extend_Data_Laboratory",title:"Extend Data Laboratory",description:"Introduction",source:"@site/docs/Plugins/Extend_Data_Laboratory.md",sourceDirName:"Plugins",slug:"/Plugins/Extend_Data_Laboratory",permalink:"/Plugins/Extend_Data_Laboratory",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Extend_Data_Laboratory.md",tags:[],version:"current",sidebarPosition:10,frontMatter:{id:"Extend_Data_Laboratory",title:"Extend Data Laboratory",sidebar_position:10},sidebar:"tutorialSidebar",previous:{title:"Filter",permalink:"/Plugins/filter"},next:{title:"Preview renderer",permalink:"/Plugins/preview-renderer"}},p={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Where each type of manipulator appears in Gephi desktop application",id:"where-each-type-of-manipulator-appears-in-gephi-desktop-application",level:3},{value:"The Manipulator interface",id:"the-manipulator-interface",level:3},{value:"Create a new Manipulator",id:"create-a-new-manipulator",level:2},{value:"Setting up our data",id:"setting-up-our-data",level:3},{value:"Name and description",id:"name-and-description",level:3},{value:"Determining if our manipulator should be eligible to execute",id:"determining-if-our-manipulator-should-be-eligible-to-execute",level:3},{value:"Provide an UI",id:"provide-an-ui",level:3},{value:"Ordering and classifying manipulators",id:"ordering-and-classifying-manipulators",level:3},{value:"Optional icon",id:"optional-icon",level:3},{value:"Executing the final action",id:"executing-the-final-action",level:3},{value:"Complete code for Group nodes manipulator",id:"complete-code-for-group-nodes-manipulator",level:3},{value:"Nodes and edges manipulators",id:"nodes-and-edges-manipulators",level:2},{value:"AttributeColumnsManipulators",id:"attributecolumnsmanipulators",level:2},{value:"Builders (how to get our plugins to appear in data laboratory perspective)",id:"builders-how-to-get-our-plugins-to-appear-in-data-laboratory-perspective",level:2},{value:"Providing a GUI",id:"providing-a-gui",level:2},{value:"Manipulators Summary",id:"manipulators-summary",level:2}],s={toc:u};function d(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"Data Laboratory section of Gephi provides a good amount of basic and common features to manipulate the graph. But data laboratory can be extended with new features as plugins easily through Data Laboratory API/SPI. All Gephi's default data laboratory features are in ",(0,r.kt)("strong",{parentName:"p"},"Data Laboratory Plugin"),". ",(0,r.kt)("strong",{parentName:"p"},"Simple and complex examples can be found in this module"),"."),(0,r.kt)("p",null,"For this tutorial, the ",(0,r.kt)("strong",{parentName:"p"},"SPI")," packages (",(0,r.kt)("inlineCode",{parentName:"p"},"org.gephi.datalab.spi"),") are the most interesting, while ",(0,r.kt)("inlineCode",{parentName:"p"},"org.gephi.datalab.api")," only contains several controllers that expose general features to be used by plugins or other parts of gephi."),(0,r.kt)("p",null,"Data Laboratory SPI may seem big, but all interfaces to implement are mostly the same with small changes necessary to define different types of features. ",(0,r.kt)("strong",{parentName:"p"},"Once you know how to create some kind of feature, it is simple to create others"),"."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"From now on, we will call data laboratory features 'manipulators' since they manipulate graph data/elements.")),(0,r.kt)("h3",{id:"where-each-type-of-manipulator-appears-in-gephi-desktop-application"},"Where each type of manipulator appears in Gephi desktop application"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"800px-data-lab-overview",src:a(2783).Z,width:"800",height:"463"})),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"merge-strategies",src:a(9491).Z,width:"793",height:"659"})),(0,r.kt)("h3",{id:"the-manipulator-interface"},"The Manipulator interface"),(0,r.kt)("p",null,"The ",(0,r.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/datalab/spi/Manipulator.html"},"Manipulator")," interface is the part that most of the interfaces that you will implement share in common. Also, all kinds of manipulators can provide an optional GUI just by returning an implementation of the ",(0,r.kt)("a",{parentName:"p",href:"https://gephi.org/docs/api/org/gephi/datalab/spi/ManipulatorUI.html"},"ManipulatorUI")," interface."),(0,r.kt)("p",null,"The interfaces that extend Manipulator to provide specific types of manipulators are:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/nodes/NodesManipulator.html"},"NodesManipulator")," - Defines a context menu action to manipulate one or more selected nodes."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/edges/EdgesManipulator.html"},"EdgesManipulator")," - Defines a context menu action to manipulate one or more selected edges."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/general/GeneralActionsManipulator.html"},"GeneralActionsManipulator")," - Defines a general action not related to any specific graph element. ",(0,r.kt)("a",{parentName:"li",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/general/PluginGeneralActionsManipulator.html"},"PluginGeneralActionsManipulator")," is the same but appears in a plugin button that displays a list of general actions (use this when the tool bar does not have enough space for more general actions)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/values/AttributeValueManipulator.html"},"AttributeValueManipulator")," - Defines a context menu action that manipulates a single cell data (pair of AttributeRow and AttributeColumn)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategy.html"},"AttributeColumnsMergeStrategy")," - Defines an strategy"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://gephi.org/docs/api/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategy.html"},"AttributeRowsMergeStrategy")," - A very special type of manipulator that defines strategies for merging rows to be used by a nodes/edges manipulator or other parts (does not have a place in Data Laboratory GUI by itself but it is currently used by MergeNodes manipulator).")),(0,r.kt)("p",null,"Only ",(0,r.kt)("a",{parentName:"p",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/columns/AttributeColumnsManipulator.html"},"AttributeColumnsManipulator")," is a bit different from ",(0,r.kt)("inlineCode",{parentName:"p"},"Manipulator")," because its workflow is not the same as all the previous manipulators, and therefore provides its unique interface plus a ",(0,r.kt)("a",{parentName:"p",href:"http://gephi.org/docs/toolkit/org/gephi/datalab/spi/columns/AttributeColumnsManipulatorUI.html"},"AttributeColumnsManipulatorUI"),"."),(0,r.kt)("h2",{id:"create-a-new-manipulator"},"Create a new Manipulator"),(0,r.kt)("p",null,"Once we understand the interfaces that define our manipulators, we can create some sample features."),(0,r.kt)("h3",{id:"setting-up-our-data"},"Setting up our data"),(0,r.kt)("p",null,"Here is where manipulators that need some ",(0,r.kt)("strong",{parentName:"p"},"initial data")," (like nodes, edges or columns) get it. This method ",(0,r.kt)("strong",{parentName:"p"},"varies for each type of manipulator")," but is always called before any other method."),(0,r.kt)("p",null,"Code example for a nodes manipulator:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public void setup(Node[] nodes, Node clickedNode) {\n this.nodes=nodes;//Keep the needed data for future operations.\n}\n")),(0,r.kt)("p",null,"In this case, setup receives an array of nodes (selected nodes at right click) and the specific clicked node."),(0,r.kt)("h3",{id:"name-and-description"},"Name and description"),(0,r.kt)("p",null,"Simply define a name an a description (optional) of what our manipulator does."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public String getName() {\n return NbBundle.getMessage(Group.class, "Group.name");//Localized name for nodes grouping action\n}\n \npublic String getDescription() {\n return null;//No description\n}\n')),(0,r.kt)("h3",{id:"determining-if-our-manipulator-should-be-eligible-to-execute"},"Determining if our manipulator should be eligible to execute"),(0,r.kt)("p",null,"In determinate conditions we would not like our manipulator to be executed, so we declare it with a boolean. ",(0,r.kt)("strong",{parentName:"p"},"The moment this is called, setup has already been called"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public boolean canExecute() {\n return nodes.length == 1;//This manipulator will only be executed with a single node selection\n}\n")),(0,r.kt)("h3",{id:"provide-an-ui"},"Provide an UI"),(0,r.kt)("p",null,"Here we can return our GUI if desired. We will talk about ManipulatorUIs later."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public ManipulatorUI getUI(){\n return new MyUI();//It is not necessary to pass this class to the UI now because ManipulatorUI will be set up later.\n //return null if no GUI\n}\n")),(0,r.kt)("h3",{id:"ordering-and-classifying-manipulators"},"Ordering and classifying manipulators"),(0,r.kt)("p",null,"In order to declare the position in a group of manipulators that our manipulator has to appear, we have to provide a number identifying the category(type) and position."),(0,r.kt)("p",null,"Order of appearance is determined first by the type number and then by position number. Often consecutive elements are given numbers with considerable separation to be able to insert new categories between them."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public int getType() {\n return 300;//Will appear in the same category as other manipulators that also return 300\n}\n \npublic int getPosition() {\n return 0;//Will appear in its category before manipulators with a position of 1 or more\n}\n")),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"These are the only methods that could be called before setup and therefore should not depend on context data"),"."),(0,r.kt)("h3",{id:"optional-icon"},"Optional icon"),(0,r.kt)("p",null,"Just return an icon for the feature or null."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public Icon getIcon() {\n return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true);\n}\n')),(0,r.kt)("h3",{id:"executing-the-final-action"},"Executing the final action"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"This is where our feature does the work")," once it has been chosen and preferences (if any) have been chosen with or without a GUI."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"public void execute() {\n for(Node node:nodes){\n //Do something with the nodes\n }\n}\n")),(0,r.kt)("h3",{id:"complete-code-for-group-nodes-manipulator"},"Complete code for Group nodes manipulator"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public class Group extends BasicNodesManipulator {\n private Node[] nodes;\n \n public void setup(Node[] nodes, Node clickedNode) {\n this.nodes=nodes;\n }\n \n public void execute() {\n GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class);\n gec.groupNodes(nodes);\n }\n \n public String getName() {\n return NbBundle.getMessage(Group.class, "Group.name");\n }\n \n public String getDescription() {\n return "";\n }\n \n public boolean canExecute() {\n GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class);\n return gec.canGroupNodes(nodes);\n }\n \n public ManipulatorUI getUI() {\n return null;\n }\n \n public int getType() {\n return 300;\n }\n \n public int getPosition() {\n return 0;\n }\n \n public Icon getIcon() {\n return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true);\n }\n}\n')),(0,r.kt)("h2",{id:"nodes-and-edges-manipulators"},"Nodes and edges manipulators"),(0,r.kt)("p",null,"Both of these types of manipulators are shown as context menu actions in a popup menu, and benefit from some special settings defined in the ",(0,r.kt)("inlineCode",{parentName:"p"},"ContextMenuItemManipulator")," interface. Their principal extra feature is the possibility to have subitems, as can be observed in the next image."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"sub-items",src:a(2881).Z,width:"419",height:"84"})),(0,r.kt)("p",null,"It defines 3 methods:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public ContextMenuItemManipulator[] getSubItems() {\n return null;//Return subitems \n}\n")),(0,r.kt)("p",null,"Note that:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Most nodes/edges manipulators won't need to have subitems."),(0,r.kt)("li",{parentName:"ul"},"Subitems can also return more subitems."),(0,r.kt)("li",{parentName:"ul"},"Subitems will be set up with the proper data like their parents."),(0,r.kt)("li",{parentName:"ul"},"If a item/subitem returns subitems, it will never be executed, their subitems will."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"execute")," method of the specific clicked subitem will be called.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public boolean isAvailable() {\n return true;//Indicates if a subitem has to appear in the menu at all (enabled or not)\n} \n \npublic Integer getMnemonicKey() {\n return null;//Shorcut associated key for this item\n}\n")),(0,r.kt)("p",null,"Most manipulators won't need this, so a simple class like the following can be extended by all your manipulators to avoid repeating code:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public abstract class BasicNodesManipulator implements NodesManipulator{\n \n public boolean isAvailable() {\n return true;\n }\n \n public ContextMenuItemManipulator[] getSubItems() {\n return null;\n }\n \n public Integer getMnemonicKey() {\n return null;\n }\n}\n")),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"Visualization API has an SPI for adding context menu actions (GraphContextMenuItem) to nodes like DataLaboratory does with NodesManipulator. Note that they share the interface ContextMenuItemManipulator from Data Laboratory API, so they are compatible, being possible to reuse actions on nodes for Overview and Data Laboratory.")),(0,r.kt)("h2",{id:"attributecolumnsmanipulators"},"AttributeColumnsManipulators"),(0,r.kt)("p",null,"What makes different these manipulators is that, instead oh having data set up and then ",(0,r.kt)("inlineCode",{parentName:"p"},"canExecute")," being called, eligibility is tested for every column and is later executed for the selected column (showing first the UI if necessary)."),(0,r.kt)("p",null,"Here is a complete example of a real feature (columns duplication):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},'public class DuplicateColumn implements AttributeColumnsManipulator {\n private String title;\n private AttributeType columnType;\n \n public void execute(AttributeTable table, AttributeColumn column) {\n Lookup.getDefault().lookup(AttributeColumnsController.class).duplicateColumn(table, column, title, columnType);\n }\n \n public String getName() {\n return NbBundle.getMessage(DuplicateColumn.class, "DuplicateColumn.name");\n }\n \n public String getDescription() {\n return "";\n }\n \n public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) {\n return true;\n }\n \n public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) {\n return new DuplicateColumnUI();\n }\n \n public int getType() {\n return 0;\n }\n \n public int getPosition() {\n return 400;\n }\n \n public Image getIcon() {\n return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png");\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public AttributeType getColumnType() {\n return columnType;\n }\n \n public void setColumnType(AttributeType columnType) {\n this.columnType = columnType;\n }\n}\n')),(0,r.kt)("p",null,"Column type and title are set through ",(0,r.kt)("inlineCode",{parentName:"p"},"DuplicateColumnUI"),"."),(0,r.kt)("h2",{id:"builders-how-to-get-our-plugins-to-appear-in-data-laboratory-perspective"},"Builders (how to get our plugins to appear in data laboratory perspective)"),(0,r.kt)("p",null,"Like in other parts of Gephi, api/spi implementations are exposed with Netbeans Lookup API."),(0,r.kt)("p",null,"This is done with the [","[@ServiceProvider]","] annotation. Since this annotation returns a singleton of the service, in order to help the programmer avoid problems with previously set up data, some of the manipulators require a builder that returns instances of the manipulator as the service."),(0,r.kt)("p",null,"But other manipulators are directly exposed as the service with the annotation."),(0,r.kt)("p",null,"For example, to declare a ",(0,r.kt)("inlineCode",{parentName:"p"},"GeneralActionsManipulator"),", it is sufficient with:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = GeneralActionsManipulator.class)\npublic class AddEdgeToGraph implements GeneralActionsManipulator {\n...\n")),(0,r.kt)("p",null,"But for a ",(0,r.kt)("inlineCode",{parentName:"p"},"NodesManipulator")," you need to create a builder and give it the annotation (not to the manipulator):"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service=NodesManipulatorBuilder.class)\npublic class SetNodesSizeBuilder implements NodesManipulatorBuilder {\n public NodesManipulator getNodesManipulator() {\n return new SetNodesSize();\n }\n}\n")),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Manipulator type"),(0,r.kt)("th",{parentName:"tr",align:null},"Needs a builder"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"AttributeColumnsManipulator"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"GeneralActionsManipulator"),(0,r.kt)("td",{parentName:"tr",align:null})),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"AttributeColumnsMergeStrategy"),(0,r.kt)("td",{parentName:"tr",align:null},"\u2713")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"EdgesManipulator"),(0,r.kt)("td",{parentName:"tr",align:null},"\u2713")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"NodesManipulator"),(0,r.kt)("td",{parentName:"tr",align:null},"\u2713")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"AttributeRowsMergeStrategy"),(0,r.kt)("td",{parentName:"tr",align:null},"\u2713")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"AttributeValueManipulator"),(0,r.kt)("td",{parentName:"tr",align:null},"\u2713")))),(0,r.kt)("h2",{id:"providing-a-gui"},"Providing a GUI"),(0,r.kt)("p",null,"When your feature needs a GUI you only need to return a ",(0,r.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/datalab/spi/ManipulatorUI.html"},"ManipulatorUI")," implementation capable of configuring your feature extra data. Let's see what each method should do with an example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public class MyManipulatorUI extends JPanel implements ManipulatorUI {\n private MyManipulator manipulator;\n private DialogControls dialogControls;\n \n void setup(Manipulator m, DialogControls dialogControls){\n //Receive our manipulator instance:\n manipulator = (MyManipulator) m; //We know the type of manipulator we are going to receive so cast is safe\n //And an object to control the dialog if necessary \n //(for now it only is able to enable/disable the Ok button of the dialog for validation purposes)\n this.dialogControls = dialogControls;\n }\n \n void unSetup(){\n //Called when the dialog is closed, canceled or accepted. Pass necessary data to the manipulator:\n manipulator.setSomeOption(someValue);\n ...\n }\n \n String getDisplayName(){\n //Provide title for the dialog:\n return manipulator.getName();//For example, the manipulator name\n }\n \n public JPanel getSettingsPanel(){\n //Provide the JPanel to create the UI dialog\n //A good practice is to extend JPanel and just return this object\n return this;\n }\n \n /**\n * Indicates if the created dialog has to be modal\n */\n public boolean isModal(){\n return true;\n }\n}\n")),(0,r.kt)("h2",{id:"manipulators-summary"},"Manipulators Summary"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"manipulators",src:a(6773).Z,width:"1193",height:"670"})))}d.isMDXComponent=!0},2783:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/00_800px-data-lab-overview-d19fa2e4451d3ab84e176235f1a30ff3.png"},9491:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/01_merge-strategies-13ad19c21d8c1adac760b4821086d021.png"},2881:(e,t,a)=>{a.d(t,{Z:()=>n});const n="data:image/png;base64,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"},6773:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/03_manipulators-3a8a9920c55ae18f8b9e25339408990d.png"}}]); \ No newline at end of file diff --git a/assets/js/3720c009.120ceeca.js b/assets/js/3720c009.120ceeca.js new file mode 100644 index 0000000..83c83cb --- /dev/null +++ b/assets/js/3720c009.120ceeca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3751],{9861:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var l=a(7294),n=a(6010),r=a(5999);var c=a(1944),s=a(5281),m=a(3285),o=a(3008);const i="tag_Nnez";function u(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:i},l.createElement(o.Z,e))))),l.createElement("hr",null))}function g(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(u,{key:e.letter,letterEntry:e}))))}var p=a(197);function E(e){let{tags:t}=e;const a=(0,r.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});return l.createElement(c.FG,{className:(0,n.Z)(s.k.wrapper.docsPages,s.k.page.docsTagsListPage)},l.createElement(c.d,{title:a}),l.createElement(p.Z,{tag:"doc_tags_list"}),l.createElement(m.Z,null,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement("main",{className:"col col--8 col--offset-2"},l.createElement("h1",null,a),l.createElement(g,{tags:t}))))))}},3008:(e,t,a)=>{a.d(t,{Z:()=>o});var l=a(7294),n=a(6010),r=a(9960);const c="tag_zVej",s="tagRegular_sFm0",m="tagWithCount_h2kH";function o(e){let{permalink:t,label:a,count:o}=e;return l.createElement(r.Z,{href:t,className:(0,n.Z)(c,o?m:s)},a,o&&l.createElement("span",null,o))}}}]); \ No newline at end of file diff --git a/assets/js/373d7df1.c7fdc40d.js b/assets/js/373d7df1.c7fdc40d.js new file mode 100644 index 0000000..da3c0ae --- /dev/null +++ b/assets/js/373d7df1.c7fdc40d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3642],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=s(n),m=r,g=c["".concat(p,".").concat(m)]||c[m]||u[m]||i;return n?a.createElement(g,o(o({ref:t},d),{},{components:n})):a.createElement(g,o({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:r,o[1]=l;for(var s=2;s<i;s++)o[s]=n[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},9724:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=n(7462),r=(n(7294),n(3905));const i={id:"Add_a_module_panel",title:"Add a module panel",sidebar_position:12},o=void 0,l={unversionedId:"Plugins/Add_a_module_panel",id:"Plugins/Add_a_module_panel",title:"Add a module panel",description:"How to create a panel for plugin features, similar to Ranking, Graph or Layout? It is easy and fully integrated in Netbeans. Create your panel class and use Netbeans IDE to design the user interface. This page also explains how to work with the Perspective system.",source:"@site/docs/Plugins/Add_a_module_panel.md",sourceDirName:"Plugins",slug:"/Plugins/Add_a_module_panel",permalink:"/Plugins/Add_a_module_panel",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Add_a_module_panel.md",tags:[],version:"current",sidebarPosition:12,frontMatter:{id:"Add_a_module_panel",title:"Add a module panel",sidebar_position:12},sidebar:"tutorialSidebar",previous:{title:"Preview renderer",permalink:"/Plugins/preview-renderer"},next:{title:"Add a submenu",permalink:"/Plugins/Add_a_submenu"}},p={},s=[{value:"Register in a Perspective",id:"register-in-a-perspective",level:2},{value:"Branding",id:"branding",level:2},{value:"Change panel title",id:"change-panel-title",level:3},{value:"Set Icon",id:"set-icon",level:3},{value:"Links",id:"links",level:2}],d={toc:s};function u(e){let{components:t,...i}=e;return(0,r.kt)("wrapper",(0,a.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"How to create a panel for plugin features, similar to Ranking, Graph or Layout? It is easy and fully integrated in Netbeans. Create your panel class and use Netbeans IDE to design the user interface. This page also explains how to work with the ",(0,r.kt)("strong",{parentName:"p"},"Perspective")," system."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"800px-add-module-panel",src:n(8535).Z,width:"800",height:"478"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 1"),": Right click on your module and select ",(0,r.kt)("strong",{parentName:"li"},"New > Other...")," and find ",(0,r.kt)("strong",{parentName:"li"},"Window")," like showed in the step 1 below. The window wizard asks where to put your panel. You can use already defined modes (i.e. positions):",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"graphmode: Centered, full-size"),(0,r.kt)("li",{parentName:"ul"},"rankingmode: Top Left position"),(0,r.kt)("li",{parentName:"ul"},"layoutmode: Bottom Left position"),(0,r.kt)("li",{parentName:"ul"},"timelinemode: Below others, at the bottom"),(0,r.kt)("li",{parentName:"ul"},"filtersmode: Bottom Right"),(0,r.kt)("li",{parentName:"ul"},"contextmode: Top Right")))),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"add-module-panel1",src:n(2740).Z,width:"734",height:"503"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 2"),": Then check options about the panel policy showed in step2 and click on ",(0,r.kt)("strong",{parentName:"li"},"Next"),".")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"add-module-panel2",src:n(624).Z,width:"738",height:"504"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 3"),": Fill the ",(0,r.kt)("strong",{parentName:"li"},"Class Name"),", the system shows which files are created. Your panel is a ",(0,r.kt)("strong",{parentName:"li"},"TopComponent")," subclass.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"add-module-panel3",src:n(6444).Z,width:"736",height:"505"})),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Step 4"),": Click on ",(0,r.kt)("strong",{parentName:"li"},"Finish"),", files are created and you're invited to design your panel with Netbeans editor.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"add-module-panel-design",src:n(4444).Z,width:"779",height:"441"})),(0,r.kt)("p",null,"Your panel is now created and automatically registered. Start Gephi with your plugin and your panel is visible. "),(0,r.kt)("h2",{id:"register-in-a-perspective"},"Register in a Perspective"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Overview, Data Laboratory")," and ",(0,r.kt)("strong",{parentName:"p"},"Preview")," are perspectives in Gephi. A perspective is simply a set of panels that works together. When users change the perspective, some panels are hidden and others are showed. When you define a new panel above, it is not part of a perspective and therefore is always visible, regardless which perspective you are. Follow the steps to associate your panel with a perspective."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Add ",(0,r.kt)("strong",{parentName:"li"},"Desktop Perspective")," as a new module dependency. Right-click on your module and Properties."),(0,r.kt)("li",{parentName:"ol"},"Go to your ",(0,r.kt)("inlineCode",{parentName:"li"},"TopComponent")," sources and add ",(0,r.kt)("inlineCode",{parentName:"li"},"PerspectiveMember")," as interface."),(0,r.kt)("li",{parentName:"ol"},"Add the ",(0,r.kt)("inlineCode",{parentName:"li"},"@ServiceProvider")," annotation to be registered by the system and implement methods (note: you will need to add the 'Desktop Perspective' to the Module Dependencies ",(0,r.kt)("a",{parentName:"li",href:"http://activeintelligence.org/blog/archive/gephi-howto-Add_a_module_panel-dependency/"},"screenshots"),").")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service=PerspectiveMember.class)\npublic final class MyTopComponent extends TopComponent implements PerspectiveMember {\n...\n")),(0,r.kt)("p",null,"Implement ",(0,r.kt)("inlineCode",{parentName:"p"},"open()")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"close()")," methods like below to attach the component to the ",(0,r.kt)("inlineCode",{parentName:"p"},"LaboratoryPerspective"),", works also for ",(0,r.kt)("inlineCode",{parentName:"p"},"OverviewPerspective")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"PreviewPerspective"),":"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"public boolean open(Perspective perspective) {\n return perspective instanceof LaboratoryPerspective;\n}\npublic boolean close(Perspective perspective) {\n return true;\n}\n")),(0,r.kt)("p",null,"Specifically use ",(0,r.kt)("inlineCode",{parentName:"p"},"close()")," method if you want your panel to be visible on several perspectives."),(0,r.kt)("h2",{id:"branding"},"Branding"),(0,r.kt)("h3",{id:"change-panel-title"},"Change panel title"),(0,r.kt)("p",null,"Open the ",(0,r.kt)("strong",{parentName:"p"},"Bundle.properties")," file in your module and update ",(0,r.kt)("strong",{parentName:"p"},"CTL_MyTopComponent")," key."),(0,r.kt)("h3",{id:"set-icon"},"Set Icon"),(0,r.kt)("p",null,"In the ",(0,r.kt)("strong",{parentName:"p"},"TopComponent")," sources, uncomment the following line and set the icon path."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-java"},"setIcon(ImageUtilities.loadImage(ICON_PATH, true));\n")),(0,r.kt)("h2",{id:"links"},"Links"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"http://wiki.netbeans.org/DevFaqWindowsTopComponent"},"TopComponent in Netbeans Wiki"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"http://blogs.sun.com/geertjan/entry/creating_a_new_mode_in"},"How to create a new mode")))))}u.isMDXComponent=!0},8535:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/00_800px-add-module-panel-002fdb521132a92329f6637753dff9f6.png"},2740:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/01_add-module-panel1-fbce06db73726d71c916a95216583fb6.png"},624:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/02_add-module-panel2-d5e8f55ab031fc1876dc1f358dfa1f8e.png"},6444:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/03_add-module-panel3-806d445d35bba1b252cafe56b37b7628.png"},4444:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/04_add-module-panel-design-39e4848cb93bd06b362d145988c7ea36.png"}}]); \ No newline at end of file diff --git a/assets/js/389c429d.2637aac6.js b/assets/js/389c429d.2637aac6.js new file mode 100644 index 0000000..0f53514 --- /dev/null +++ b/assets/js/389c429d.2637aac6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3431],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>c});var i=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e,t){if(null==e)return{};var r,i,n=function(e,t){if(null==e)return{};var r,i,n={},a=Object.keys(e);for(i=0;i<a.length;i++)r=a[i],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)r=a[i],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=i.createContext({}),p=function(e){var t=i.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},d=function(e){var t=p(e.components);return i.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),h=p(r),c=n,g=h["".concat(s,".").concat(c)]||h[c]||u[c]||a;return r?i.createElement(g,l(l({ref:t},d),{},{components:r})):i.createElement(g,l({ref:t},d))}));function c(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=h;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o.mdxType="string"==typeof e?e:n,l[1]=o;for(var p=2;p<a;p++)l[p]=r[p];return i.createElement.apply(null,l)}return i.createElement.apply(null,r)}h.displayName="MDXCreateElement"},5852:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>o,toc:()=>p});var i=r(7462),n=(r(7294),r(3905));const a={id:"filter",title:"Filter",sidebar_position:9},l=void 0,o={unversionedId:"Plugins/filter",id:"Plugins/filter",title:"Filter",description:"Filters are pruning the graph by keeping only nodes and edges that satisfies filters conditions. They are either predicates or functions that reduce the graph, predicates are easy and return only true or false, whereas functions input a graph and output a graph.",source:"@site/docs/Plugins/Filter.md",sourceDirName:"Plugins",slug:"/Plugins/filter",permalink:"/Plugins/filter",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Filter.md",tags:[],version:"current",sidebarPosition:9,frontMatter:{id:"filter",title:"Filter",sidebar_position:9},sidebar:"tutorialSidebar",previous:{title:"Generator",permalink:"/Plugins/generator"},next:{title:"Extend Data Laboratory",permalink:"/Plugins/Extend_Data_Laboratory"}},s={},p=[{value:"How filtering works in Gephi",id:"how-filtering-works-in-gephi",level:2},{value:"Create a new Filter",id:"create-a-new-filter",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create FilterBuilder",id:"create-filterbuilder",level:3},{value:"Create Filter",id:"create-filter",level:3},{value:"NodeFilter",id:"nodefilter",level:4},{value:"ComplexFilter",id:"complexfilter",level:4},{value:"Finish the builder",id:"finish-the-builder",level:3},{value:"Properties",id:"properties",level:3},{value:"Provide a UI",id:"provide-a-ui",level:3},{value:"Appendix",id:"appendix",level:2},{value:"Create a CategoryBuilder",id:"create-a-categorybuilder",level:3},{value:"Provide an icon",id:"provide-an-icon",level:3},{value:"Custom Properties",id:"custom-properties",level:3}],d={toc:p};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,i.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Filters are pruning the graph by keeping only nodes and edges that satisfies filters conditions. They are either predicates or functions that reduce the graph, predicates are easy and return only true or false, whereas functions input a graph and output a graph."),(0,n.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,n.kt)("em",{parentName:"p"},"MyFilter"),", you can start this tutorial."),(0,n.kt)("p",null,"One can find filters examples in the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/FiltersPlugin/src/main"},"FiltersPlugin module"),"."),(0,n.kt)("h2",{id:"how-filtering-works-in-gephi"},"How filtering works in Gephi"),(0,n.kt)("p",null,"Gephi has a filter pipeline working with graph copies, where each filter can remove nodes and edges with settings. The Graph API in Gephi has the concept of View, a copy of the complete graph structure identified by an ID and where filters can work on it without disturbing other views. So, when a filter is removing nodes, it is removing them on a copy of the graph structure, the complete graph (named the main view) remains the same. This copy is eventually set as the visible view, the graph shown in the graph window. That is how users visualize a filtered graph. When filtering is disabled, the main view is simply set again as the visible view."),(0,n.kt)("p",null,"The filter pipeline is executed on a separate Thread and therefore doesn't block the rest of the application.\nFilters are wrapped into queries, which can be chained and combined. Similar as SQL nested queries concept, filter queries can have sub-queries and be represented as a tree, where the last executed query is the root. For example, the query ",(0,n.kt)("strong",{parentName:"p"},"INDEGREE(3, EDGE_WEIGHT(2))")," would be executed like below:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"A complete copy of the graph structure is created in a new view"),(0,n.kt)("li",{parentName:"ul"},"It is passed to the ",(0,n.kt)("strong",{parentName:"li"},"EDGE_WEIGHT")," filter, which removes edges under weight 2"),(0,n.kt)("li",{parentName:"ul"},"The sub-graph is passed to the ",(0,n.kt)("strong",{parentName:"li"},"INDEGREE")," filter, which removes nodes with in-degree less than 3 here"),(0,n.kt)("li",{parentName:"ul"},"The graph view is set as ",(0,n.kt)("em",{parentName:"li"},"visible view"),", the graph windows automatically refreshes")),(0,n.kt)("p",null,"When a property is changed in the user interface, for instance the weight threshold, the complete process above is just re-executed and the former graph view is destroyed."),(0,n.kt)("h2",{id:"create-a-new-filter"},"Create a new Filter"),(0,n.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,n.kt)("p",null,"Add ",(0,n.kt)("inlineCode",{parentName:"p"},"FiltersAPI"),", ",(0,n.kt)("inlineCode",{parentName:"p"},"GraphAPI"),", and ",(0,n.kt)("inlineCode",{parentName:"p"},"Lookup")," modules as dependencies for your plugin module. See [","[How To Set Module Dependencies]","]."),(0,n.kt)("h3",{id:"create-filterbuilder"},"Create FilterBuilder"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"FilterBuilder")," is a factory class for building the Filters. The builder is registered in the ",(0,n.kt)("inlineCode",{parentName:"li"},"FilterLibrary"),". The library is the upper panel where users choose the filters they want to use. Another type of builders, named ",(0,n.kt)("inlineCode",{parentName:"li"},"CategoryBuilder")," can create several builders at once and will be detailed later."),(0,n.kt)("li",{parentName:"ul"},"Create a new builder ",(0,n.kt)("em",{parentName:"li"},"MyFilterBuilder")," class, which implements ",(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/filters/spi/FilterBuilder.html"},(0,n.kt)("inlineCode",{parentName:"a"},"FilterBuilder")),"."),(0,n.kt)("li",{parentName:"ul"},"Add ",(0,n.kt)("inlineCode",{parentName:"li"},"@ServiceProvider")," annotation to your builder class, in order it is detected by the filter library.\nHere is how it should look like:")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'@ServiceProvider(service = FilterBuilder.class)\npublic class MyFilterBuilder implements FilterBuilder {\n \n public Category getCategory() {\n return FilterLibrary.NODE;\n }\n \n public String getName() {\n return "My Filter";\n }\n \n public Icon getIcon() {\n return null;\n }\n \n public String getDescription() {\n return "A filter example";\n }\n \n public Filter getFilter() {\n //TODO\n }\n \n public JPanel getPanel(Filter filter) {\n return null;\n }\n \n public void destroy(Filter filter) {\n }\n}\n')),(0,n.kt)("p",null,"Notice the ",(0,n.kt)("inlineCode",{parentName:"p"},"getCategory()")," method. As the ",(0,n.kt)("inlineCode",{parentName:"p"},"FilterLibrary")," is a tree, this builder needs a parent. That is the category. Use default categories defined in ",(0,n.kt)("inlineCode",{parentName:"p"},"FilterLibrary")," like above or simply return your own:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'public Category getCategory() {\n return new Category("Samples Filters");\n}\n')),(0,n.kt)("h3",{id:"create-filter"},"Create Filter"),(0,n.kt)("p",null,"Before creating the filter class, you should decide which filter interface to implement:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/filters/spi/NodeFilter.html"},(0,n.kt)("inlineCode",{parentName:"a"},"NodeFilter")),": Basic filters for nodes, that works as predicates. For a given node the filter's role is to return true if the node is kept or false if it is removed."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/filters/spi/EdgeFilter.html"},(0,n.kt)("inlineCode",{parentName:"a"},"EdgeFilter")),": Basic filters for edges, that works as predicates. For a given edge the filter's role is to return true if the edge is kept or false if it is removed."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/filters/spi/ComplexFilter.html"},(0,n.kt)("inlineCode",{parentName:"a"},"ComplexFilter")),": Filter working with full graphs and returning a subgraph.")),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"ComplexFilter")," interface is useful when both nodes and edges have to be filtered.\nFor instance, in the case of an edge weight filter (a filter that keeps edges only in a particular weight threshold) we only need ",(0,n.kt)("inlineCode",{parentName:"p"},"EdgeFilter"),". But if I want to design a filter that prunes the graph until it's average degree is 5.5 I need to have control on both nodes and edges. The complex filter is a black box, where nodes and edges can be filtered (e.g. removed) with tricky or complex processes."),(0,n.kt)("h4",{id:"nodefilter"},"NodeFilter"),(0,n.kt)("p",null,"Create a new ",(0,n.kt)("em",{parentName:"p"},"MyFilter")," class, which implements ",(0,n.kt)("inlineCode",{parentName:"p"},"NodeFilter")," interface. The main filter method is ",(0,n.kt)("inlineCode",{parentName:"p"},"evaluate()"),". The ",(0,n.kt)("inlineCode",{parentName:"p"},"init()")," asks if the filter is valid for the given graph. Only valid filters are executed by the system.\nThe example below removes isolated nodes (e.g. with degree equal to 0). The filter is said valid only if the graph have nodes."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'public class MyFilter implements NodeFilter {\n \n public boolean init(Graph graph) {\n return graph.getNodeCount() > 0;\n }\n \n public boolean evaluate(Graph graph, Node node) {\n return graph.getDegree(node) > 0;\n }\n \n public void finish() {\n }\n \n public String getName() {\n return "My Filter";\n }\n \n public FilterProperty[] getProperties() {\n return new FilterProperty[0]; //Will be explained later\n }\n}\n')),(0,n.kt)("p",null,"For specific directed or undirected graphs, just cast the ",(0,n.kt)("inlineCode",{parentName:"p"},"Graph")," in ",(0,n.kt)("inlineCode",{parentName:"p"},"DirectedGraph")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"UndirectedGraph"),"."),(0,n.kt)("h4",{id:"complexfilter"},"ComplexFilter"),(0,n.kt)("p",null,"The complex filter interface is very simple, the ",(0,n.kt)("inlineCode",{parentName:"p"},"filter()")," method directly gives the ",(0,n.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/graph/api/Graph.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Graph")),"."),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"public Graph filter(Graph graph);")),(0,n.kt)("p",null,"Here is a example of a complex filter. It removes the 50% edges with the lowest weight."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"public Graph filter(Graph graph) {\n int edgeCount = graph.getEdgeCount();\n edgeCount /= 2;\n \n Edge[] edges = graph.getEdges().toArray();\n Arrays.sort(edges, new Comparator<Edge>() {\n public int compare(Edge o1, Edge o2) {\n return Float.compare(o1.getWeight(), o2.getWeight());\n }\n });\n \n for (int i = 0; i < edgeCount; i++) {\n Edge edge = edges[i];\n graph.removeEdge(edge);\n }\n return graph;\n}\n")),(0,n.kt)("p",null,"It uses the ",(0,n.kt)("inlineCode",{parentName:"p"},"removeEdge()")," method from the ",(0,n.kt)("inlineCode",{parentName:"p"},"Graph")," API and returns the graph it received."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Can a filter also add elements?"),"\nYes, as far as they are part of the main view as well.\nAs as exemple, here is how the NOT operator works:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"GraphView graphView = graph.getView();\nGraph mainGraph = graph.getView().getGraphModel().getGraph();\nfor (Node n : mainGraph.getNodes().toArray()) {\n if (n.getNodeData().getNode(graphView.getViewId()) == null) {\n //The node n is not in graph\n graph.addNode(n);\n } else {\n //The node n is in graph\n graph.removeNode(n);\n }\n}\n")),(0,n.kt)("p",null,"It is possible to find the graph model from the view object. Then the ",(0,n.kt)("inlineCode",{parentName:"p"},"n.getNodeData().getNode(graphView.getViewId())")," line gets the same node in another view. The ",(0,n.kt)("inlineCode",{parentName:"p"},"NodeData")," is common at all views and maintains a list of views where the node is."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Can the complex filter returns a different graph view?"),"\nIt's possible yes, but a use-case needing this is not obvious to find. The ",(0,n.kt)("inlineCode",{parentName:"p"},"GraphModel.newView()")," is the method that duplicates the complete structure."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Can filters work with Hierarchical graph?"),"\nYes, the view copy is copying the complete hierarchy tree.\nJust cast the received graph in ",(0,n.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/graph/api/HierarchicalGraph.html"},(0,n.kt)("inlineCode",{parentName:"a"},"HierarchicalGraph")),"."),(0,n.kt)("h3",{id:"finish-the-builder"},"Finish the builder"),(0,n.kt)("p",null,"In the builder, return a new instance of your filter in the ",(0,n.kt)("inlineCode",{parentName:"p"},"getFilter()")," method."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"@Override\npublic Filter getFilter() {\n return new MyFilter();\n}\n")),(0,n.kt)("h3",{id:"properties"},"Properties"),(0,n.kt)("p",null,"It's very likely your filter will need to define properties, for instance a threshold or a pattern. In the case your filter has a user interface, the Filters API implementation has a system to automatically refresh the filter when a property value is changed. But for that it needs to be aware of these properties. That's why ",(0,n.kt)("inlineCode",{parentName:"p"},"Filter")," interface has a ",(0,n.kt)("inlineCode",{parentName:"p"},"getProperties()")," method."),(0,n.kt)("p",null,"If your filter doesn't have any user interface, it is therefore not necessary to return properties. Otherwise, it is mandatory.\nBelow is how to define a simple ",(0,n.kt)("inlineCode",{parentName:"p"},"useRegex")," boolean property:"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},'FilterProperty p = FilterProperty.createProperty(this, Boolean.class, "useRegex");')),(0,n.kt)("p",null,"As it uses introspection to get and set the value, your class simply needs proper getters and setters. As a result that is how the method id filled:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'public FilterProperty[] getProperties() {\n return new FilterProperty[]{\n FilterProperty.createProperty(this, Boolean.class, "useRegex")\n };\n }\n \n public boolean isUseRegex() {\n return useRegex;\n }\n \n public void setUseRegex(boolean useRegex) {\n this.useRegex = useRegex;\n }\n')),(0,n.kt)("p",null,"When the ",(0,n.kt)("inlineCode",{parentName:"p"},"useRegex")," value will be changed (through a checkbox for example), the system will be notified and re-execute the filter."),(0,n.kt)("h3",{id:"provide-a-ui"},"Provide a UI"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"getPanel()")," method in ",(0,n.kt)("em",{parentName:"p"},"MyFilterBuilder")," can return a user interface for the filter.\nOne can find existing filters user interface code in the ",(0,n.kt)("inlineCode",{parentName:"p"},"FiltersPluginUI")," module.\nThe panel is needed to configure a ",(0,n.kt)("inlineCode",{parentName:"p"},"Filter")," instance, already created. That's why the ",(0,n.kt)("inlineCode",{parentName:"p"},"getPanel()")," method gives the ",(0,n.kt)("inlineCode",{parentName:"p"},"Filter"),". Cast this filter to ",(0,n.kt)("em",{parentName:"p"},"MyFilter"),", it cannot be anything else and configure settings.\nWhen settings are modified, use properties to set the new value. Below is an example of a simple panel, with a checkbox to set the ",(0,n.kt)("inlineCode",{parentName:"p"},"useRegex")," property which we defined earlier."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'public class MyFilterPanel extends javax.swing.JPanel implements ItemListener {\n \n private MyFilter filter;\n private javax.swing.JCheckBox regexCheckbox;\n \n public MyFilterPanel(MyFilter filter) {\n this.filter = filter;\n \n regexCheckbox = new javax.swing.JCheckBox("Use Regex");\n add(regexCheckbox);\n \n regexCheckbox.addItemListener(this);\n }\n \n public void itemStateChanged(ItemEvent e) {\n FilterProperty useRegex = filter.getProperties()[0];\n useRegex.setValue(regexCheckbox.isSelected());\n }\n}\n')),(0,n.kt)("p",null,"It is important to set the value to the ",(0,n.kt)("inlineCode",{parentName:"p"},"FilterProperty"),", not to ",(0,n.kt)("em",{parentName:"p"},"MyFilter")," directly."),(0,n.kt)("h2",{id:"appendix"},"Appendix"),(0,n.kt)("h3",{id:"create-a-categorybuilder"},"Create a CategoryBuilder"),(0,n.kt)("p",null,"Category builders are typically designed to build a filter that work on Attributes. For example, the ",(0,n.kt)("inlineCode",{parentName:"p"},"AttributeRangeFilter")," works with all attribute columns. That means a ",(0,n.kt)("inlineCode",{parentName:"p"},"FilterBuilder")," has to be created for each column, under a category (e.g. a folder).\nThe following example shows how several ",(0,n.kt)("inlineCode",{parentName:"p"},"AttributeRangeFilterBuilder")," (which implements ",(0,n.kt)("inlineCode",{parentName:"p"},"FilterBuilder"),") are created, one per attribute column.\nThe ",(0,n.kt)("inlineCode",{parentName:"p"},"AttributeUtils")," helps to know if a column is a numerical one."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = CategoryBuilder.class)\npublic class AttributeRangeBuilder implements CategoryBuilder {\n \n public Category getCategory() {\n return new Category(\"Range\", null, FilterLibrary.ATTRIBUTES); //The 'Range' folder will be in the 'Attributes' folder\n }\n \n public FilterBuilder[] getBuilders() {\n List<FilterBuilder> builders = new ArrayList<FilterBuilder>();\n AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel();\n for (AttributeColumn c : am.getNodeTable().getColumns()) {\n if (AttributeUtils.getDefault().isNumberColumn(c) || AttributeUtils.getDefault().isDynamicNumberColumn(c)) {\n AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c);\n builders.add(b);\n }\n }\n for (AttributeColumn c : am.getEdgeTable().getColumns()) {\n if (AttributeUtils.getDefault().isNumberColumn(c) || AttributeUtils.getDefault().isDynamicNumberColumn(c)) {\n AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c);\n builders.add(b);\n }\n }\n return builders.toArray(new FilterBuilder[0]);\n }\n}\n")),(0,n.kt)("h3",{id:"provide-an-icon"},"Provide an icon"),(0,n.kt)("p",null,"Simply return an icon in the ",(0,n.kt)("inlineCode",{parentName:"p"},"FilterBuilder")," implementation."),(0,n.kt)("h3",{id:"custom-properties"},"Custom Properties"),(0,n.kt)("p",null,"Properties natively supports all Java types, as well as Range and ",(0,n.kt)("inlineCode",{parentName:"p"},"AttributeColumn"),". For other types you may have to register a property editor to guarantee serialization to work.\nSerialization is used to write and read properties values, when a Gephi project is saved.\nImplement a property editor class and register it:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Create a new class that extends ",(0,n.kt)("inlineCode",{parentName:"li"},"java.beans.PropertyEditorSupport")," and fill ",(0,n.kt)("inlineCode",{parentName:"li"},"getAstext()")," and ",(0,n.kt)("inlineCode",{parentName:"li"},"setAsText()")," methods."),(0,n.kt)("li",{parentName:"ul"},"Register this editor by doing ",(0,n.kt)("inlineCode",{parentName:"li"},"java.beans.PropertyEditorManager.registerEditor()")," method.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/39879d55.f1166193.js b/assets/js/39879d55.f1166193.js new file mode 100644 index 0000000..37230a1 --- /dev/null +++ b/assets/js/39879d55.f1166193.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[8749],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),p=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,c=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,y=d["".concat(c,".").concat(m)]||d[m]||u[m]||l;return n?o.createElement(y,i(i({ref:t},s),{},{components:n})):o.createElement(y,i({ref:t},s))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=d;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:r,i[1]=a;for(var p=2;p<l;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}d.displayName="MDXCreateElement"},492:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var o=n(7462),r=(n(7294),n(3905));const l={id:"code_style",title:"Code Style",sidebar_position:3,tags:["Code Style","Development"]},i=void 0,a={unversionedId:"Developer_Documentation/code_style",id:"Developer_Documentation/code_style",title:"Code Style",description:"The source code uses the CheckStyle tool to keep the code style consistent.",source:"@site/docs/Developer_Documentation/Code_Style.md",sourceDirName:"Developer_Documentation",slug:"/Developer_Documentation/code_style",permalink:"/Developer_Documentation/code_style",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Developer_Documentation/Code_Style.md",tags:[{label:"Code Style",permalink:"/tags/code-style"},{label:"Development",permalink:"/tags/development"}],version:"current",sidebarPosition:3,frontMatter:{id:"code_style",title:"Code Style",sidebar_position:3,tags:["Code Style","Development"]},sidebar:"tutorialSidebar",previous:{title:"How to build Gephi",permalink:"/Developer_Documentation/how_to_build_gephi"},next:{title:"Localization",permalink:"/Developer_Documentation/localization"}},c={},p=[{value:"IntelliJ Setup",id:"intellij-setup",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The source code uses the ",(0,r.kt)("a",{parentName:"p",href:"https://checkstyle.sourceforge.io/"},"CheckStyle")," tool to keep the code style consistent."),(0,r.kt)("p",null,"In addition, we check for code style when building the project using the ",(0,r.kt)("a",{parentName:"p",href:"http://maven.apache.org/plugins/maven-checkstyle-plugin/"},"Maven CheckStyle Plugin"),". A pull request without proper code style would fail to build."),(0,r.kt)("h3",{id:"intellij-setup"},"IntelliJ Setup"),(0,r.kt)("p",null,"On IntelliJ follow these steps to configure CheckStyle:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Install the ",(0,r.kt)("a",{parentName:"li",href:"https://plugins.jetbrains.com/plugin/1065-checkstyle-idea"},"CheckStyle plugin")),(0,r.kt)("li",{parentName:"ol"},"Open ",(0,r.kt)("inlineCode",{parentName:"li"},"Preferences/Settings")," and go to ",(0,r.kt)("inlineCode",{parentName:"li"},"Editor > Code Style"),"."),(0,r.kt)("li",{parentName:"ol"},"Select ",(0,r.kt)("inlineCode",{parentName:"li"},"Project")," as ",(0,r.kt)("inlineCode",{parentName:"li"},"Scheme")," and click the settings icon next to it."),(0,r.kt)("li",{parentName:"ol"},"Select ",(0,r.kt)("inlineCode",{parentName:"li"},"Import Scheme > CheckStyle Configuration")," and locate the ",(0,r.kt)("inlineCode",{parentName:"li"},"checkstyle.xml")," file at the root of Gephi's repository.")),(0,r.kt)("p",null,"You're done. You can now use the built-in ",(0,r.kt)("strong",{parentName:"p"},"Code > Reformat Code")," tool. The resulting code style will match what is on the Gephi repository."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3cbef51b.4703d362.js b/assets/js/3cbef51b.4703d362.js new file mode 100644 index 0000000..23d70bd --- /dev/null +++ b/assets/js/3cbef51b.4703d362.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[9041],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=u(r),f=o,m=d["".concat(l,".").concat(f)]||d[f]||s[f]||i;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var u=2;u<i;u++)a[u]=r[u];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},1549:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>s,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={id:"index",title:"Introduction",sidebar_position:1,slug:"/"},a=void 0,c={unversionedId:"User_Manual/index",id:"User_Manual/index",title:"Introduction",description:"Welcome to the official Gephi documentation resource.",source:"@site/docs/User_Manual/index.md",sourceDirName:"User_Manual",slug:"/",permalink:"/",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"index",title:"Introduction",sidebar_position:1,slug:"/"},sidebar:"tutorialSidebar",next:{title:"Troubleshooting",permalink:"/User_Manual/troubleshooting"}},l={},u=[],p={toc:u};function s(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Welcome to the official Gephi documentation resource."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/41b1d610.68de9936.js b/assets/js/41b1d610.68de9936.js new file mode 100644 index 0000000..9ff82b9 --- /dev/null +++ b/assets/js/41b1d610.68de9936.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[1545],{3905:(e,t,a)=>{a.d(t,{Zo:()=>o,kt:()=>d});var A=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var A=Object.getOwnPropertySymbols(e);t&&(A=A.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,A)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function r(e,t){if(null==e)return{};var a,A,l=function(e,t){if(null==e)return{};var a,A,l={},n=Object.keys(e);for(A=0;A<n.length;A++)a=n[A],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(A=0;A<n.length;A++)a=n[A],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var g=A.createContext({}),s=function(e){var t=A.useContext(g),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},o=function(e){var t=s(e.components);return A.createElement(g.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return A.createElement(A.Fragment,{},t)}},u=A.forwardRef((function(e,t){var a=e.components,l=e.mdxType,n=e.originalType,g=e.parentName,o=r(e,["components","mdxType","originalType","parentName"]),u=s(a),d=l,C=u["".concat(g,".").concat(d)]||u[d]||c[d]||n;return a?A.createElement(C,i(i({ref:t},o),{},{components:a})):A.createElement(C,i({ref:t},o))}));function d(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var n=a.length,i=new Array(n);i[0]=u;var r={};for(var g in t)hasOwnProperty.call(t,g)&&(r[g]=t[g]);r.originalType=e,r.mdxType="string"==typeof e?e:l,i[1]=r;for(var s=2;s<n;s++)i[s]=a[s];return A.createElement.apply(null,i)}return A.createElement.apply(null,a)}u.displayName="MDXCreateElement"},8711:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>g,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>r,toc:()=>s});var A=a(7462),l=(a(7294),a(3905));const n={id:"gui",title:"Graphical User Interface",sidebar_position:3,tags:["GUI","Startup"]},i=void 0,r={unversionedId:"User_Manual/gui",id:"User_Manual/gui",title:"Graphical User Interface",description:"Global visual framework",source:"@site/docs/User_Manual/GUI.md",sourceDirName:"User_Manual",slug:"/User_Manual/gui",permalink:"/User_Manual/gui",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/GUI.md",tags:[{label:"GUI",permalink:"/tags/gui"},{label:"Startup",permalink:"/tags/startup"}],version:"current",sidebarPosition:3,frontMatter:{id:"gui",title:"Graphical User Interface",sidebar_position:3,tags:["GUI","Startup"]},sidebar:"tutorialSidebar",previous:{title:"Vocabulary",permalink:"/User_Manual/vocabulary"},next:{title:"Datasets",permalink:"/User_Manual/datasets"}},g={},s=[{value:"Global visual framework",id:"global-visual-framework",level:2},{value:"Organization",id:"organization",level:3},{value:"Workspaces",id:"workspaces",level:3},{value:"Overview",id:"overview",level:2},{value:"Graph and Tools",id:"graph-and-tools",level:3},{value:"Layout",id:"layout",level:3},{value:"Ranking",id:"ranking",level:3},{value:"Partition",id:"partition",level:3},{value:"Statistics/metrics",id:"statisticsmetrics",level:3},{value:"Filters",id:"filters",level:3},{value:"Timeline",id:"timeline",level:3},{value:"Context",id:"context",level:3},{value:"Edit",id:"edit",level:3},{value:"Data Laboratory",id:"data-laboratory",level:2},{value:"Preview",id:"preview",level:2},{value:"Settings",id:"settings",level:3},{value:"Visualization",id:"visualization",level:3}],o={toc:s};function c(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,A.Z)({},o,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"global-visual-framework"},"Global visual framework"),(0,l.kt)("h3",{id:"organization"},"Organization"),(0,l.kt)("p",null,"Gephi is a flexible desktop application and a visual framework: it does not constrain the user to do some tasks in a predefined way. On the contrary, the user is free to rearrange the environment, move panels, show/hide windows, etc. The GUI is set by default for three task families grouped as Overview, Data Laboratory and Preview."),(0,l.kt)("p",null,"Modes are accessible under the main menu:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"Overview"),": graph manipulation mode."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"Data Laboratory"),": data visualization in tables."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("strong",{parentName:"li"},"Preview"),": visual tuning before vectorial export.")),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(3480).Z,width:"700",height:"20"})),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(6997).Z,width:"480",height:"297"})),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(4482).Z,width:"450",height:"300"})),(0,l.kt)("h3",{id:"workspaces"},"Workspaces"),(0,l.kt)("p",null,'A workspace is a whole environment for exploring one graph. If you want to analyze more graphs simultaneously, you need to create new workspaces. Create, delete and clean workspace data from the Edit menu.\nNote that each new graph import creates a new workspace if you select the "Add full graph" option in the import window. Hence you are still able to work on the first graph later.'),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(3389).Z,width:"450",height:"211"})),(0,l.kt)("h2",{id:"overview"},"Overview"),(0,l.kt)("h3",{id:"graph-and-tools"},"Graph and Tools"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(6332).Z,width:"500",height:"465"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Graph window")," - Graph rendered on the center and tools on the sides."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(8834).Z,width:"159",height:"150"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Select")," Highlight nodes under the cursor."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(9440).Z,width:"160",height:"128"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Edge selection color")," Incoming links are colored differently than outgoing links."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(3820).Z,width:"160",height:"89"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Heatmap")," Set color intensity on a node neighborhood, by the distance."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(5776).Z,width:"160",height:"145"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Multiple select")," Nodes are selected under the rectangle."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(920).Z,width:"160",height:"120"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Shorthest path")," Display the shortest path if exist between two clicked nodes."),(0,l.kt)("h3",{id:"layout"},"Layout"),(0,l.kt)("p",null,"Select an algorithm and set parameters on the fly. Save them into presets."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(1973).Z,width:"247",height:"422"})),(0,l.kt)("h3",{id:"ranking"},"Ranking"),(0,l.kt)("p",null,"Set numerical attributes to distribute node/edge colors, sizes, label colors and label sizes. Right-click on the window to display the ranked list of nodes or edges."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(9161).Z,width:"250",height:"435"})),(0,l.kt)("h3",{id:"partition"},"Partition"),(0,l.kt)("p",null,"Node or edge grouping on attribute or computed metric. A color is assigned to each group, and can be changed by right-clicking on the window."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(1398).Z,width:"242",height:"220"}),"\nGroup List"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(1391).Z,width:"190",height:"220"}),"\nPie chart"),(0,l.kt)("h3",{id:"statisticsmetrics"},"Statistics/metrics"),(0,l.kt)("p",null,"Run metrics and save reports in HTML. Node and edge computed results are available as attributes."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(2527).Z,width:"212",height:"369"})),(0,l.kt)("h3",{id:"filters"},"Filters"),(0,l.kt)("p",null,"A library of filters is available to combine. Drag the filter (e.g., Degree Range) to build the query, and then set the parameters visually. Finally apply the query output to select elements or to filter them. When filtering is activated, changes appear in real time."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(9111).Z,width:"250",height:"477"})),(0,l.kt)("h3",{id:"timeline"},"Timeline"),(0,l.kt)("p",null,"Move left and right cursors to filter the graph on time intervals."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(366).Z,width:"732",height:"68"})),(0,l.kt)("p",null,"The timeline opens automatically when you open a dynamic network. Enable the timeline to set the time interval. Drag the bounds of the interval using your mouse."),(0,l.kt)("h3",{id:"context"},"Context"),(0,l.kt)("p",null,"Display the number of nodes and edges, the type of the graph and the percentage of visible nodes."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(3117).Z,width:"180",height:"116"})),(0,l.kt)("h3",{id:"edit"},"Edit"),(0,l.kt)("p",null,"View and edit the attributes of a selected node."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(2515).Z,width:"250",height:"244"})),(0,l.kt)("h2",{id:"data-laboratory"},"Data Laboratory"),(0,l.kt)("p",null,"Show node and edge attributes in a table, which also allows for dynamic regexp filtering."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(6948).Z,width:"1215",height:"528"})),(0,l.kt)("h2",{id:"preview"},"Preview"),(0,l.kt)("h3",{id:"settings"},"Settings"),(0,l.kt)("p",null,"Customizable visuals for vectorial export, which may be saved as presets."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(6142).Z,width:"250",height:"629"})),(0,l.kt)("h3",{id:"visualization"},"Visualization"),(0,l.kt)("p",null,"Fine tuning on nodes, edges and labels rendering."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"image",src:a(3706).Z,width:"500",height:"378"})))}c.isMDXComponent=!0},3480:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,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"},6997:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/01_image-efff16c231cfbb0f96dcabeb32f405c9.png"},4482:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/02_image-d2fc347511cf5a068e5428b3f347b45b.png"},3389:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/03_image-4b35fd1a55548474db5b243a02b932ed.png"},6332:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/04_image-b55549884bd4e8501a42f4f78c53b7f3.png"},8834:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/05_image-069c28516523c7498f8940d06e9796aa.png"},9440:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,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"},3820:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/07_image-33280bf416fb7baa5eea795e73c40274.png"},5776:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/08_image-929bfbbb6b20b25c5bc780f179776905.png"},920:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAMAAABCfAldAAACl1BMVEVZWVlvb290dHR2dnZ5eXl7e3uBgYGCb2+DT0+GQ0OGhoaHh4eIiIiNjY2Ojo6QSEiSkpKUlJSWS0uYmJiZS0uZmZmampqbm5udnZ2enp6goKCioaGioqKjnZ2jo6OkS0unp6epqamrq6utV1etra2uRUWurq6vU1OwS0uxsbGzs7O1tbW3bm68vLy9h4e9vb2+W1u+vr6/v7/BwcHCwsLDw8PEXl7FYmLFxcXJycnLy8vMjo7MzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXWlpbW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7fqKjf39/goKDg4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6OjpcXHp6enqcnLq6urrZmbr6+vs7Ozt7e3u7u7vd3fv7+/w8PDx8fHy8vLz6urz8vLz8/P09PT1bW3139/17e319fX29vb37+/39/f47+/48vL48/P49vb4+Pj4+fn5hYX5qKj57+/58PD58fH58/P59vb59/f5+Pj5+fn5+vr6nZ364eH64uL65OT66en66ur67Oz67u768PD68/P69PT69/f6+Pj6+fn6+vr6+/v7fX37oqL72dn74+P75OT75eX76en76ur77u777+/78vL78/P79PT79fX79vb7+Pj7+fn7+vr7+/v7/Pz8fX38goL8jY38lZX8l5f84uL84+P85OT85eX85ub85+f86en86ur86+v87+/88PD89PT8+Pj8+/v8/Pz8/f39hIT9hob9ior9ysr94uL94+P95OT95eX95+f96en96ur96+v97+/98PD98vL99PT99fX99vb9+Pj9+vr9/f3+Z2f+aWn+bW3+mJj+5OT+5eX+5ub++Pj+/v6rX8/hAAAgRUlEQVR42o18aYNkW1ZVKIoDzrM4gTPtPAtq09PzvarKemlZla9eVZqmmRFG3Kv3Kvd6HDYKaLPRRm0Uezk0ytAguhC1ASdsWI60CE7Idvb8GD/scyIjXzVgfamsysyIE+fss/daa699N/WVP/GOv/sXEREhVUVEHP8/aigkSRE1EMEItd/QO18jImjFbP/o7NGtW7FVQUbAzIq5093VXj9qhBSb+gP/iXjHuqNGhKoU/XtRaw0pFIq7pbbv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"},1973:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,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"},9161:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/11_image-dfeb3b59241d1922a1e6c6a5ddafd153.png"},1398:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/12_image-b97cba7df4f0de4edcb7761481f34068.png"},1391:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/13_image-dea933e084421a11318b8f6d02c6ed32.png"},2527:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,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"},9111:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/15_image-01b7c96427865518bb75262bd83e1690.png"},366:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,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"},3117:(e,t,a)=>{a.d(t,{Z:()=>A});const A="data:image/png;base64,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"},2515:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/18_image-c060f3d6fd1de5a224b9de2a953a59db.png"},6948:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/19_image-a4893e8503dca1b7ebf695755f93db0b.png"},6142:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/20_image-c99cc7e95b49b13fa0cd6c1935451987.png"},3706:(e,t,a)=>{a.d(t,{Z:()=>A});const A=a.p+"assets/images/21_image-ef3430f74197ecaf39901bb7854ead8c.png"}}]); \ No newline at end of file diff --git a/assets/js/45312050.53d530fb.js b/assets/js/45312050.53d530fb.js new file mode 100644 index 0000000..6a6c3bc --- /dev/null +++ b/assets/js/45312050.53d530fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[7977],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>c});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},m=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,p=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=s(r),c=i,h=u["".concat(p,".").concat(c)]||u[c]||d[c]||o;return r?n.createElement(h,a(a({ref:t},m),{},{components:r})):n.createElement(h,a({ref:t},m))}));function c(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:i,a[1]=l;for(var s=2;s<o;s++)a[s]=r[s];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}u.displayName="MDXCreateElement"},9128:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const o={id:"import",title:"Import",sidebar_position:5},a=void 0,l={unversionedId:"Plugins/import",id:"Plugins/import",title:"Import",description:"This HowTo shows, in about 15 minutes how to create a new importer in Gephi. Importers push data from files, databases or external datasources to a Container. The role of the container is to host all data collected by importers (i.e. nodes, edges and attributes). This HowTo is focused on file importers, but the procedure is slightly similar for databases or spigots.",source:"@site/docs/Plugins/Import.md",sourceDirName:"Plugins",slug:"/Plugins/import",permalink:"/Plugins/import",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Import.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{id:"import",title:"Import",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Statistics",permalink:"/Plugins/statistics"},next:{title:"Spigot importer with Wizard",permalink:"/Plugins/Spigot_importer_with_Wizard"}},p={},s=[{value:"Create a new Importer",id:"create-a-new-importer",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create FileImporterBuilder",id:"create-fileimporterbuilder",level:3},{value:"Create FileImporter",id:"create-fileimporter",level:3},{value:"Finish the builder",id:"finish-the-builder",level:3},{value:"With settings UI",id:"with-settings-ui",level:2},{value:"Create MyImporterUI",id:"create-myimporterui",level:3},{value:"Register the UI",id:"register-the-ui",level:3},{value:"Advices",id:"advices",level:2},{value:"How to write a text file importer",id:"how-to-write-a-text-file-importer",level:3},{value:"How to write an XML file importer",id:"how-to-write-an-xml-file-importer",level:3},{value:"How to handle errors and exceptions",id:"how-to-handle-errors-and-exceptions",level:3}],m={toc:s};function d(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,n.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This HowTo shows, in about 15 minutes how to create a new importer in Gephi. Importers push data from files, databases or external datasources to a ",(0,i.kt)("inlineCode",{parentName:"p"},"Container"),". The role of the container is to host all data collected by importers (i.e. nodes, edges and attributes). This HowTo is focused on file importers, but the procedure is slightly similar for databases or spigots."),(0,i.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,i.kt)("em",{parentName:"p"},"MyImporter"),", you can start this tutorial."),(0,i.kt)("p",null,"One can find file importer examples in the Gephi ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/ImportPlugin/src/main"},"source code"),"."),(0,i.kt)("h2",{id:"create-a-new-importer"},"Create a new Importer"),(0,i.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"ImportAPI"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTaskAPI"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"FileSystemAPI"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"UtilitiesAPI")," and Lookup modules as dependencies for your plugin module ",(0,i.kt)("em",{parentName:"p"},"MyImport"),". See [","[How To Set Module Dependencies]","]."),(0,i.kt)("h3",{id:"create-fileimporterbuilder"},"Create FileImporterBuilder"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ImporterBuilder")," is a factory class for building the important instance, all Importers should have their own builder."),(0,i.kt)("li",{parentName:"ul"},"Create a new builder class, for instance ",(0,i.kt)("em",{parentName:"li"},"MyImporterBuilder")," that implements ",(0,i.kt)("inlineCode",{parentName:"li"},"FileImporterBuilder"),"."),(0,i.kt)("li",{parentName:"ul"},"Fill the ",(0,i.kt)("inlineCode",{parentName:"li"},"getFileTypes()")," and ",(0,i.kt)("inlineCode",{parentName:"li"},"getName()")," methods like below, for a single file format supported named ",(0,i.kt)("em",{parentName:"li"},"foo"),".")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public String getName() {\n return "foo";\n}\n \npublic FileType[] getFileTypes() {\n return new FileType[]{new FileType(".foo", "Foo files")};\n}\n')),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your builder class. Add the following line before ",(0,i.kt)("em",{parentName:"p"},"MyImporterBuilder")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = FileImporterBuilder.class)\npublic class MyImporterBuilder implements FileImporterBuilder {\n...\n")),(0,i.kt)("h3",{id:"create-fileimporter"},"Create FileImporter"),(0,i.kt)("p",null,"The importer is where the job will be done. Create a new importer class, for instance ",(0,i.kt)("em",{parentName:"p"},"MyImporter")," that implements ",(0,i.kt)("inlineCode",{parentName:"p"},"FileImporter"),"."),(0,i.kt)("p",null,"Notice the ",(0,i.kt)("inlineCode",{parentName:"p"},"setReader()")," method. That means you will work with a reader instead directly with files. The system is responsible of setting the reader before the importer you're developing will be executed."),(0,i.kt)("p",null,"Add also ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTask")," interface to your class, in order you will be able to use progress and cancel management.\nYour ",(0,i.kt)("em",{parentName:"p"},"MyImporter")," would look like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public class MyImporter implements FileImporter, LongTask {\n \n private Reader reader;\n private ContainerLoader container;\n private Report report;\n private ProgressTicket progressTicket;\n private boolean cancel = false;\n \n public void setReader(Reader reader) {\n this.reader = reader;\n }\n \n public boolean execute(ContainerLoader loader) {\n this.container = loader;\n this.report = new Report();\n //Import\n return !cancel;\n }\n \n public ContainerLoader getContainer() {\n return container;\n }\n \n public Report getReport() {\n return report;\n }\n \n public boolean cancel() {\n cancel = true;\n return true;\n }\n \n public void setProgressTicket(ProgressTicket progressTicket) {\n this.progressTicket = progressTicket;\n }\n}\n")),(0,i.kt)("p",null,"The infrastructure is set, the container for pushing data, the report for pushing logs and errors, and the progress management."),(0,i.kt)("h3",{id:"finish-the-builder"},"Finish the builder"),(0,i.kt)("p",null,"Go back to the ",(0,i.kt)("em",{parentName:"p"},"MyImporterBuilder")," and complete ",(0,i.kt)("inlineCode",{parentName:"p"},"buildImporter()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"isMatchingImporter()")," methods:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public FileImporter buildImporter() {\n return new MyImporter();\n}\n \npublic boolean isMatchingImporter(FileObject fileObject) {\n return fileObject.getExt().equalsIgnoreCase("foo");\n}\n')),(0,i.kt)("h2",{id:"with-settings-ui"},"With settings UI"),(0,i.kt)("p",null,"You can create an ",(0,i.kt)("inlineCode",{parentName:"p"},"ImporterUI")," class for your importer. It is not mandatory and the importer will work normally with default settings."),(0,i.kt)("h3",{id:"create-myimporterui"},"Create MyImporterUI"),(0,i.kt)("p",null,"Create a new ",(0,i.kt)("inlineCode",{parentName:"p"},"ImporterUI")," class, for instance ",(0,i.kt)("em",{parentName:"p"},"MyImporterUI")," that implements ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/importer/spi/ImporterUI.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ImporterUI")),"."),(0,i.kt)("p",null,"Your UI class is responsible of providing the JPanel associated to your importer and set settings value to your ",(0,i.kt)("em",{parentName:"p"},"MyImporter")," instance. The system will ask for a JPanel, show a setting dialog and then call ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()"),". If users validate the settings panel by hitting OK, the ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()")," method is called with update set as true and ask the UI to write the setting values.\nThe sample below will help you:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public class MyImporterUI implements ImporterUI {\n \n private JPanel panel;\n private JCheckBox option;\n private MyImporter importer;\n \n public void setup(Importer importer) {\n this.importer = (MyImporter)importer;\n }\n \n public JPanel getPanel() {\n panel = new JPanel();\n option = new JCheckBox("Option");\n panel.add(option);\n return panel;\n }\n \n public void unsetup(boolean update) {\n if(update) {\n importer.setOption(option.isSelected());\n }\n panel = null;\n importer = null;\n option = null;\n }\n \n public String getDisplayName() {\n return "Importer Foo";\n }\n \n public boolean isUIForImporter(Importer importer) {\n return importer instanceof MyImporter;\n }\n}\n')),(0,i.kt)("p",null,"In the example below, notice the ",(0,i.kt)("inlineCode",{parentName:"p"},"importer.setOption(option.isSelected())")," line. The ",(0,i.kt)("inlineCode",{parentName:"p"},"setOption()")," method doesn't exist in ",(0,i.kt)("em",{parentName:"p"},"MyImporter")," but it shows how to configure it easily."),(0,i.kt)("h3",{id:"register-the-ui"},"Register the UI"),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your UI class. Add the following line before ",(0,i.kt)("em",{parentName:"p"},"MyImporterUI")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = ImporterUI.class)\npublic class MyImporterUIimplements ImporterUI{\n...\n")),(0,i.kt)("h2",{id:"advices"},"Advices"),(0,i.kt)("h3",{id:"how-to-write-a-text-file-importer"},"How to write a text file importer"),(0,i.kt)("p",null,"The best way for text files is to use a ",(0,i.kt)("inlineCode",{parentName:"p"},"LineNumberReader"),".\nOne can get it from the ",(0,i.kt)("inlineCode",{parentName:"p"},"ImportUtils")," class:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"LineNumberReader lineReader = ImportUtils.getTextReader(reader);")),(0,i.kt)("h3",{id:"how-to-write-an-xml-file-importer"},"How to write an XML file importer"),(0,i.kt)("p",null,"XML files can be read with different methods (DOM, SAX, StAX) in Java.\n",(0,i.kt)("a",{parentName:"p",href:"http://www.wikiwand.com/en/StAX"},"StAX")," is combining simplicity and efficiency and should be favored to read XML files:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"XMLStreamReader xmLReader = ImportUtils.getXMLReader(reader);")),(0,i.kt)("p",null,"Thought it is not recommended to use DOM as it's too much memory consuming, here is how to get a Document from the reader:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Document document = ImportUtils.getXMLDocument(reader);")),(0,i.kt)("h3",{id:"how-to-handle-errors-and-exceptions"},"How to handle errors and exceptions"),(0,i.kt)("p",null,"Warnings and errors are generated by importers to let users get feedback about the import process. Data is rarely clean and perfectly formated, thus it's necessary to give a specific error message for each problem. The report present in your importer class is here for that."),(0,i.kt)("p",null,"Similar as classical logging framework, that is how to log a information message:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},'report.logIssue(new Issue("The attribute label has been found", Issue.Level.INFO));')),(0,i.kt)("p",null,"There are four levels: ",(0,i.kt)("strong",{parentName:"p"},"INFO"),", ",(0,i.kt)("strong",{parentName:"p"},"WARNING"),", ",(0,i.kt)("strong",{parentName:"p"},"SEVERE"),", ",(0,i.kt)("strong",{parentName:"p"},"CRITICAL"),". Note that the critical level will stop the import process and throw an exception, so it is reserved if the file cannot be read or the XML is not valid for instance.\nAbout exceptions, it is recommended that you throw ",(0,i.kt)("inlineCode",{parentName:"p"},"RuntimeException")," from your execute method. They will be properly catched and displayed to users in a message box."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"image",src:r(2201).Z,width:"578",height:"421"})))}d.isMDXComponent=!0},2201:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/00_image-00ee9f547367b62e87cec08fc069ff94.png"}}]); \ No newline at end of file diff --git a/assets/js/4972.1da030a1.js b/assets/js/4972.1da030a1.js new file mode 100644 index 0000000..63df58d --- /dev/null +++ b/assets/js/4972.1da030a1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[4972],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),o=n(5999),l=n(1944),r=n(3285);function i(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}}}]); \ No newline at end of file diff --git a/assets/js/53310853.815cc124.js b/assets/js/53310853.815cc124.js new file mode 100644 index 0000000..a6fe019 --- /dev/null +++ b/assets/js/53310853.815cc124.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[2118],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>c});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n,i,a={},r=Object.keys(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=i.createContext({}),u=function(e){var t=i.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=u(e.components);return i.createElement(p.Provider,{value:t},e.children)},g={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),d=u(n),c=a,m=d["".concat(p,".").concat(c)]||d[c]||g[c]||r;return n?i.createElement(m,l(l({ref:t},s),{},{components:n})):i.createElement(m,l({ref:t},s))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=d;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o.mdxType="string"==typeof e?e:a,l[1]=o;for(var u=2;u<r;u++)l[u]=n[u];return i.createElement.apply(null,l)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},450:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var i=n(7462),a=(n(7294),n(3905));const r={id:"Plugin_Quick_Start",title:"Plugin Quick Start",sidebar_position:1},l=void 0,o={unversionedId:"Plugins/Plugin_Quick_Start",id:"Plugins/Plugin_Quick_Start",title:"Plugin Quick Start",description:"THIS PAGE IS OUTDATED, PLEASE CHECK THE README AT https://github.com/gephi/gephi-plugins",source:"@site/docs/Plugins/Plugin_Quick_Start.md",sourceDirName:"Plugins",slug:"/Plugins/Plugin_Quick_Start",permalink:"/Plugins/Plugin_Quick_Start",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Plugin_Quick_Start.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"Plugin_Quick_Start",title:"Plugin Quick Start",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/Plugins/"},next:{title:"De\u0301marrage rapide (FR)",permalink:"/Plugins/de\u0301marrage-rapide-fr"}},p={},u=[{value:"Checkout the gephi-plugins code",id:"checkout-the-gephi-plugins-code",level:2},{value:"Create a plugin",id:"create-a-plugin",level:2},{value:"Brand your plugin",id:"brand-your-plugin",level:2},{value:"Distribute your plugin",id:"distribute-your-plugin",level:2}],s={toc:u};function g(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,i.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"THIS PAGE IS OUTDATED, PLEASE CHECK THE README AT ",(0,a.kt)("a",{parentName:"strong",href:"https://github.com/gephi/gephi-plugins"},"https://github.com/gephi/gephi-plugins"))),(0,a.kt)("p",null,"This HowTo covers how to get started with Gephi plugin development. Make sure you have ",(0,a.kt)("a",{parentName:"p",href:"https://wiki.gephi.org/index.php/Install_Git_and_Set_Up_GitHub"},"Git and GitHub")," set up before starting."),(0,a.kt)("h2",{id:"checkout-the-gephi-plugins-code"},"Checkout the gephi-plugins code"),(0,a.kt)("p",null,"We prepared an out of the box development environment on the gephi-plugins repository on GitHub. Once downloaded it doesn't need anything else to run a development version of Gephi.\nFork the project on GitHUb and clone the repository (replace username with your login):"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"git clone git@github.com:username/gephi-plugins.git")),(0,a.kt)("p",null,"Now you can open the project in ",(0,a.kt)("a",{parentName:"p",href:"http://netbeans.org/"},"Netbeans"),". Gephi development happens in Netbeans because Gephi is based on the awesome ",(0,a.kt)("a",{parentName:"p",href:"http://platform.netbeans.org/"},"Netbeans Platform"),". The gephi-plugins folder is automatically recognized when opening a project in Netbeans. Right click on the project and select ",(0,a.kt)("strong",{parentName:"p"},"Run")," to start Gephi."),(0,a.kt)("p",null,"You can also run Gephi from the command-line using the ",(0,a.kt)("inlineCode",{parentName:"p"},"ant run")," command."),(0,a.kt)("h2",{id:"create-a-plugin"},"Create a plugin"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"In Netbeans, expand the ",(0,a.kt)("strong",{parentName:"li"},"Gephi Plugins")," project and right-click on Modules. Select ",(0,a.kt)("strong",{parentName:"li"},"Add New..."))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Enter the plugin name: ",(0,a.kt)("em",{parentName:"li"},"MyFirstPlugin")," and click ",(0,a.kt)("strong",{parentName:"li"},"Next"),"."),(0,a.kt)("li",{parentName:"ul"},"In the next panel, enter a unique codebase name, for instance ",(0,a.kt)("em",{parentName:"li"},"org.myname.myfirstplugin")," and click ",(0,a.kt)("strong",{parentName:"li"},"Finish"),"."),(0,a.kt)("li",{parentName:"ul"},"In the Netbeans Project tree, you should see now your module ",(0,a.kt)("em",{parentName:"li"},"MyFirstPlugin"),". Expand it to find its Source Package. Here you will place your code.")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(4223).Z,width:"616",height:"450"}),"\nNew module Step 1"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(7710).Z,width:"616",height:"450"}),"\nNew module Step 2"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(7755).Z,width:"223",height:"128"}),"\nNew module in the Projects tree"),(0,a.kt)("p",null,"You created a plugin, which doesn't do anything for the moment. When you build Gephi, your plugin is now fully integrated. It appears in the Plugin Center (Tools > Plugin)."),(0,a.kt)("h2",{id:"brand-your-plugin"},"Brand your plugin"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Right-click on your plugin project ",(0,a.kt)("em",{parentName:"li"},"MyFirstPlugin")," and select ",(0,a.kt)("strong",{parentName:"li"},"Properties"),".")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Select ",(0,a.kt)("strong",{parentName:"li"},"Display")," on the left panel and fill ",(0,a.kt)("strong",{parentName:"li"},"Display Category"),", ",(0,a.kt)("strong",{parentName:"li"},"Short Description")," and ",(0,a.kt)("strong",{parentName:"li"},"Long Description"),"."),(0,a.kt)("li",{parentName:"ul"},"Select ",(0,a.kt)("strong",{parentName:"li"},"Packaging")," on the left panel and fill ",(0,a.kt)("strong",{parentName:"li"},"License"),", ",(0,a.kt)("strong",{parentName:"li"},"Homepage")," (if exists) and ",(0,a.kt)("strong",{parentName:"li"},"Author")," information."),(0,a.kt)("li",{parentName:"ul"},"Click on OK to validate changes.")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(5561).Z,width:"693",height:"471"}),"\nBranding Step 1"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(5157).Z,width:"693",height:"471"}),"\nBranding Step 2"),(0,a.kt)("h2",{id:"distribute-your-plugin"},"Distribute your plugin"),(0,a.kt)("p",null,"When you successfully tested your plugin, it's time to create a release."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Right-click on the project and select ",(0,a.kt)("strong",{parentName:"li"},"Package As")," and then ",(0,a.kt)("strong",{parentName:"li"},"NMBs"),".")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Go to the ",(0,a.kt)("strong",{parentName:"li"},"build")," folder and find the created ",(0,a.kt)("em",{parentName:"li"},"plugin-release.zip")," file. Individual NBM files (one per each module) are packaged in this zip.")),(0,a.kt)("p",null,"Now you can publish you plugin on the ",(0,a.kt)("a",{parentName:"p",href:"https://marketplace.gephi.org"},"Gephi Marketplace"),"."))}g.isMDXComponent=!0},4223:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/00_image-534af93e96d2dc4f71cd330c21d4dd0b.png"},7710:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/01_image-59bffee27488927aea528385585e617a.png"},7755:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/png;base64,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"},5561:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/03_image-2acf785041128db2bafd445155fdc34f.png"},5157:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/04_image-2e1081b8ab029eed237bf7f32ad49207.png"}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.a544b15a.js b/assets/js/55960ee5.a544b15a.js new file mode 100644 index 0000000..37858e5 --- /dev/null +++ b/assets/js/55960ee5.a544b15a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[4121],{8070:e=>{e.exports=JSON.parse('[{"label":"Code Style","permalink":"/tags/code-style","count":1},{"label":"Development","permalink":"/tags/development","count":1},{"label":"GUI","permalink":"/tags/gui","count":1},{"label":"Startup","permalink":"/tags/startup","count":2},{"label":"Video","permalink":"/tags/video","count":2},{"label":"Layout","permalink":"/tags/layout","count":1},{"label":"Cluster","permalink":"/tags/cluster","count":1},{"label":"Troubleshooting","permalink":"/tags/troubleshooting","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/582be2f7.8ecd7469.js b/assets/js/582be2f7.8ecd7469.js new file mode 100644 index 0000000..2b41743 --- /dev/null +++ b/assets/js/582be2f7.8ecd7469.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[4879],{380:e=>{e.exports=JSON.parse('{"label":"Development","permalink":"/tags/development","allTagsPath":"/tags","count":1,"items":[{"id":"Developer_Documentation/code_style","title":"Code Style","description":"The source code uses the CheckStyle tool to keep the code style consistent.","permalink":"/Developer_Documentation/code_style"}]}')}}]); \ No newline at end of file diff --git a/assets/js/582f342d.1a0254c2.js b/assets/js/582f342d.1a0254c2.js new file mode 100644 index 0000000..c06b223 --- /dev/null +++ b/assets/js/582f342d.1a0254c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[688],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=p(n),f=o,m=d["".concat(l,".").concat(f)]||d[f]||s[f]||i;return n?r.createElement(m,a(a({ref:t},u),{},{components:n})):r.createElement(m,a({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var p=2;p<i;p++)a[p]=n[p];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}d.displayName="MDXCreateElement"},3404:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>s,frontMatter:()=>i,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const i={id:"index",title:"Introduction",sidebar_position:1},a=void 0,c={unversionedId:"Developer_Documentation/index",id:"Developer_Documentation/index",title:"Introduction",description:"Intro",source:"@site/docs/Developer_Documentation/index.md",sourceDirName:"Developer_Documentation",slug:"/Developer_Documentation/",permalink:"/Developer_Documentation/",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Developer_Documentation/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"index",title:"Introduction",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Layouts, clusters, and where to find them",permalink:"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them"},next:{title:"Developer Handbook",permalink:"/Developer_Documentation/developer_handbook"}},l={},p=[],u={toc:p};function s(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Intro"))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5a82e0e9.93901e12.js b/assets/js/5a82e0e9.93901e12.js new file mode 100644 index 0000000..0c761b8 --- /dev/null +++ b/assets/js/5a82e0e9.93901e12.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[1579],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var o=a.createContext({}),p=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(o.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,o=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=i,g=d["".concat(o,".").concat(m)]||d[m]||u[m]||r;return n?a.createElement(g,l(l({ref:t},c),{},{components:n})):a.createElement(g,l({ref:t},c))}));function m(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,l=new Array(r);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s.mdxType="string"==typeof e?e:i,l[1]=s;for(var p=2;p<r;p++)l[p]=n[p];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},4584:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(7462),i=(n(7294),n(3905));const r={id:"statistics",title:"Statistics",sidebar_position:4},l=void 0,s={unversionedId:"Plugins/statistics",id:"Plugins/statistics",title:"Statistics",description:"Available statistics",source:"@site/docs/Plugins/Statistics.md",sourceDirName:"Plugins",slug:"/Plugins/statistics",permalink:"/Plugins/statistics",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Statistics.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{id:"statistics",title:"Statistics",sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Layout",permalink:"/Plugins/layout"},next:{title:"Import",permalink:"/Plugins/import"}},o={},p=[{value:"Available statistics",id:"available-statistics",level:2},{value:"Create a new Metric",id:"create-a-new-metric",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create StatisticsBuilder",id:"create-statisticsbuilder",level:3},{value:"Create Statistics",id:"create-statistics",level:3},{value:"Set LongTask",id:"set-longtask",level:3},{value:"Create StatisticsUI",id:"create-statisticsui",level:3},{value:"Implementation help",id:"implementation-help",level:2},{value:"Use Progress",id:"use-progress",level:3},{value:"Lock your algorithm",id:"lock-your-algorithm",level:3},{value:"Write results for each node/edge",id:"write-results-for-each-nodeedge",level:3},{value:"Sample",id:"sample",level:3}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,i.kt)("wrapper",(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"available-statistics"},"Available statistics"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"[","[Average Clustering Coefficient]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Average Path Length]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Betweenness Centrality]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Closeness Centrality]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Connected Components]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Degree]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Degree Power Law]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Diameter]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Eigenvector Centrality]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Graph Density]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[HITS]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[Modularity]","]"),(0,i.kt)("li",{parentName:"ul"},"[","[PageRank]","]")),(0,i.kt)("h2",{id:"create-a-new-metric"},"Create a new Metric"),(0,i.kt)("p",null,"This HowTo shows how to create a new statistic/metric algorithm in Gephi."),(0,i.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,i.kt)("em",{parentName:"p"},"MyMetric"),", you can start this tutorial."),(0,i.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"StatisticsAPI"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphAPI")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"AttributesAPI")," modules as dependencies for your plugin module ",(0,i.kt)("em",{parentName:"p"},"MyMetric"),". See [","[How To Set Module Dependencies]","]. Also add ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTaskAPI")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Lookup"),", which will be used."),(0,i.kt)("h3",{id:"create-statisticsbuilder"},"Create StatisticsBuilder"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Statistics Builder provides information about the metric algorithm and is responsible for creating your Statistics algorithm instances. All metric algorithms should have their own builder."),(0,i.kt)("li",{parentName:"ul"},"Create a new builder class, for instance ",(0,i.kt)("inlineCode",{parentName:"li"},"MyMetricBuilder")," that implements ",(0,i.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/statistics/spi/StatisticsBuilder.html"},(0,i.kt)("inlineCode",{parentName:"a"},"StatisticsBuilder")),"."),(0,i.kt)("li",{parentName:"ul"},"Fill ",(0,i.kt)("inlineCode",{parentName:"li"},"getName()")," method by returning a display name like ",(0,i.kt)("em",{parentName:"li"},"My Metric"),". Leaves other methods untouched for the moment."),(0,i.kt)("li",{parentName:"ul"},"Add ",(0,i.kt)("inlineCode",{parentName:"li"},"@ServiceProvider")," annotation to your builder class. Add the following line before ",(0,i.kt)("em",{parentName:"li"},"MyMetricBuilder")," class definition, as shown below:")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = StatisticsBuilder.class)\npublic class MyMetricBuilder implements StatisticsBuilder {\n...\n")),(0,i.kt)("h3",{id:"create-statistics"},"Create Statistics"),(0,i.kt)("p",null,"Create a new class that implements ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/statistics/spi/Statistics.html"},(0,i.kt)("inlineCode",{parentName:"a"},"Statistics"))," and name it ",(0,i.kt)("em",{parentName:"p"},"MyMetric"),". This is the place the algorithm belongs.\nLocate the ",(0,i.kt)("inlineCode",{parentName:"p"},"execute()")," method, you will add your code here. The ",(0,i.kt)("inlineCode",{parentName:"p"},"getReport()")," method should return plain text or HTML text that describe the algorithm execution. Create a new field"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},' private String report = "";')),(0,i.kt)("p",null,"and return report in ",(0,i.kt)("inlineCode",{parentName:"p"},"getReport()"),". That done, go back to ",(0,i.kt)("inlineCode",{parentName:"p"},"StatisticsBuilder")," and fill remaining methods like above:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public Statistics getStatistics() {\n return new MyMetric();\n}\n\npublic Class<? extends Statistics> getStatisticsClass() {\n return MyMetric.class;\n}\n")),(0,i.kt)("p",null,"Details about how to use ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphModel")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"AttributeModel")," are said in the next section."),(0,i.kt)("h3",{id:"set-longtask"},"Set LongTask"),(0,i.kt)("p",null,"To let your algorithm task be cancelled and its progress watched, implement ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTask")," interface on ",(0,i.kt)("em",{parentName:"p"},"MyMetric"),".\nAdd two fields:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"private boolean cancel = false;\nprivate ProgressTicket progressTicket;\n")),(0,i.kt)("p",null,"and implement new methods:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public boolean cancel() {\n cancel = true;\n return true;\n}\n\npublic void setProgressTicket(ProgressTicket progressTicket) {\n this.progressTicket = progressTicket;\n}\n")),(0,i.kt)("p",null,"Use the cancel field to terminate your algorithm execution properly and return from ",(0,i.kt)("inlineCode",{parentName:"p"},"execute()"),".\nSee [","[HowTo use Progress]","] for more details."),(0,i.kt)("h3",{id:"create-statisticsui"},"Create StatisticsUI"),(0,i.kt)("p",null,"Create a new class that implements ",(0,i.kt)("inlineCode",{parentName:"p"},"StatisticsUI")," and name it ",(0,i.kt)("em",{parentName:"p"},"MyMetricUI"),". The user interfaces is defined here and allows to be automatically added to the ",(0,i.kt)("inlineCode",{parentName:"p"},"Statistics")," module in Gephi.\nAdd ",(0,i.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your UI class. Add the following line before ",(0,i.kt)("em",{parentName:"p"},"MyMetricUI")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = StatisticsUI.class)\npublic class MyMetricUI implements StatisticsUI{\n...\n")),(0,i.kt)("p",null,"First implement description method:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public String getDisplayName() {\n return "My Metric";\n}\n\npublic String getCategory() {\n return StatisticsUI.CATEGORY_NETWORK_OVERVIEW;\n}\n\npublic int getPosition() {\n return 800;\n}\n \n public Class<? extends Statistics> getStatisticsClass() {\n return MyMetric.class;\n }\n')),(0,i.kt)("p",null,"The category is just where you want your metric to be displayed: ",(0,i.kt)("strong",{parentName:"p"},"NODE"),", ",(0,i.kt)("strong",{parentName:"p"},"EDGE")," or ",(0,i.kt)("strong",{parentName:"p"},"NETWORK"),". The position control the order the metric front-end are displayed. Returns a value between 1 and 1000, that indicates the position. Less means upper."),(0,i.kt)("p",null,"Now create a new JPanel for your metric settings panel. Name it ",(0,i.kt)("em",{parentName:"p"},"MyMetricPanel"),". Add setters and getters for all properties users can edit. Let's say the panel gives the choice on the graph type and has ",(0,i.kt)("inlineCode",{parentName:"p"},"isDirected()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"setDirected()")," methods."),(0,i.kt)("p",null,"Now the ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()")," are filled. It follow the injection pattern, an instance of ",(0,i.kt)("em",{parentName:"p"},"MyMetric")," is pushed to let the UI control it."),(0,i.kt)("p",null,"First add fields to store the current metric:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"private MyMetricPanel panel;\nprivate MyMetric myMetric;\n")),(0,i.kt)("p",null,"and fill ",(0,i.kt)("inlineCode",{parentName:"p"},"getSettingsPanel()"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public JPanel getSettingsPanel() {\n panel = new MyMetricPanel();\n return panel;\n}\n\npublic void setup(Statistics statistics) {\n this.myMetric = (MyMetric) statistics;\n if(panel!=null) {\n panel.setDirected(myMetric.isDirected());\n }\n}\n \npublic void unsetup() {\n if(panel!=null) {\n myMetric.setDirected(panel.isDirected());\n }\n panel = null;\n}\n")),(0,i.kt)("p",null,"The final step is the ",(0,i.kt)("inlineCode",{parentName:"p"},"getValue()"),", which returns the result value on the front-end. If your metric doesn't have a single result value, return ",(0,i.kt)("inlineCode",{parentName:"p"},"null"),"."),(0,i.kt)("h2",{id:"implementation-help"},"Implementation help"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"execute()")," method gives both ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphModel")," for getting graph structure and AttributeModel to write results in new attribute columns."),(0,i.kt)("h3",{id:"use-progress"},"Use Progress"),(0,i.kt)("p",null,"If you know how many steps your algorithm is doing, for instance if your algorithm just reads nodes:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"Progress.start(progressTicket, graph.getNodeCount());")),(0,i.kt)("p",null,"and ",(0,i.kt)("inlineCode",{parentName:"p"},"Progress.progress(progressTicket)")," within the loop."),(0,i.kt)("h3",{id:"lock-your-algorithm"},"Lock your algorithm"),(0,i.kt)("p",null,"It's preferable to execute your algorithm in a read lock, in order no other thread can modify the graph while execution. Never return ",(0,i.kt)("inlineCode",{parentName:"p"},"execute()")," with a lock open, see ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/graph/api/Graph.html"},"Graph Locking")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"graph.readLock();\n//Your algorithm\ngraph.readUnlockAll();\n")),(0,i.kt)("h3",{id:"write-results-for-each-nodeedge"},"Write results for each node/edge"),(0,i.kt)("p",null,"It's easy, you create a new column and set row's value for each node. If you want to write an in-degree column, in ",(0,i.kt)("inlineCode",{parentName:"p"},"execute()"),":"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'AttributeTable nodeTable = attributeModel.getNodeTable();\nAttributeColumn inCol = nodeTable.getColumn("indegree");\n \nif (inCol == null) {\n inCol = nodeTable.addColumn("indegree", "In Degree", AttributeType.INT, AttributeOrigin.COMPUTED, 0);\n}\n \nfor (Node n : graph.getNodes()) {\n AttributeRow row = (AttributeRow) n.getNodeData().getAttributes();\n row.setValue(inCol, graph.getInDegree(n));\n}\n')),(0,i.kt)("h3",{id:"sample"},"Sample"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public void execute(GraphModel graphModel, AttributeModel attributeModel) {\n report += "Algorithm started ";\n Graph graph = graphModel.getGraphVisible();\n graph.readLock();\n\n try {\n Progress.start(progressTicket, graph.getNodeCount());\n\n for (Node n : graph.getNodes()) {\n //do something\n Progress.progress(progressTicket);\n if (cancel) {\n break;\n }\n }\n graph.readUnlockAll();\n } catch (Exception e) {\n e.printStackTrace();\n //Unlock graph\n graph.readUnlockAll();\n }\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5ab79cae.1fbc8df0.js b/assets/js/5ab79cae.1fbc8df0.js new file mode 100644 index 0000000..56fd854 --- /dev/null +++ b/assets/js/5ab79cae.1fbc8df0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3252],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>m});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},h=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),c=p(a),m=n,u=c["".concat(l,".").concat(m)]||c[m]||d[m]||i;return a?r.createElement(u,o(o({ref:t},h),{},{components:a})):r.createElement(u,o({ref:t},h))}));function m(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:n,o[1]=s;for(var p=2;p<i;p++)o[p]=a[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,a)}c.displayName="MDXCreateElement"},4579:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const i={id:"datasets",title:"Datasets",sidebar_position:4},o=void 0,s={unversionedId:"User_Manual/datasets",id:"User_Manual/datasets",title:"Datasets",description:"The Gephi sample datasets below are available in various formats (GEXF, GDF, GML, NET, GraphML, DL, DOT). Feel free to add new datasets, but be sure to cite the original authors.",source:"@site/docs/User_Manual/Datasets.md",sourceDirName:"User_Manual",slug:"/User_Manual/datasets",permalink:"/User_Manual/datasets",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Datasets.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{id:"datasets",title:"Datasets",sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Graphical User Interface",permalink:"/User_Manual/gui"},next:{title:"Import CSV Data",permalink:"/User_Manual/Import_CSV_Data"}},l={},p=[{value:"Web and Internet",id:"web-and-internet",level:2},{value:"Social networks",id:"social-networks",level:2},{value:"Biological networks",id:"biological-networks",level:2},{value:"Infrastructure networks",id:"infrastructure-networks",level:2},{value:"Other networks",id:"other-networks",level:2},{value:"Sources",id:"sources",level:2},{value:"Other network data repositories",id:"other-network-data-repositories",level:2}],h={toc:p};function d(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},h,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"The Gephi sample datasets below are available in various formats (GEXF, GDF, GML, NET, GraphML, DL, DOT). Feel free to add new datasets, but be sure to cite the original authors."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Supported graph formats are described ",(0,n.kt)("a",{parentName:"strong",href:"https://gephi.org/users/supported-graph-formats/"},"here"),".")),(0,n.kt)("p",null,"Gephi can open zipped files directly."),(0,n.kt)("h2",{id:"web-and-internet"},"Web and Internet"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/eurosis.gexf.zip"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"EuroSiS web mapping study"),": Mapping interactions between Science in Society actors on the Web of 12 European countries. Original report and data can be found ",(0,n.kt)("a",{parentName:"li",href:"http://www.webatlas.fr/exhibition/eurosis/"},"here"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/internet_routers-22july06.gml.zip"},"GML file"),". ",(0,n.kt)("strong",{parentName:"li"},"Internet"),": a symmetrized snapshot of the structure of the Internet at the level of autonomous systems, reconstructed from BGP tables posted by the ",(0,n.kt)("a",{parentName:"li",href:"http://routeviews.org/"},"University of Oregon Route Views Project"),". This snapshot was created by Mark Newman on July 22, 2006 and was not previously published.")),(0,n.kt)("h2",{id:"social-networks"},"Social networks"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/lesmiserables.gml.zip"},"GML file"),". ",(0,n.kt)("strong",{parentName:"li"},"Les Miserables"),": coappearance weighted network of characters in the novel Les Miserables. D. E. Knuth, The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley, Reading, MA (1993)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/ht2009_15min.gexf.gz"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"Hypertext 2009 dynamic contact network"),": contact network during the Hypertext 2009 conference. Source: ",(0,n.kt)("a",{parentName:"li",href:"http://www.sociopatterns.org/datasets/hypertext-2009-dynamic-contact-network/"},"Sociopatterns.org"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://zenodo.org/record/4612153#.YFIuQi1Xaw4"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"CLASS OF 1880/81"),": friendship network of a German boys' school class from 1880/1881. It's based on the probably first ever primarily collected social network dataset, assembled by the primary school teacher Johannes Delitsch. The data was reanalyzed and compiled for the article: ",(0,n.kt)("a",{parentName:"li",href:"http://www.sciencedirect.com/science/article/pii/S0378873313000865"},"Heidler, R., Gamper, M., Herz, A., E\xdfer, F. (2014): Relationship patterns in the 19th century: The friendship network in a German boys' school class from 1880 to 1881 revisited. Social Networks 13: 1--13."),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/karate.gml.zip"},"GML file"),". ",(0,n.kt)("strong",{parentName:"li"},"Zachary's karate club"),": social network of friendships between 34 members of a karate club at a US university in the 1970s. W. W. Zachary, An information flow model for conflict and fission in small groups, Journal of Anthropological Research 33, 452-473 (1977)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/netscience.gml.zip"},"GML file"),". ",(0,n.kt)("strong",{parentName:"li"},"Coauthorships in network science"),": coauthorship network of scientists working on network theory and experiment, as compiled by M. Newman in May 2006. A figure depicting the largest component of this network can be found here. M. E. J. Newman, Phys. Rev. E 74, 036104 (2006)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/cpan-authors.gexf.zip"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"CPAN authors"),": CPAN Explorer is a visualization project aiming at analyzing the relationships between the developers and the packages of the Perl language, known as the CPAN community. This snapshot was created by Linkfluence in July 2009. This file contains the network of developers, linked when they use the same Perl module. Original data can be found ",(0,n.kt)("a",{parentName:"li",href:"http://cpan-explorer.org/"},"here"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/cpan-distributions.gexf.zip"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"CPAN distributions"),": CPAN Explorer is a visualization project aiming at analyzing the relationships between the developers and the packages of the Perl language, known as the CPAN community. This snapshot was created by Linkfluence in July 2009. This file contains the network of Perl modules dependencies. Orginal data can be found ",(0,n.kt)("a",{parentName:"li",href:"http://cpan-explorer.org/"},"here"),"."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/jazz.net.zip"},"NET file"),". ",(0,n.kt)("strong",{parentName:"li"},"Jazz musicians network"),": List of edges of the network of Jazz musicians. P.Gleiser and L. Danon , Adv. Complex Syst.6, 565 (2003)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://franck.lumberjaph.net/graphs.tgz"},"TGZ file"),". ",(0,n.kt)("strong",{parentName:"li"},"Github open source developers"),": See ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/franckcuny/blog/blob/master/posts/2010-03-25-github-explorer.md/"},"https://github.com/franckcuny/blog/blob/master/posts/2010-03-25-github-explorer.md/")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/OClinks_w.dl.zip"},"DL file"),". ",(0,n.kt)("strong",{parentName:"li"},"Online Social Network")," 1899 nodes - Opsahl, T., Panzarasa, P., 2009. Clustering in weighted networks. Social Networks 31 (2), 155-163"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/hero-social-network.gephi"},"GEPHI file"),". ",(0,n.kt)("strong",{parentName:"li"},"The Marvel Social Network")," Networks of super heroes, constructed by Cesc Rossell\xf3, Ricardo Alberich, and Joe Miro from the University of the Balearic Islands. Collected by ",(0,n.kt)("a",{parentName:"li",href:"http://www.infochimps.com/datasets/marvel-universe-social-graph"},"Infochimps")," and transformed & enhanced by Kai Chang."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/comic-hero-network.gdf.zip"},"GDF file"),". ",(0,n.kt)("strong",{parentName:"li"},"Comic and Hero Network")," Same data as above, but this includes the comics the heroes appear in."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://rankinfo.pkqs.net/twittercrawl.dot.gz"},"DOT file"),". ",(0,n.kt)("strong",{parentName:"li"},"Twitter mentions and retweets")," of some part of the Twitter network. The file is updated from time to time."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://www.sociopatterns.org/datasets/primary-school-cumulative-networks/"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"Contact networks")," in a primary school, SocioPatterns team, 2011."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/mbingenheimer/ChineseBuddhism_SNA"},"GEXF file"),". ",(0,n.kt)("strong",{parentName:"li"},"Historical Social Network of Chinese Buddhism \u6f22\u50b3\u4f5b\u6559\u6b77\u53f2\u793e\u6703\u7db2\u7d61")," 17,000+ persons, 25,000+ connections.")),(0,n.kt)("h2",{id:"biological-networks"},"Biological networks"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/datasets/diseasome.gexf.zip"},"GEXF"),". ",(0,n.kt)("strong",{parentName:"li"},"Diseasome"),": A network of disorders and disease genes linked by known disorder\u2013gene associations, indicating the common genetic origin of many diseases. Genes associated with similar disorders show both higher likelihood of physical interactions between their products and higher expression profiling similarity for their transcripts, supporting the existence of distinct disease-specific functional modules. The original dataset can be found here: The Human Disease Network, Goh K-I, Cusick ME, Valle D, Childs B, Vidal M, Barab\xe1si A-L (2007), Proc Natl Acad Sci USA 104:8685-8690"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/datasets/celegans.gexf.zip"},"GEXF"),". ",(0,n.kt)("strong",{parentName:"li"},"C. Elegans neural network"),": A directed, weighted network representing the neural network of C. Elegans. Data compiled by D. Watts and S. Strogatz and made available on the web here. Please cite D. J. Watts and S. H. Strogatz, Nature 393, 440-442 (1998). Original experimental data taken from J. G. White, E. Southgate, J. N. Thompson, and S. Brenner, Phil. Trans. R. Soc. London 314, 1-340 (1986)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/yeast.gexf.zip"},"GEXF"),". ",(0,n.kt)("strong",{parentName:"li"},"Yeast"),": Protein-Protein interaction network in yeast. Original data can be found ",(0,n.kt)("a",{parentName:"li",href:"http://vlado.fmf.uni-lj.si/pub/networks/data/bio/Yeast/Yeast.htm"},"here"),".")),(0,n.kt)("h2",{id:"infrastructure-networks"},"Infrastructure networks"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/power.gml.zip"},"GML"),". ",(0,n.kt)("strong",{parentName:"li"},"Power grid"),": An undirected, unweighted network representing the topology of the Western States Power Grid of the United States. Data compiled by D. Watts and S. Strogatz and made available on the web here. Please cite D. J. Watts and S. H. Strogatz, Nature 393, 440-442 (1998)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/airlines.graphml.zip"},"GRAPHML"),". ",(0,n.kt)("strong",{parentName:"li"},"Airlines"),": unknown source."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/us-air97.net.zip"},"NET"),". ",(0,n.kt)("strong",{parentName:"li"},"US Air97"),": North American Transportation Atlas Data (NORTAD). Original data can be found ",(0,n.kt)("a",{parentName:"li",href:"http://vlado.fmf.uni-lj.si/pub/networks/pajek/data/gphs.htm"},"here"),".")),(0,n.kt)("h2",{id:"other-networks"},"Other networks"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/codeminer.gexf.zip"},"GEXF"),". ",(0,n.kt)("strong",{parentName:"li"},"Java code"),": Source code structure of a Java program, by S.Heymann & J.Palmier, 2008."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/photoviz-dynamic.gexf.zip"},"GEXF"),". ",(0,n.kt)("strong",{parentName:"li"},"Dynamic Java code"),": Dynamic source code structure of a Java program by evolution of commits on the SVN, by S.Heymann & J.Bilcke, 2008."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/word_adjacencies.gml.zip"},"GML"),". ",(0,n.kt)("strong",{parentName:"li"},"Word adjacencies"),": adjacency network of common adjectives and nouns in the novel David Copperfield by Charles Dickens. Please cite M. E. J. Newman, Phys. Rev. E 74, 036104 (2006)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/wordnet3.net.zip"},"NET"),". ",(0,n.kt)("strong",{parentName:"li"},"Wordnet English dictionary"),": unknown source."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/hex.dot.zip"},"DOT"),". ",(0,n.kt)("strong",{parentName:"li"},"Abstract mesh"),": 331 nodes.")),(0,n.kt)("h2",{id:"sources"},"Sources"),(0,n.kt)("p",null,"Some of the above datasets are from:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://www-personal.umich.edu/~mejn/netdata/"},"Mark Newman")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://deim.urv.cat/~aarenas/data/welcome.htm"},"Alexandre Arenas")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://www.nd.edu/~networks/resources.htm"},"Albert-L\xe1szl\xf3 Barab\xe1si")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://vlado.fmf.uni-lj.si/pub/networks/pajek/data/gphs.htm"},"Vladimir Batagelj and Andrej Mrvar")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://toreopsahl.com/datasets/"},"Tore Opsahl"))),(0,n.kt)("h2",{id:"other-network-data-repositories"},"Other network data repositories"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://cdg.columbia.edu/cdg/datasets"},"Duncan Watts")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://kevinchai.net/datasets/"},"Kevin Chai")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://iv.slis.indiana.edu/db/index.html"},"Indiana University")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://www.trustlet.org/wiki/Trust_network_datasets#Released_datasets"},"Trust networks dataset at trustlet.org")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://cfinder.org/data"},"Data sets at CFinder.org")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://snap.stanford.edu/data"},"SNAP data")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://networkdata.ics.uci.edu/"},"UC Irvine Network Data Repository")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://topology-zoo.org/"},"The Internet Topology Zoo")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"http://webscope.sandbox.yahoo.com/catalog.php?datatype=g"},"Yahoo! Graph Datasets"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6154b2f8.1456f3bf.js b/assets/js/6154b2f8.1456f3bf.js new file mode 100644 index 0000000..eaa907d --- /dev/null +++ b/assets/js/6154b2f8.1456f3bf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[7327],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>c});var a=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,i=function(e,t){if(null==e)return{};var n,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=a.createContext({}),d=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},A=a.forwardRef((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),A=d(n),c=i,u=A["".concat(s,".").concat(c)]||A[c]||g[c]||r;return n?a.createElement(u,o(o({ref:t},p),{},{components:n})):a.createElement(u,o({ref:t},p))}));function c(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=A;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,o[1]=l;for(var d=2;d<r;d++)o[d]=n[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}A.displayName="MDXCreateElement"},1488:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var a=n(7462),i=(n(7294),n(3905));const r={id:"Import_Dynamic_Data",title:"Import Dynamic Data",sidebar_position:6},o=void 0,l={unversionedId:"User_Manual/Import_Dynamic_Data",id:"User_Manual/Import_Dynamic_Data",title:"Import Dynamic Data",description:"Longitudinal (also called dynamic) networks are simply networks that evolve chronologically. If you imagine the network of your friends, the number of nodes, connections and attribute values grow and change as time passes. We call these dynamic attributes, because they have values associated with a particular moment.",source:"@site/docs/User_Manual/Import_Dynamic_Data.md",sourceDirName:"User_Manual",slug:"/User_Manual/Import_Dynamic_Data",permalink:"/User_Manual/Import_Dynamic_Data",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Import_Dynamic_Data.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{id:"Import_Dynamic_Data",title:"Import Dynamic Data",sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Import CSV Data",permalink:"/User_Manual/Import_CSV_Data"},next:{title:"First contact with Gephi",permalink:"/User_Manual/Official_Videos/01-first-contact-with-gephi"}},s={},d=[{value:"Import from GEXF File",id:"import-from-gexf-file",level:2},{value:"Basic example",id:"basic-example",level:3},{value:"Dynamic attributes",id:"dynamic-attributes",level:3},{value:"Dynamic weight",id:"dynamic-weight",level:3},{value:"Transform existing column in Time Interval",id:"transform-existing-column-in-time-interval",level:2},{value:"Use Time Frame Import with several static files",id:"use-time-frame-import-with-several-static-files",level:2},{value:"Dataset",id:"dataset",level:3},{value:"Import in Gephi",id:"import-in-gephi",level:3}],p={toc:d};function g(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Longitudinal (also called dynamic) networks are simply networks that evolve chronologically. If you imagine the network of your friends, the number of nodes, connections and attribute values grow and change as time passes. We call these dynamic attributes, because they have values associated with a particular moment."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"intro-longitudinal",src:n(9893).Z,width:"366",height:"255"})),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"Longitudinal Networks")),(0,i.kt)("p",null,"There are two ways to model a longitudinal network, either a collection of networks where each network is a particular point in time (a day, a month, ...) or a slice network where each element has an interval of existence. This can also be described as Discrete vs. Continuous representations of time. Gephi uses the latter, also known as ",(0,i.kt)("strong",{parentName:"p"},"Intervals"),", because it's more flexible."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"For example:")),(0,i.kt)("p",null,"Imagine a network of three nodes for the years 2007, 2008 and 2009. The years these nodes are present can be represented either as distinct points in time or as time intervals (as pictured on the left and right sides of the arrow below, respectively). "),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"importdynamics-intervals",src:n(461).Z,width:"468",height:"95"})),(0,i.kt)("p",null,"The second node, 'n2', is present during all three years and is represented by brackets enclosing the first and last years ","[2007, 2009]",". Gephi automatically includes any dates, such as 2008, within this range. The first node, 'n1', however, is closed with a parenthesis rather than a bracket. This means the node was present in 2008 but ",(0,i.kt)("strong",{parentName:"p"},"NOT")," in 2009."),(0,i.kt)("p",null,"Technically speaking, brackets are used for closed (also known as inclusive) intervals, while parentheses represent open intervals. In other words, dates enclosed within two brackets include both the startpoint and endpoint, whereas dates enclosed within two parentheses begins ",(0,i.kt)("strong",{parentName:"p"},"after")," the startpoint and ends ",(0,i.kt)("strong",{parentName:"p"},"before")," the endpoint. Half-closed intervals that incorporate both, like the [2007, 2009) example above, are also possible."),(0,i.kt)("p",null,"Check the Data Laboratory to see how intervals are created for each node or edge. When the network is longitudinal, a Time Interval column is present that shows when the interval is present in the graph. You can visualize this by clicking the checkbox next to 'Time intervals as graphics' in the Configuration tab of the Data Laboratory. After enabling the timeline, be sure to adjust the size of the window of the sliding filter of your timeline, otherwise you will receive an error stating that Gephi \"cannot animate timeline without an animation interval.\""),(0,i.kt)("h2",{id:"import-from-gexf-file"},"Import from GEXF File"),(0,i.kt)("p",null,"The ",(0,i.kt)("a",{parentName:"p",href:"http://gexf.net/format"},"GEXF")," format includes everything needed to represent longitudinal networks with intervals. You define a single network but add 'start' and 'end' attributes to set when a node/edge appears or vanish."),(0,i.kt)("h3",{id:"basic-example"},"Basic example"),(0,i.kt)("p",null,"Below is our earlier example with three nodes from 2007 to 2009, but we've added edges to complete the example graph."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'<?xml version="1.0" encoding="UTF-8"?>\n<gexf xmlns="http://www.gexf.net/1.1draft"\n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xsi:schemaLocation="http://www.gexf.net/1.1draft\n http://www.gexf.net/1.1draft/gexf.xsd"\n version="1.1">\n <graph mode="dynamic" defaultedgetype="directed">\n <nodes>\n <node id="n1" label="Node 1" start="2007" endopen="2009" />\n <node id="n2" label="Node 2" start="2007" end="2009" />\n <node id="n3" label="Node 3" start="2008" end="2009" />\n </nodes>\n <edges>\n <edge source="n1" target="n2" />\n <edge source="n1" target="n3" start="2008"/>\n <edge source="n3" target="n2" start="2008" endopen="2009"/>\n </edges>\n </graph>\n</gexf>\n')),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Notice the following important points:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"We set ",(0,i.kt)("strong",{parentName:"li"},'mode="dynamic"')," to the ",(0,i.kt)("strong",{parentName:"li"},"graph")," element, that is needed, as GEXF can represent static graphs as well"),(0,i.kt)("li",{parentName:"ul"},"Use ",(0,i.kt)("strong",{parentName:"li"},"start")," and ",(0,i.kt)("strong",{parentName:"li"},"end")," for closed intervals (ex: ","[2007, 2009]",") and ",(0,i.kt)("strong",{parentName:"li"},"startopen")," and ",(0,i.kt)("strong",{parentName:"li"},"endopen")," for open (ex: (2008, 2009))"),(0,i.kt)("li",{parentName:"ul"},"Start and end dates for each element are optional. Leaving these empty will create an ","[-infinity, +infinity]"," interval. If only one bound is defined like for the second edge, it becomes ","[2009, +infinity]",".")),(0,i.kt)("p",null,"The GEXF specifications, including dynamics, are available in the ",(0,i.kt)("a",{parentName:"p",href:"http://gexf.net/format/primer.html"},"GEXF Primer"),"."),(0,i.kt)("h3",{id:"dynamic-attributes"},"Dynamic attributes"),(0,i.kt)("p",null,"The example above described how to represent the network topology over time, where nodes and edges are added or remove. Now let's see how to represent values changing over time, for example 'Price'. Below is the same network with a ",(0,i.kt)("strong",{parentName:"p"},"price")," attribute. The attribute definition in the ",(0,i.kt)("inlineCode",{parentName:"p"},"<attribute> "),"element is the same as it would be for a static GEXF, but the way that values are written has changed."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'<gexf xmlns="http://www.gexf.net/1.1draft"\n xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\n xsi:schemaLocation="http://www.gexf.net/1.1draft\n http://www.gexf.net/1.1draft/gexf.xsd"\n version="1.1">\n <graph mode="dynamic" defaultedgetype="directed">\n <attributes class="node" mode="dynamic">\n <attribute id="price" title="Price" type="float"/>\n </attributes>\n <nodes>\n <node id="n1" label="Node 1" start="2007" endopen="2009" >\n <attvalues>\n <attvalue for="price" value="25.5" start="2007"/>\n <attvalue for="price" value="42.5" start="2008"/>\n </attvalues>\n </node>\n <node id="n2" label="Node 2" start="2007" end="2009" >\n <attvalues>\n <attvalue for="price" value="12" start="2008"/>\n </attvalues>\n </node>\n <node id="n3" label="Node 3" start="2008" end="2009" >\n <attvalues>\n <attvalue for="price" value="40.5" start="2008" end="2009" />\n </attvalues>\n </node>\n </nodes>\n <edges>\n <edge source="n1" target="n2" />\n <edge source="n1" target="n3" start="2008"/>\n <edge source="n3" target="n2" start="2008" endopen="2009"/>\n </edges>\n </graph>\n</gexf>\n')),(0,i.kt)("p",null,"Keep in mind the following "),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"To represent several values over time, the idea is to repeat the same ",(0,i.kt)("strong",{parentName:"li"},"attvalue")," for each period, with the same for but with different values and ",(0,i.kt)("strong",{parentName:"li"},"start/end")),(0,i.kt)("li",{parentName:"ul"},"It's not mandatory to set a value everywhere, in case of missing the default value is used"),(0,i.kt)("li",{parentName:"ul"},"For the node 'n2', the value '12' starts in 2008 and no end period is specified. That gives the interval ","[2008, +infinity]"," which means the value remains '12' in 2009 and after.")),(0,i.kt)("p",null,"The GEXF specifications, including dynamics attributes are available in the ",(0,i.kt)("a",{parentName:"p",href:"https://gephi.org/gexf/format/primer.html"},"GEXF Primer"),"."),(0,i.kt)("h3",{id:"dynamic-weight"},"Dynamic weight"),(0,i.kt)("p",null,"Normally an edge's weight is directly defined in the edge element with a particular value. Defining a dynamic ",(0,i.kt)("strong",{parentName:"p"},"weight")," attribute overrides this value and provides dynamic weight support."),(0,i.kt)("p",null,"The rule is to define an edge attribute with the ",(0,i.kt)("strong",{parentName:"p"},"weight")," keyword for identifier. Then, use multiple 'attvalue' like explained above to set different values over time."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'<attributes class="edge" mode="dynamic">\n <attribute id="weight" title="Weight" type="float"/>\n</attributes>\n')),(0,i.kt)("h2",{id:"transform-existing-column-in-time-interval"},"Transform existing column in Time Interval"),(0,i.kt)("p",null,"Imagine a social network where each node represents a friend of yours and one of the attribute columns is the date you met. In order to transform this column into a dynamic interval take the following steps:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Step 1:")," Click on ",(0,i.kt)("strong",{parentName:"li"},"Merge Columns")," manipulator in the Data Laboratory.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transformlongitudinal-datalab1",src:n(8101).Z,width:"177",height:"133"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Step 2:")," From the available columns on the left, add the column or columns (if you have both a start and end period) you want to use to create the time interval. Then select ",(0,i.kt)("strong",{parentName:"li"},"Create time interval")," from the available merge strategies.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transformlongitudinal-datalab2",src:n(6866).Z,width:"430",height:"407"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Step 3:")," Select which column is the start and which is the end (or leave this blank if no end exists). If the column is numerical (integer, float, double), select ",(0,i.kt)("strong",{parentName:"li"},"Parse numbers"),". If the data are date strings, they can also be parsed and transformed into a time interval. Our 'First Met' column is just the day in the year, just a number.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"transformlongitudinal-datalab3",src:n(8750).Z,width:"321",height:"507"})),(0,i.kt)("h2",{id:"use-time-frame-import-with-several-static-files"},"Use Time Frame Import with several static files"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"NOTE: Outdated for Gephi 0.9.1, this documentation needs to be updated. Check ",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/gephi/gephi/issues/1546"},"https://github.com/gephi/gephi/issues/1546"))),(0,i.kt)("p",null,'This method can create a longitudinal network from a set of static "snaphsots" files. If you have a complete network at different point in time and want to see how both the network and its attributes changes over time this is the right method.'),(0,i.kt)("p",null,"Note that this method implementation is still experimental and may not work in all cases. Be sure to verify the following points:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Your node identifiers are ",(0,i.kt)("strong",{parentName:"li"},"exactly")," the same between the files. If not, at least the labels are (you can choose in the wizard)."),(0,i.kt)("li",{parentName:"ul"},"If GEXF, your network mode is set at ",(0,i.kt)("strong",{parentName:"li"},"static")),(0,i.kt)("li",{parentName:"ul"},"There is no previous graph in the workspace when you start importing Time Frame"),(0,i.kt)("li",{parentName:"ul"},"Attribute columns are the same in all files")),(0,i.kt)("h3",{id:"dataset"},"Dataset"),(0,i.kt)("p",null,"We can take for instance three GEXF files and say each of this file is for a particular year, the network in 2007, in 2008 and in 2009."),(0,i.kt)("p",null,"The ",(0,i.kt)("strong",{parentName:"p"},"static")," network in 2007, notice the price attribute:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'<?xml version="1.0" encoding="UTF-8"?>\n<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">\n <graph mode="static" defaultedgetype="directed">\n <attributes class="node" type="static">\n <attribute id="price" title="Price" type="int"/>\n </attributes>\n <nodes>\n <node id="1" label="Node 1">\n <attvalue for="price" value="12"/>\n </node>\n <node id="2" label="Node 2">\n <attvalue for="price" value="8"/>\n </node>\n <node id="3" label="Node 3">\n <attvalue for="price" value="5"/>\n </node>\n </nodes>\n <edges>\n <edge source="1" target="2" weight="1" />\n <edge source="1" target="3" weight="2" />\n </edges>\n </graph>\n</gexf>\n')),(0,i.kt)("p",null,"The ",(0,i.kt)("strong",{parentName:"p"},"static")," network in 2008, the node '3' disappeared and a node '4' appears. Prices and edge's weight have changed also."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'<?xml version="1.0" encoding="UTF-8"?>\n<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">\n <graph mode="static" defaultedgetype="directed">\n <attributes class="node" type="static">\n <attribute id="price" title="Price" type="int"/>\n </attributes>\n <nodes>\n <node id="1" label="Node 1">\n <attvalue for="price" value="15"/>\n </node>\n <node id="2" label="Node 2">\n <attvalue for="price" value="6"/>\n </node>\n <node id="4" label="Node 4">\n <attvalue for="price" value="8"/>\n </node>\n </nodes>\n <edges>\n <edge source="1" target="2" weight="4" />\n <edge source="1" target="4" weight="3" />\n <edge source="2" target="4" weight="1" />\n </edges>\n </graph>\n</gexf>\n')),(0,i.kt)("p",null,"The ",(0,i.kt)("strong",{parentName:"p"},"static")," network in 2009, the node '3' is back, the node '2' is gone and priced changed again."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-xml"},'<?xml version="1.0" encoding="UTF-8"?>\n<gexf xmlns="http://www.gexf.net/1.1draft" version="1.1">\n <graph mode="static" defaultedgetype="directed">\n <attributes class="node" type="static">\n <attribute id="price" title="Price" type="int"/>\n </attributes>\n <nodes>\n <node id="1" label="Node 1">\n <attvalue for="price" value="10"/>\n </node>\n <node id="3" label="Node 3">\n <attvalue for="price" value="3"/>\n </node>\n <node id="4" label="Node 4">\n <attvalue for="price" value="12"/>\n </node>\n </nodes>\n <edges>\n <edge source="1" target="3" weight="5" />\n </edges>\n </graph>\n</gexf>\n')),(0,i.kt)("h3",{id:"import-in-gephi"},"Import in Gephi"),(0,i.kt)("p",null,"Do the following steps on a clear project to import your dataset:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Step 1:")," Import the first file and select ",(0,i.kt)("strong",{parentName:"li"},"Time Frame")," in the import report, click on OK. That will display a settings dialog.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"importtimeframe1",src:n(2885).Z,width:"581",height:"410"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Step 2:")," Select either a Date or a real number as a time format. Real numbers is the default choice, here we put the year 2007. Click on OK, the file is imported.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"importtimeframe2",src:n(1150).Z,width:"515",height:"425"})),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Step 3:")," You can now do the same for all other files, in a chronological order. For the second file select 2008, then 2009 etc.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"importtimeframe3",src:n(8064).Z,width:"513",height:"426"})),(0,i.kt)("p",null,"The result is a longitudinal network in Gephi where nodes and edges have time intervals according how they were present in the different files. Similarly all attributes are dynamic attributes. The 'Price' attribute in the dataset in a ",(0,i.kt)("strong",{parentName:"p"},"DYNAMIC_INTEGER")," column and each value is associated with its interval. Moreover the edge's weight itself is dynamic."))}g.isMDXComponent=!0},9893:(e,t,n)=>{n.d(t,{Z:()=>a});const a="data:image/png;base64,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"},461:(e,t,n)=>{n.d(t,{Z:()=>a});const a="data:image/png;base64,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"},8101:(e,t,n)=>{n.d(t,{Z:()=>a});const a="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALEAAACFCAIAAACboI4pAAAJE0lEQVR42u2c7U9b1x3H/W7S/oC+2qS8mLZKkQbW1heVOqlrs03q3g3MtKnTtO65L6qqmSF02mhQStGqlaRLCS7JEkiah5UQAiYQCM0DyxSllITY1Ng8hGGCjW2eAobykLDvvde+vsbgGdd2zr18vzq6Oud3vza/77mfe0gUKaZ1ioqXiVtAkQmKTFBkgiITFJmgyARFJigyQZEJikxQZIIiExSZoMgERSYoMkFRZIJKzsRbFBUvnhMUf3dQZIIiExSZoMgERSaonDNR/s5BDg7tIBMcCUzMUlS8yARFJigyQZEJikxQZIIiExSZoMgERSYoMqETrZtMRh1kIn0mmItMkAkyQSbIBJkgE2SCTJAJMkEmyASZ0CETlZWVJSUlr4sk9IOuMr53AiZNMXJOmdhfXn7o0CG/378mktAPukJvGWRCzKQpRs4pE1arNRAIrKysPBRJ6AddobcMMiFm0hQj55QJnFqAVMA9QlfoLYNMCJs0lchkgkyQCTJBJsiE6Eysrq7OiSd0lXEmxEyaSmQyQSbIBJkgE2SCTJAJHTKx3U/d6O1t7u7WjvGAL7/t+R99YsEVc7UOZ3qNZYkJkf+hS99MXLx+PfE/ULo1+emu+t24aotwkokdwcSFa9cer6/v6Vl/8dPHL9x+9Pyt1V/eXWnyrY6GHzU+WPn57YVnuma/e2UGHjgNw4T7/oytccr6j9DvK0O41pyfxlCXuAXDzmWioatr7fFjMFE5vQ4m3g6uXZ1f/U7nHmV0TC/uG5kBE/DAaQwmrt4O/rHSW3kyeKZz1n5zvrY5VFztxcAESxRxCwbYDMLEzDb1r87O5UePlHPiN73hA32BrvE5c/v3fztdjOvl0anS/9zfd3MEHjhn0lKWmEivmf7BwMt/dn7YFGy++fDiv+cu3Jh972Pv+WuzGJhgiSJuwQAbzBmPrAMmzrS3L62tKedExb3Qytoaxrft3/vF1Gu4Kssrn30GD5wGYKLs8L2SQ56m7rmmbunxVzdNHG31y8s5TLBEEbewhA3mncjER5cuLayuKucEmLjldg/6fLubnv1J4Ne4urzert5eMAEPnAZgYs8rHUcv+htvzDZKR8LDilMjDVdnTl8JnewIneoIHjg5/FFnqK49gOWRxgcw70Qm6lta5paX1XMivLyM8XTDMz/0/xRXZQkm4IHTAEw8/dL5hmszymi8PvvX4x5A8M9LkxinOkNYnuqILE+0BWDeiUwcb2qa/uIL7TnhGh//xpn8Zx+8hKtjdFQ5J+CB0wBMPPez1iPnJ859Mo2ToP5y6K0Tg8fbA7WtfgxMsKxrDyrLqrNemHXPxMrKytQ2VdvQEFxaUs+JuaUljF31u3d7n8NVWYIJeOCcSkvoKuNMpJFU0Rvv9Lxa4axvD9pa/Eftk++euX/w47Faux8DEyxR/LBFWv7hgBPmjEfWARM1585NLi5qzwnH2NjXjn1z16gZ1zsjI8o5AQ+cBmDiTr/vhV/1VJwYtzX7aponjtr9fznmBgQYmGCJoq3FB8OLr/TAvBOZOHz69EQ4rJ4T0+EwxlOHv/7UyLdwVZZgAh44DcAEdKGt/8evel571/v3sxPHWiffrvvvy2UDGJhg+d7ZCdyCAba0f4S+mThYVze+sKA9J+6Ojn5l/1eV0TM0pJwT8MBpACYCgYDH42m+1L23wlH4xsQPfucr2usr/psbw7LXhyWKuAUDbDAbgYnQNrX//fcnl5fH5ueTD3jgDKWlLDGRXjN4zF6v1+12O53O/v5+TIaHh+/LGhoaGhgYQBG3UIcN5oxH1gETVTabtaIilQGnAZjIjfTNBN4Gl8vl/H+CB04ysSOYeLIbRCZywURQPGWJiaDAIhNkgkyQCTJBJsgEmTAQE4uLi8PiCV1lnAkxk6YSmUyQCTJBJsgEmdABE4PiKUtMDAosMkEmyASZIBNkwvhMeDrfNJvf7PR4klTIhHGY8ETldneUmk0mc2mH2+2Jl3Qnvp5YyaCyxMRWP07JbSqqVSu1RZvvQ/YkKhPSYy4qkh/1jmNCE1xems1kAlKeMl4RXONeIEXyHiVWtIiUFkXuFNW64z8uW6MYyXVYlJk0EYCJ0lq5O+WQKCrVtroxghxT7j/Z/mzyaumMidgTU6CQHph0gsaerrn08sDGShwT6i35G2Rz5HlrPi5VJBCgWvlHbPY6PhEmOtxye8o8vuFYBG3Mzfcnzp/6SSMQE+FweECWq31ffv6+dhdks5jkWbSi3m1rK9lQUeYbljGzSSuLTfpqyWSzWGzwoCBfBxKErjLOhJo0UWrzSB5pdIsINVvsQJLIA6kpSeQnxgRCadNIYb88ExqD+lMsNgWMyBTbJg4T0kR+kFtFiIsZfXeSR9YrE+pmRJLLads+j4SOELNZJRkTktm04ZHjliVfMsrfYIGUbxOEiQ2VxAhxMV2x3UgSWbdMbHjp1VdAOUxxbFgskTcpobIVE9HXTnvyuOL2UfOeiclEYoQNJ4G6G7GACZF1ycTn4ilLTGSv4f4aC/6wkaXIZEJPTNRYNH/87O8nE2QiR5HJBJkgE2RCNCYWFhacacnRWpyXV9zqcDizIHSVcSbSS5rVmClGJhNkgkyQCR0x4XAcKYz+TavwiEPaHc1K2Sy73apumaZSWJin+CKfiXw8r7i4MPYVgjCRg5ixr9waL7GYuLeZ+voQ2lRQ3RddVheYIsvIDWlTrC3Nf8LV3ifVYxWTXJI+EZ1E6pFvUCrKpzZVlph4IjHlCgpSpbogMtlWZGGYkJOrj027VLbxA3mbNt8suaJ+ZKttFYKJ7MdsuftBgXREbEkDmdhxTETm8nmShAxj/e6I5pTqumMi+zFRKbDaoz9LuqdXJqIvSkTSfsSW0krdC7WcV1Cgu3MiBzGjvzvkz8pwiM7E/Px8n3hCVxlnQsykqUQmE2SCTJAJMkEmhGbCarWOjY2FQqE7Ign9oCv0lkEmxEyaYuScMlFeXl5VVTU+Pj4vktAPukJvGWRCzKQpRs4pE1BZWRnwfF0koR90lUaW5HsnYNIUI+eaCSMpjb0zai4yQSbIBJkgE2SCTJAJMpG5vTPqIBPUlxWZoMgERSYoMkGRCSrT+h8yclCZ0Y8GLQAAAABJRU5ErkJggg=="},6866:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/03_transformlongitudinal-datalab2-edf4f550c9de3f758f608901bf961392.png"},8750:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/04_transformlongitudinal-datalab3-604bc0499cceedcb1f318ef47ba2931e.png"},2885:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/05_importtimeframe1-37ba220376a9359934c8ca8d97b99a37.png"},1150:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/06_importtimeframe2-17e68c40688a1796e04a06e4ce66fbab.png"},8064:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/07_importtimeframe3-df0071f962cbf53f2590d3dd04cd5926.png"}}]); \ No newline at end of file diff --git a/assets/js/633ac33c.e32c12fb.js b/assets/js/633ac33c.e32c12fb.js new file mode 100644 index 0000000..4d90ee9 --- /dev/null +++ b/assets/js/633ac33c.e32c12fb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3445],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>y});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,o,n=function(e,t){if(null==e)return{};var a,o,n={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=o.createContext({}),u=function(e){var t=o.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},s=function(e){var t=u(e.components);return o.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),c=u(a),y=n,m=c["".concat(p,".").concat(y)]||c[y]||d[y]||r;return a?o.createElement(m,i(i({ref:t},s),{},{components:a})):o.createElement(m,i({ref:t},s))}));function y(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=c;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var u=2;u<r;u++)i[u]=a[u];return o.createElement.apply(null,i)}return o.createElement.apply(null,a)}c.displayName="MDXCreateElement"},9209:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var o=a(7462),n=(a(7294),a(3905));const r={id:"layout",title:"Layout",sidebar_position:3},i=void 0,l={unversionedId:"Plugins/layout",id:"Plugins/layout",title:"Layout",description:"Available layouts",source:"@site/docs/Plugins/Layout.md",sourceDirName:"Plugins",slug:"/Plugins/layout",permalink:"/Plugins/layout",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Layout.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{id:"layout",title:"Layout",sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"De\u0301marrage rapide (FR)",permalink:"/Plugins/de\u0301marrage-rapide-fr"},next:{title:"Statistics",permalink:"/Plugins/statistics"}},p={},u=[{value:"Available layouts",id:"available-layouts",level:2},{value:"Create a new Layout",id:"create-a-new-layout",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create LayoutBuilder",id:"create-layoutbuilder",level:3},{value:"Create Layout",id:"create-layout",level:3},{value:"Properties",id:"properties",level:3},{value:"Advanced concepts",id:"advanced-concepts",level:2},{value:"Layout Data",id:"layout-data",level:3},{value:"Custom properties",id:"custom-properties",level:3}],s={toc:u};function d(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"available-layouts"},"Available layouts"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"[","[Force Atlas 2]","]"),(0,n.kt)("li",{parentName:"ul"},"[","[Fruchterman-Reingold]","]"),(0,n.kt)("li",{parentName:"ul"},"[","[OpenOrd]","]"),(0,n.kt)("li",{parentName:"ul"},"[","[YifanHu Multilevel]","]")),(0,n.kt)("h2",{id:"create-a-new-layout"},"Create a new Layout"),(0,n.kt)("p",null,"This How To shows how to create a new layout algorithm in Gephi."),(0,n.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,n.kt)("em",{parentName:"p"},"MyLayout"),", you can start this tutorial."),(0,n.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,n.kt)("p",null,"Add ",(0,n.kt)("inlineCode",{parentName:"p"},"LayoutAPI"),", ",(0,n.kt)("inlineCode",{parentName:"p"},"GraphAPI")," (",(0,n.kt)("inlineCode",{parentName:"p"},"UtilitiesAPI")," for ",(0,n.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," see below and ",(0,n.kt)("inlineCode",{parentName:"p"},"LookupAPI")," since it's almost always useful) modules as dependencies for your plugin module ",(0,n.kt)("em",{parentName:"p"},"MyLayout"),". See [","[How To Set Module Dependencies]","]."),(0,n.kt)("h3",{id:"create-layoutbuilder"},"Create LayoutBuilder"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Layout Builder provides information about the layout algorithm and is responsible for creating your Layout algorithm instances. All Layout algorithms should have their own builder."),(0,n.kt)("li",{parentName:"ul"},"Create a new builder class, for instance ",(0,n.kt)("em",{parentName:"li"},"MyLayoutBuilder")," that implements ",(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/layout/spi/LayoutBuilder.html"},(0,n.kt)("inlineCode",{parentName:"a"},"LayoutBuilder")),"."),(0,n.kt)("li",{parentName:"ul"},"The builder interface is requesting a ",(0,n.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/layout/spi/LayoutUI.html"},(0,n.kt)("inlineCode",{parentName:"a"},"LayoutUI"))," object. Create an inner or anonymous class that implements ",(0,n.kt)("inlineCode",{parentName:"li"},"LayoutUI"),"."),(0,n.kt)("li",{parentName:"ul"},"Add ",(0,n.kt)("inlineCode",{parentName:"li"},"@ServiceProvider")," annotation to your builder class. Add the following line before ",(0,n.kt)("em",{parentName:"li"},"MyLayoutBuilder")," class definition, as shown below:")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"import org.openide.util.lookup.ServiceProvider;\n \n@ServiceProvider(service = LayoutBuilder.class)\npublic class MyLayoutBuilder implements LayoutBuilder {\n...\n")),(0,n.kt)("h3",{id:"create-layout"},"Create Layout"),(0,n.kt)("p",null,"Create a new class that implements ",(0,n.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/layout/spi/Layout.html"},(0,n.kt)("inlineCode",{parentName:"a"},"Layout")),". This is the place the algorithm belongs."),(0,n.kt)("p",null,"Methods ",(0,n.kt)("inlineCode",{parentName:"p"},"canAlgo()"),", ",(0,n.kt)("inlineCode",{parentName:"p"},"initAlgo()"),", ",(0,n.kt)("inlineCode",{parentName:"p"},"goAlgo()")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"endAlgo()")," are the logic of the algorithm. But the algorithm is manipulating a graph, so where is this graph? The graph can be get from the ",(0,n.kt)("inlineCode",{parentName:"p"},"GraphModel"),", which is injected through the ",(0,n.kt)("inlineCode",{parentName:"p"},"setGraphModel()")," method (fill ",(0,n.kt)("inlineCode",{parentName:"p"},"setGraphModel()")," with ",(0,n.kt)("inlineCode",{parentName:"p"},"this.graphModel = graphModel;"),"). The system always sets this graph model before ",(0,n.kt)("inlineCode",{parentName:"p"},"initAlgo()")," is called."),(0,n.kt)("p",null,"Add the graph model as a new private field of your class.\nIn your ",(0,n.kt)("inlineCode",{parentName:"p"},"goAlgo()")," method, add the following code to get the current visible graph:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"graph = graphModel.getHierarchicalGraphVisible();\n")),(0,n.kt)("h3",{id:"properties"},"Properties"),(0,n.kt)("p",null,"Your algorithm may have settings and properties that users may control. To be visible and editable in the Layout UI, properties need to be properly defined."),(0,n.kt)("p",null,"Let's say you have a float speed parameter that you want to expose. That is how to create the appropriate LayoutPropery:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},'LayoutProperty mySpeedProperty = LayoutProperty.createProperty(\n this, \n Float.class,\n "Speed"\n "Category",\n "A short description what is this propery doing and how users may modify it",\n "getSpeed", \n "setSpeed");\n')),(0,n.kt)("p",null,"Note that you need to create proper getter and setter for each property you want to expose."),(0,n.kt)("h2",{id:"advanced-concepts"},"Advanced concepts"),(0,n.kt)("h3",{id:"layout-data"},"Layout Data"),(0,n.kt)("p",null,"A special mechanism is available if you need to store temporary objects in nodes. In the following example, we will create a new type of layout data which stores a dx and dy value."),(0,n.kt)("p",null,"Create a new ",(0,n.kt)("em",{parentName:"p"},"MyLayoutData")," class that implements ",(0,n.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/graph/spi/LayoutData.html"},(0,n.kt)("inlineCode",{parentName:"a"},"LayoutData"))," and add two floats dx and dy.\nHow to init? Place the following code at the beginning of ",(0,n.kt)("inlineCode",{parentName:"p"},"goAlgo()"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-java"},"for (Node n : nodes) {\n if (n.getNodeData().getLayoutData() == null || !(n.getNodeData().getLayoutData() instanceof MyLayoutData)) {\n n.getNodeData().setLayoutData(new MyLayoutData());\n }\n}\n")),(0,n.kt)("p",null,"That ensure you have a layout data object for each of your nodes."),(0,n.kt)("h3",{id:"custom-properties"},"Custom properties"),(0,n.kt)("p",null,"Properties can be basic types like Boolean, Float etc. If you want to expose custom types, for instance date, you can provide a ",(0,n.kt)("inlineCode",{parentName:"p"},"PropertyEditor")," class when building the property."),(0,n.kt)("p",null,"Note that a custom ",(0,n.kt)("inlineCode",{parentName:"p"},"PropertyEditor")," class has been created for ",(0,n.kt)("inlineCode",{parentName:"p"},"AttributeColumn")," in the ",(0,n.kt)("inlineCode",{parentName:"p"},"AttributeColumnPropertyEditor")," module. Add this module as a new dependency."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/67449e3e.c88ec4bd.js b/assets/js/67449e3e.c88ec4bd.js new file mode 100644 index 0000000..1091a7d --- /dev/null +++ b/assets/js/67449e3e.c88ec4bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5551],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)a=i[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(a),m=o,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return a?n.createElement(h,r(r({ref:t},c),{},{components:a})):n.createElement(h,r({ref:t},c))}));function m(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=a.length,r=new Array(i);r[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=a[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},3250:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=a(7462),o=(a(7294),a(3905));const i={id:"Import_CSV_Data",title:"Import CSV Data",sidebar_position:5},r=void 0,s={unversionedId:"User_Manual/Import_CSV_Data",id:"User_Manual/Import_CSV_Data",title:"Import CSV Data",description:"Introduction",source:"@site/docs/User_Manual/Import_CSV_Data.md",sourceDirName:"User_Manual",slug:"/User_Manual/Import_CSV_Data",permalink:"/User_Manual/Import_CSV_Data",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Import_CSV_Data.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{id:"Import_CSV_Data",title:"Import CSV Data",sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Datasets",permalink:"/User_Manual/datasets"},next:{title:"Import Dynamic Data",permalink:"/User_Manual/Import_Dynamic_Data"}},l={},p=[{value:"Introduction",id:"introduction",level:2},{value:"Launching the import CSV wizard and first step",id:"launching-the-import-csv-wizard-and-first-step",level:2},{value:"Last step - Choosing columns details and table specific options",id:"last-step---choosing-columns-details-and-table-specific-options",level:2},{value:"Importing to nodes table",id:"importing-to-nodes-table",level:3},{value:"Importing to edges table",id:"importing-to-edges-table",level:3}],c={toc:p};function d(e){let{components:t,...i}=e;return(0,o.kt)("wrapper",(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"introduction"},"Introduction"),(0,o.kt)("p",null,"This manual shows what steps are necessary to import CSV files into Gephi with data laboratory, which will expect that each row of the file is a node or an edge."),(0,o.kt)("p",null,"Note that the import can be done at any moment, the workspace does not need to be empty. You should know some general aspects of the import process: "),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"You may choose which columns to import. The only exceptions are 'Source' and 'Target' for edges tables, which are mandatory and can't be deselected"),(0,o.kt)("li",{parentName:"ul"},"If a column title already exists in the workspace you will be able to use it but the data type of the column can't be changed, and imported data will be parsed to fit the existing column type"),(0,o.kt)("li",{parentName:"ul"},"Data for each row and column will be parsed to the given/existing column data type when possible. If this is not possible for a given cell, then it will be set to a null value"),(0,o.kt)("li",{parentName:"ul"},"You can choose what table to import the rows to (nodes or edges), but the behaviour and requirements are different. Be aware of what options you have selected before executing the import process")),(0,o.kt)("p",null,"Next we'll learn how to use the import wizard to customize the data to our needs based on the options available. "),(0,o.kt)("h2",{id:"launching-the-import-csv-wizard-and-first-step"},"Launching the import CSV wizard and first step"),(0,o.kt)("p",null,"Start by clicking 'Import CSV' button in Data Laboratory as shown in the picture "),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"launch-import-csv-wizard",src:a(9075).Z,width:"785",height:"225"})),(0,o.kt)("p",null,"Then the import wizard will open and you are presented with some generic, table independent options. "),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"import-csv-step1",src:a(8636).Z,width:"695",height:"537"})),(0,o.kt)("p",null,"In this step you will indicate the format of the CSV file and can preview the resulting table."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"First specify a CSV file that is not empty"),(0,o.kt)("li",{parentName:"ul"},"Then choose the values separator from some common options and the encoding/charset of the file"),(0,o.kt)("li",{parentName:"ul"},"Finally select the table to import the rows and columns of the file. Edges table files require, at minimum, columns labeled 'Source' and 'Target' (which can be case insensitive)")),(0,o.kt)("h2",{id:"last-step---choosing-columns-details-and-table-specific-options"},"Last step - Choosing columns details and table specific options"),(0,o.kt)("p",null,"This final step offers some common options and behaviour descriptions for both nodes tables or edges tables:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"You can mark what columns to use and select their type when they don't exist yet"),(0,o.kt)("li",{parentName:"ul"},"If no node/edge Id column is provided or it is empty for some row, an automatic id will be assigned")),(0,o.kt)("h3",{id:"importing-to-nodes-table"},"Importing to nodes table"),(0,o.kt)("p",null,"When importing to nodes table you can also indicate if you want to update a node's data instead of creating a new node when a node with that id already exists."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"import-csv-step2-nodes",src:a(5984).Z,width:"781",height:"494"})),(0,o.kt)("h3",{id:"importing-to-edges-table"},"Importing to edges table"),(0,o.kt)("p",null,"In case of importing to edges table, the behaviour is a bit different:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"'Source' and 'Target' node Ids are mandatory for all rows"),(0,o.kt)("li",{parentName:"ul"},"Edge type is optional and its default is 'Directed'")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"import-csv-step2-edges",src:a(3413).Z,width:"932",height:"503"})))}d.isMDXComponent=!0},9075:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/00_launch-import-csv-wizard-f877ea5368f61ec86eeeab89737ac8b0.png"},8636:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/01_import-csv-step1-0daf87868b350750e1f6bb206ef5acfe.png"},5984:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/02_import-csv-step2-nodes-dc1ebe30eb3a6b1ec613b5d6471ab607.png"},3413:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/03_import-csv-step2-edges-d32b570f94068e0c9d69d6cb5fef0032.png"}}]); \ No newline at end of file diff --git a/assets/js/6db9f2c2.42bea0a0.js b/assets/js/6db9f2c2.42bea0a0.js new file mode 100644 index 0000000..4d3e096 --- /dev/null +++ b/assets/js/6db9f2c2.42bea0a0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[1970],{370:t=>{t.exports=JSON.parse('{"label":"Video","permalink":"/tags/video","allTagsPath":"/tags","count":2,"items":[{"id":"User_Manual/Official_Videos/01-first-contact-with-gephi","title":"First contact with Gephi","description":"https://www.youtube.com/watch?v=YM37zuURM","permalink":"/User_Manual/Official_Videos/01-first-contact-with-gephi"},{"id":"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","title":"Layouts, clusters, and where to find them","description":"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s","permalink":"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them"}]}')}}]); \ No newline at end of file diff --git a/assets/js/831ba68a.7f1af64f.js b/assets/js/831ba68a.7f1af64f.js new file mode 100644 index 0000000..b34d95a --- /dev/null +++ b/assets/js/831ba68a.7f1af64f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3480],{3905:(e,t,i)=>{i.d(t,{Zo:()=>p,kt:()=>c});var n=i(7294);function o(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function l(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?a(Object(i),!0).forEach((function(t){o(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):a(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function r(e,t){if(null==e)return{};var i,n,o=function(e,t){if(null==e)return{};var i,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||(o[i]=e[i]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)i=a[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var s=n.createContext({}),u=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):l(l({},t),e)),i},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var i=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=r(e,["components","mdxType","originalType","parentName"]),h=u(i),c=o,m=h["".concat(s,".").concat(c)]||h[c]||d[c]||a;return i?n.createElement(m,l(l({ref:t},p),{},{components:i})):n.createElement(m,l({ref:t},p))}));function c(e,t){var i=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=i.length,l=new Array(a);l[0]=h;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r.mdxType="string"==typeof e?e:o,l[1]=r;for(var u=2;u<a;u++)l[u]=i[u];return n.createElement.apply(null,l)}return n.createElement.apply(null,i)}h.displayName="MDXCreateElement"},8472:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>r,toc:()=>u});var n=i(7462),o=(i(7294),i(3905));const a={id:"Build_a_plugin_without_Gephi_source_code",title:"Build a plugin without Gephi source code",sidebar_position:14},l=void 0,r={unversionedId:"Plugins/Build_a_plugin_without_Gephi_source_code",id:"Plugins/Build_a_plugin_without_Gephi_source_code",title:"Build a plugin without Gephi source code",description:"It is possible to build a plugin using only binary installation of Gephi. The principle is to compile the plugin using the Gephi binary installation as a NetBeans platform.",source:"@site/docs/Plugins/Build_a_plugin_without_Gephi_source_code.md",sourceDirName:"Plugins",slug:"/Plugins/Build_a_plugin_without_Gephi_source_code",permalink:"/Plugins/Build_a_plugin_without_Gephi_source_code",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Build_a_plugin_without_Gephi_source_code.md",tags:[],version:"current",sidebarPosition:14,frontMatter:{id:"Build_a_plugin_without_Gephi_source_code",title:"Build a plugin without Gephi source code",sidebar_position:14},sidebar:"tutorialSidebar",previous:{title:"Add a submenu",permalink:"/Plugins/Add_a_submenu"},next:{title:"Update a plugin",permalink:"/Plugins/update-a-plugin"}},s={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Registering Gephi as a NetBeans Platform",id:"registering-gephi-as-a-netbeans-platform",level:2},{value:"Build a Plugin",id:"build-a-plugin",level:2},{value:"Creation of a Module Suite",id:"creation-of-a-module-suite",level:3},{value:"Creation of a Module",id:"creation-of-a-module",level:3},{value:"Add the Gephi Dependencies",id:"add-the-gephi-dependencies",level:3},{value:"TroubleShootings",id:"troubleshootings",level:2},{value:"The Gephi SPI/API is not seen when editing and compiling",id:"the-gephi-spiapi-is-not-seen-when-editing-and-compiling",level:3},{value:"Module Version not compatible",id:"module-version-not-compatible",level:3}],p={toc:u};function d(e){let{components:t,...a}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"It is possible to build a plugin using only binary installation of Gephi. The principle is to compile the plugin using the Gephi binary installation as a NetBeans platform. "),(0,o.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,o.kt)("p",null,"First, you need a Gephi binary installation, such as the one that can be downloaded at ",(0,o.kt)("a",{parentName:"p",href:"https://gephi.org"},"https://gephi.org")),(0,o.kt)("h2",{id:"registering-gephi-as-a-netbeans-platform"},"Registering Gephi as a NetBeans Platform"),(0,o.kt)("p",null,'Open the "Tools|NetBeans Platforms" dialog, click on "Add Platform...", and choose the directory containing the Gephi binary installation. Note that when the NetBeans IDE detects a NetBeans Platform in a directory, the "Platform Name" label is filled with the identifier of this platform.'),(0,o.kt)("p",null,"By example, in the next picture, a Gephi installation was found in the ",(0,o.kt)("inlineCode",{parentName:"p"},"/opt/gephi-0.8-beta")," directory."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"addnetbeansplatform",src:i(4414).Z,width:"881",height:"495"})),(0,o.kt)("p",null,"Click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Next"),' button, and change the platform name if required. In that example, it was required to change the platform name to "Gephi 0.8 beta", since the Gephi 0.8 alpha and beta have the same identifier, namely "Gephi 0.8 alpha".'),(0,o.kt)("p",null,"As you can see, two Gephi platforms have been registered."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"addnetbeansplatformdone",src:i(5758).Z,width:"776",height:"520"})),(0,o.kt)("h2",{id:"build-a-plugin"},"Build a Plugin"),(0,o.kt)("p",null,"To build a plugin, it requires to:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Create a module suite, event if your suite contains only one plugin, and make this suite use the Gephi platform;"),(0,o.kt)("li",{parentName:"ol"},"Create a plugin in the module suite."),(0,o.kt)("li",{parentName:"ol"},"Add as dependencies of your modules the NetBeans and Gephi modules containing the functionalities required.")),(0,o.kt)("h3",{id:"creation-of-a-module-suite"},"Creation of a Module Suite"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Click on "New|New Project";',(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},'In Categories, choose "NetBeans Modules, and "Module Suite" in projects, then click on the ',(0,o.kt)("inlineCode",{parentName:"li"},"Next")," button;"),(0,o.kt)("li",{parentName:"ol"},"Configure the name, locations at your will."),(0,o.kt)("li",{parentName:"ol"},"Choose the NetBeans Plaform you want to use. Here, you have to choose one of the Gephi platforms you have previously registered.")))),(0,o.kt)("h3",{id:"creation-of-a-module"},"Creation of a Module"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Click on "New|New Project";',(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},'In Categories, choose "NetBeans Modules, and "Module" in projects, then click on the ',(0,o.kt)("inlineCode",{parentName:"li"},"Next")," button;"),(0,o.kt)("li",{parentName:"ol"},"Configure the name, locations at your will. Add the new module to the module suite created in the previous step.")))),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"gephimoduleend",src:i(6295).Z,width:"1121",height:"857"})),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Display after the creation of the module suite and the module")),(0,o.kt)("h3",{id:"add-the-gephi-dependencies"},"Add the Gephi Dependencies"),(0,o.kt)("p",null,"When some Gephi SPI/API are required by your module:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'In the Projects window, right-click on the "Libraries" item in the module tree.;'),(0,o.kt)("li",{parentName:"ol"},'Select the "Add Module Dependency";'),(0,o.kt)("li",{parentName:"ol"},"In the Filter textfield, enter a part or the totality of the interface/class required by your module."),(0,o.kt)("li",{parentName:"ol"},"Select in the Module pane the module containing the interface/class required.")),(0,o.kt)("h2",{id:"troubleshootings"},"TroubleShootings"),(0,o.kt)("h3",{id:"the-gephi-spiapi-is-not-seen-when-editing-and-compiling"},"The Gephi SPI/API is not seen when editing and compiling"),(0,o.kt)("p",null,"If the interfaces and classes are not seen by the editor and the compiler, please process the following steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Check the suite is using Gephi as its NetBeans platform by :",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},'Right-click on the suite project, click on the "Properties" item;'),(0,o.kt)("li",{parentName:"ol"},'In Categories, choose "Libraries". In the right pane, check whether the NetBeans Platform is using a Gephi installation, and change the platform if Gephi is not selected.'),(0,o.kt)("li",{parentName:"ol"},"In the Platform Modules tree, check the box for the gephi suite of modules, so that all the modules composing Gephi are used when compiling your module.")))),(0,o.kt)("h3",{id:"module-version-not-compatible"},"Module Version not compatible"),(0,o.kt)("p",null,'If an error message similar to "Cannot compile against a module: org-gephi-data-attributes-api.jar because of dependency: org.gephi.data.attributes.api > 0.8", it means the configuration of your module is requiring a Gephi module more recent than those provided by the Gephi platform used. A solution is to open the "Module Dependencies" dialog by doing:'),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},'Right click on the module, choose the "Properties" item;'),(0,o.kt)("li",{parentName:"ol"},'In Categories, click on "Libraries";'),(0,o.kt)("li",{parentName:"ol"},'In the "Module Dependencies" tab, select the module causing problem, and edit the requirements on its version number.')))}d.isMDXComponent=!0},4414:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/00_addnetbeansplatform-deb9768ab2304c7b9da58eec1a50752c.png"},5758:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/01_addnetbeansplatformdone-b0594d8bdc1e585353d7de06e3f696e8.png"},6295:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/02_gephimoduleend-62ee8dbd6981f43f5c14791f7c228bcc.png"}}]); \ No newline at end of file diff --git a/assets/js/88dc0e52.3c703d0e.js b/assets/js/88dc0e52.3c703d0e.js new file mode 100644 index 0000000..535436a --- /dev/null +++ b/assets/js/88dc0e52.3c703d0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5612],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var i=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,i)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,i,n=function(e,t){if(null==e)return{};var r,i,n={},o=Object.keys(e);for(i=0;i<o.length;i++)r=o[i],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)r=o[i],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=i.createContext({}),l=function(e){var t=i.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=l(e.components);return i.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},f=i.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),f=l(r),d=n,h=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return r?i.createElement(h,a(a({ref:t},p),{},{components:r})):i.createElement(h,a({ref:t},p))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,a=new Array(o);a[0]=f;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c.mdxType="string"==typeof e?e:n,a[1]=c;for(var l=2;l<o;l++)a[l]=r[l];return i.createElement.apply(null,a)}return i.createElement.apply(null,r)}f.displayName="MDXCreateElement"},5829:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var i=r(7462),n=(r(7294),r(3905));const o={id:"01-first-contact-with-gephi",title:"First contact with Gephi",sidebar_position:1,tags:["Video"]},a="First contact with Gephi",c={unversionedId:"User_Manual/Official_Videos/01-first-contact-with-gephi",id:"User_Manual/Official_Videos/01-first-contact-with-gephi",title:"First contact with Gephi",description:"https://www.youtube.com/watch?v=YM37zuURM",source:"@site/docs/User_Manual/Official_Videos/First_contact_with_gephi.md",sourceDirName:"User_Manual/Official_Videos",slug:"/User_Manual/Official_Videos/01-first-contact-with-gephi",permalink:"/User_Manual/Official_Videos/01-first-contact-with-gephi",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Official_Videos/First_contact_with_gephi.md",tags:[{label:"Video",permalink:"/tags/video"}],version:"current",sidebarPosition:1,frontMatter:{id:"01-first-contact-with-gephi",title:"First contact with Gephi",sidebar_position:1,tags:["Video"]},sidebar:"tutorialSidebar",previous:{title:"Import Dynamic Data",permalink:"/User_Manual/Import_Dynamic_Data"},next:{title:"Layouts, clusters, and where to find them",permalink:"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them"}},s={},l=[],p={toc:l};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,i.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"first-contact-with-gephi"},"First contact with Gephi"),(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/YM_37z_uURM",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=YM_37z_uURM"},"https://www.youtube.com/watch?v=YM_37z_uURM")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.22f7e023.js b/assets/js/935f2afb.22f7e023.js new file mode 100644 index 0000000..760b755 --- /dev/null +++ b/assets/js/935f2afb.22f7e023.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"User Manual","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Troubleshooting","href":"/User_Manual/troubleshooting","docId":"User_Manual/troubleshooting"},{"type":"link","label":"Vocabulary","href":"/User_Manual/vocabulary","docId":"User_Manual/vocabulary"},{"type":"link","label":"Graphical User Interface","href":"/User_Manual/gui","docId":"User_Manual/gui"},{"type":"link","label":"Datasets","href":"/User_Manual/datasets","docId":"User_Manual/datasets"},{"type":"link","label":"Import CSV Data","href":"/User_Manual/Import_CSV_Data","docId":"User_Manual/Import_CSV_Data"},{"type":"link","label":"Import Dynamic Data","href":"/User_Manual/Import_Dynamic_Data","docId":"User_Manual/Import_Dynamic_Data"},{"type":"category","label":"Official Video","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"First contact with Gephi","href":"/User_Manual/Official_Videos/01-first-contact-with-gephi","docId":"User_Manual/Official_Videos/01-first-contact-with-gephi"},{"type":"link","label":"Layouts, clusters, and where to find them","href":"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","docId":"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them"}]}],"href":"/"},{"type":"category","label":"Developer Documentation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Developer Handbook","href":"/Developer_Documentation/developer_handbook","docId":"Developer_Documentation/developer_handbook"},{"type":"link","label":"How to build Gephi","href":"/Developer_Documentation/how_to_build_gephi","docId":"Developer_Documentation/how_to_build_gephi"},{"type":"link","label":"Code Style","href":"/Developer_Documentation/code_style","docId":"Developer_Documentation/code_style"},{"type":"link","label":"Localization","href":"/Developer_Documentation/localization","docId":"Developer_Documentation/localization"}],"href":"/Developer_Documentation/"},{"type":"category","label":"Plugin Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Plugin Quick Start","href":"/Plugins/Plugin_Quick_Start","docId":"Plugins/Plugin_Quick_Start"},{"type":"link","label":"De\u0301marrage rapide (FR)","href":"/Plugins/de\u0301marrage-rapide-fr","docId":"Plugins/de\u0301marrage-rapide-fr"},{"type":"link","label":"Layout","href":"/Plugins/layout","docId":"Plugins/layout"},{"type":"link","label":"Statistics","href":"/Plugins/statistics","docId":"Plugins/statistics"},{"type":"link","label":"Import","href":"/Plugins/import","docId":"Plugins/import"},{"type":"link","label":"Spigot importer with Wizard","href":"/Plugins/Spigot_importer_with_Wizard","docId":"Plugins/Spigot_importer_with_Wizard"},{"type":"link","label":"Export","href":"/Plugins/export","docId":"Plugins/export"},{"type":"link","label":"Generator","href":"/Plugins/generator","docId":"Plugins/generator"},{"type":"link","label":"Filter","href":"/Plugins/filter","docId":"Plugins/filter"},{"type":"link","label":"Extend Data Laboratory","href":"/Plugins/Extend_Data_Laboratory","docId":"Plugins/Extend_Data_Laboratory"},{"type":"link","label":"Preview renderer","href":"/Plugins/preview-renderer","docId":"Plugins/preview-renderer"},{"type":"link","label":"Add a module panel","href":"/Plugins/Add_a_module_panel","docId":"Plugins/Add_a_module_panel"},{"type":"link","label":"Add a submenu","href":"/Plugins/Add_a_submenu","docId":"Plugins/Add_a_submenu"},{"type":"link","label":"Build a plugin without Gephi source code","href":"/Plugins/Build_a_plugin_without_Gephi_source_code","docId":"Plugins/Build_a_plugin_without_Gephi_source_code"},{"type":"link","label":"Update a plugin","href":"/Plugins/update-a-plugin","docId":"Plugins/update-a-plugin"},{"type":"link","label":"Code Sharing Strategy","href":"/Plugins/code_sharing_strategy","docId":"Plugins/code_sharing_strategy"},{"type":"link","label":"GraphStreaming","href":"/Plugins/graphstreaming","docId":"Plugins/graphstreaming"}],"href":"/Plugins/"}]},"docs":{"Developer_Documentation/code_style":{"id":"Developer_Documentation/code_style","title":"Code Style","description":"The source code uses the CheckStyle tool to keep the code style consistent.","sidebar":"tutorialSidebar"},"Developer_Documentation/developer_handbook":{"id":"Developer_Documentation/developer_handbook","title":"Developer Handbook","description":"This page explains how to contribute to Gephi\'s development.","sidebar":"tutorialSidebar"},"Developer_Documentation/how_to_build_gephi":{"id":"Developer_Documentation/how_to_build_gephi","title":"How to build Gephi","description":"Follow this guide to start developing the Gephi source code and test your changes.","sidebar":"tutorialSidebar"},"Developer_Documentation/index":{"id":"Developer_Documentation/index","title":"Introduction","description":"Intro","sidebar":"tutorialSidebar"},"Developer_Documentation/localization":{"id":"Developer_Documentation/localization","title":"Localization","description":"Gephi has a localization program to provide the software in your language: this page describes how to contribute! We use the Weblate.","sidebar":"tutorialSidebar"},"Plugins/Add_a_module_panel":{"id":"Plugins/Add_a_module_panel","title":"Add a module panel","description":"How to create a panel for plugin features, similar to Ranking, Graph or Layout? It is easy and fully integrated in Netbeans. Create your panel class and use Netbeans IDE to design the user interface. This page also explains how to work with the Perspective system.","sidebar":"tutorialSidebar"},"Plugins/Add_a_submenu":{"id":"Plugins/Add_a_submenu","title":"Add a submenu","description":"From a plugin it is easy to add a menu in the menubar, for instance in Plugins. If you wanna add your action in a already existing menu, like Generate, don\'t follow this HowTo but look more how to create a new Generator, as the submenus may be created dynamically.","sidebar":"tutorialSidebar"},"Plugins/Build_a_plugin_without_Gephi_source_code":{"id":"Plugins/Build_a_plugin_without_Gephi_source_code","title":"Build a plugin without Gephi source code","description":"It is possible to build a plugin using only binary installation of Gephi. The principle is to compile the plugin using the Gephi binary installation as a NetBeans platform.","sidebar":"tutorialSidebar"},"Plugins/code_sharing_strategy":{"id":"Plugins/code_sharing_strategy","title":"Code Sharing Strategy","description":"Code sharing","sidebar":"tutorialSidebar"},"Plugins/de\u0301marrage-rapide-fr":{"id":"Plugins/de\u0301marrage-rapide-fr","title":"De\u0301marrage rapide (FR)","description":"Bienvenue sur ce tutoriel. Vous apprendrez ici les \xe9tapes fondamentales pour visualiser et manipuler un r\xe9seau dans Gephi.","sidebar":"tutorialSidebar"},"Plugins/export":{"id":"Plugins/export","title":"Export","description":"This HowTo shows, in about 15 minutes how to create a new exporter in Gephi. Exporters export data from Gephi to various targets, like files or streams.","sidebar":"tutorialSidebar"},"Plugins/Extend_Data_Laboratory":{"id":"Plugins/Extend_Data_Laboratory","title":"Extend Data Laboratory","description":"Introduction","sidebar":"tutorialSidebar"},"Plugins/filter":{"id":"Plugins/filter","title":"Filter","description":"Filters are pruning the graph by keeping only nodes and edges that satisfies filters conditions. They are either predicates or functions that reduce the graph, predicates are easy and return only true or false, whereas functions input a graph and output a graph.","sidebar":"tutorialSidebar"},"Plugins/generator":{"id":"Plugins/generator","title":"Generator","description":"This HowTo shows how to create a new graph generator in Gephi.","sidebar":"tutorialSidebar"},"Plugins/graphstreaming":{"id":"Plugins/graphstreaming","title":"GraphStreaming","description":"Description","sidebar":"tutorialSidebar"},"Plugins/import":{"id":"Plugins/import","title":"Import","description":"This HowTo shows, in about 15 minutes how to create a new importer in Gephi. Importers push data from files, databases or external datasources to a Container. The role of the container is to host all data collected by importers (i.e. nodes, edges and attributes). This HowTo is focused on file importers, but the procedure is slightly similar for databases or spigots.","sidebar":"tutorialSidebar"},"Plugins/index":{"id":"Plugins/index","title":"Introduction","description":"This section is designed to help developers write Gephi Plugins.","sidebar":"tutorialSidebar"},"Plugins/layout":{"id":"Plugins/layout","title":"Layout","description":"Available layouts","sidebar":"tutorialSidebar"},"Plugins/Plugin_Quick_Start":{"id":"Plugins/Plugin_Quick_Start","title":"Plugin Quick Start","description":"THIS PAGE IS OUTDATED, PLEASE CHECK THE README AT https://github.com/gephi/gephi-plugins","sidebar":"tutorialSidebar"},"Plugins/preview-renderer":{"id":"Plugins/preview-renderer","title":"Preview renderer","description":"Introduction","sidebar":"tutorialSidebar"},"Plugins/Spigot_importer_with_Wizard":{"id":"Plugins/Spigot_importer_with_Wizard","title":"Spigot importer with Wizard","description":"Introduction","sidebar":"tutorialSidebar"},"Plugins/statistics":{"id":"Plugins/statistics","title":"Statistics","description":"Available statistics","sidebar":"tutorialSidebar"},"Plugins/update-a-plugin":{"id":"Plugins/update-a-plugin","title":"Update a plugin","description":"Step1: New code","sidebar":"tutorialSidebar"},"User_Manual/datasets":{"id":"User_Manual/datasets","title":"Datasets","description":"The Gephi sample datasets below are available in various formats (GEXF, GDF, GML, NET, GraphML, DL, DOT). Feel free to add new datasets, but be sure to cite the original authors.","sidebar":"tutorialSidebar"},"User_Manual/gui":{"id":"User_Manual/gui","title":"Graphical User Interface","description":"Global visual framework","sidebar":"tutorialSidebar"},"User_Manual/Import_CSV_Data":{"id":"User_Manual/Import_CSV_Data","title":"Import CSV Data","description":"Introduction","sidebar":"tutorialSidebar"},"User_Manual/Import_Dynamic_Data":{"id":"User_Manual/Import_Dynamic_Data","title":"Import Dynamic Data","description":"Longitudinal (also called dynamic) networks are simply networks that evolve chronologically. If you imagine the network of your friends, the number of nodes, connections and attribute values grow and change as time passes. We call these dynamic attributes, because they have values associated with a particular moment.","sidebar":"tutorialSidebar"},"User_Manual/index":{"id":"User_Manual/index","title":"Introduction","description":"Welcome to the official Gephi documentation resource.","sidebar":"tutorialSidebar"},"User_Manual/Official_Videos/01-first-contact-with-gephi":{"id":"User_Manual/Official_Videos/01-first-contact-with-gephi","title":"First contact with Gephi","description":"https://www.youtube.com/watch?v=YM37zuURM","sidebar":"tutorialSidebar"},"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them":{"id":"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","title":"Layouts, clusters, and where to find them","description":"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s","sidebar":"tutorialSidebar"},"User_Manual/troubleshooting":{"id":"User_Manual/troubleshooting","title":"Troubleshooting","description":"Memory issues","sidebar":"tutorialSidebar"},"User_Manual/vocabulary":{"id":"User_Manual/vocabulary","title":"Vocabulary","description":"AutoUpdate","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/94004172.1b88be2b.js b/assets/js/94004172.1b88be2b.js new file mode 100644 index 0000000..3eb1fa7 --- /dev/null +++ b/assets/js/94004172.1b88be2b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3031],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>h});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,a=e.originalType,l=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=s(r),h=i,m=c["".concat(l,".").concat(h)]||c[h]||d[h]||a;return r?n.createElement(m,o(o({ref:t},u),{},{components:r})):n.createElement(m,o({ref:t},u))}));function h(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=r.length,o=new Array(a);o[0]=c;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:i,o[1]=p;for(var s=2;s<a;s++)o[s]=r[s];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}c.displayName="MDXCreateElement"},9070:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>p,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const a={id:"export",title:"Export",sidebar_position:7},o=void 0,p={unversionedId:"Plugins/export",id:"Plugins/export",title:"Export",description:"This HowTo shows, in about 15 minutes how to create a new exporter in Gephi. Exporters export data from Gephi to various targets, like files or streams.",source:"@site/docs/Plugins/Export.md",sourceDirName:"Plugins",slug:"/Plugins/export",permalink:"/Plugins/export",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Export.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{id:"export",title:"Export",sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"Spigot importer with Wizard",permalink:"/Plugins/Spigot_importer_with_Wizard"},next:{title:"Generator",permalink:"/Plugins/generator"}},l={},s=[{value:"Create a new Exporter",id:"create-a-new-exporter",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create Exporter Builder",id:"create-exporter-builder",level:3},{value:"Create Exporter",id:"create-exporter",level:3},{value:"Finish the builder",id:"finish-the-builder",level:3},{value:"With settings UI",id:"with-settings-ui",level:2},{value:"Create MyExporterUI",id:"create-myexporterui",level:3},{value:"Register the UI",id:"register-the-ui",level:3},{value:"Remember settings",id:"remember-settings",level:3}],u={toc:s};function d(e){let{components:t,...a}=e;return(0,i.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"This HowTo shows, in about 15 minutes how to create a new exporter in Gephi. Exporters export data from Gephi to various targets, like files or streams."),(0,i.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,i.kt)("em",{parentName:"p"},"MyExporter"),", you can start this tutorial."),(0,i.kt)("p",null,"One can find file exporter examples in the ",(0,i.kt)("inlineCode",{parentName:"p"},"ExportPlugin")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"PreviewExport")," modules."),(0,i.kt)("h2",{id:"create-a-new-exporter"},"Create a new Exporter"),(0,i.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"ExportAPI"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"ProjectAPI"),", and ",(0,i.kt)("inlineCode",{parentName:"p"},"Lookup")," modules as dependencies for your plugin module ",(0,i.kt)("em",{parentName:"p"},"MyExport"),". See [","[How To Set Module Dependencies]","]."),(0,i.kt)("h3",{id:"create-exporter-builder"},"Create Exporter Builder"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"ExporterBuilder")," is a factory class for building the important instance, all Exporters should have their own builder.\nCreate a new builder ",(0,i.kt)("em",{parentName:"p"},"MyExporterBuilder")," class, which implements one of the following interface:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/io/exporter/spi/GraphFileExporterBuilder.html"},(0,i.kt)("inlineCode",{parentName:"a"},"GraphFileExporterBuilder"))," - For graph export (like GEXF, GraphML, CSV...)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/io/exporter/spi/VectorFileExporterBuilder.html"},(0,i.kt)("inlineCode",{parentName:"a"},"VectorFileExporterBuilder"))," - Vector graphics (like SVG, PDF, ...)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api/org/gephi/io/exporter/spi/ExporterBuilder.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ExportBuilder"))," - Anything else")),(0,i.kt)("p",null,"Let's say we create a exporter for a custom graph format with ",(0,i.kt)("em",{parentName:"p"},".foo")," extension, so we choose ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphFileExporterBuilder"),"."),(0,i.kt)("p",null,"Fill the ",(0,i.kt)("inlineCode",{parentName:"p"},"getFileTypes()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"getName()")," methods like below, for a single file format supported named ",(0,i.kt)("em",{parentName:"p"},"foo"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public String getName() {\n return "foo";\n}\n \npublic FileType[] getFileTypes() {\n return new FileType[]{new FileType(".foo", "Foo files")};\n}\n')),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your builder class to declare you are implementing an ",(0,i.kt)("inlineCode",{parentName:"p"},"Exporter")," service. Add the following line before ",(0,i.kt)("em",{parentName:"p"},"MyExporterBuilder")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = GraphFileExporterBuilder.class)\npublic class MyExporterBuilder implements GraphFileExporterBuilder{\n...\n")),(0,i.kt)("p",null,"This annotation registers your implementation in the system, in order it can be discovered at runtime."),(0,i.kt)("p",null,"Put ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphFileExporterBuilder.class")," as the annotation service parameter for graph files, ",(0,i.kt)("inlineCode",{parentName:"p"},"VectorFileExporterBuilder.class")," for vector graphics and ",(0,i.kt)("inlineCode",{parentName:"p"},"ExportBuilder.class")," for the rest."),(0,i.kt)("h3",{id:"create-exporter"},"Create Exporter"),(0,i.kt)("p",null,"Create a new exporter class, which implements ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphExporter"),", ",(0,i.kt)("inlineCode",{parentName:"p"},"VectorExporter")," or simply ",(0,i.kt)("inlineCode",{parentName:"p"},"Exporter"),", depending what you set for the builder."),(0,i.kt)("p",null,"The exporter is where the job is done, in its ",(0,i.kt)("inlineCode",{parentName:"p"},"execute()")," method. The main input object the export needs is the Workspace. In Gephi, data are stored within workspaces. It is the place the exporter will find what to export. Before being executed by the export controller, the exporter will receive the workspace and other parameters through setters methods."),(0,i.kt)("p",null,"Implement also ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/exporter/spi/ByteExporter.html"},(0,i.kt)("inlineCode",{parentName:"a"},"ByteExporter"))," interface for byte streams or ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/exporter/spi/CharacterExporter.html"},(0,i.kt)("inlineCode",{parentName:"a"},"CharacterExporter"))," for texts. These are the two ways you can output data in a exporter, either text (",(0,i.kt)("inlineCode",{parentName:"p"},"java.io.Writer"),") or byte (",(0,i.kt)("inlineCode",{parentName:"p"},"java.io.OutputStream"),"). Note that XML is text-based. So exporters are not specifically exporting to a file or a stream, they export to a Writer or an ",(0,i.kt)("inlineCode",{parentName:"p"},"OutputStream"),". The controller later decides what to do with it."),(0,i.kt)("p",null,"Add also ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTask")," interface to your class, in order you will be able to use progress and cancel management. Add ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTaskAPI")," as a dependency to profit from LongTask.\nYour exporter should now look like below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public class MyExporter implements GraphExporter, CharacterExporter {\n \n private boolean exportVisible = false;\n private Workspace workspace;\n private Writer writer;\n \n @Override\n public boolean execute() {\n //Do the job\n }\n \n @Override\n public void setWorkspace(Workspace workspace) {\n this.workspace = workspace;\n }\n \n @Override\n public Workspace getWorkspace() {\n return workspace;\n }\n \n @Override\n public void setWriter(Writer writer) {\n this.writer = writer;\n }\n \n @Override\n public void setExportVisible(boolean exportVisible) {\n this.exportVisible = exportVisible;\n }\n \n @Override\n public boolean isExportVisible() {\n return exportVisible;\n }\n}\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"GraphExporter")," interface has an additional parameter: ",(0,i.kt)("inlineCode",{parentName:"p"},"exportVisible"),". It indicates if either the complete or only the visible graph should be exported. At any time the system keeps the complete graph in memory. When users use filtering, the visible graph is different, as some nodes/edges have been removed. Below is the way to retrieve the good graph with this parameter."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public boolean execute() {\n GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class);\n Graph graph = null;\n if (exportVisible) {\n graph = graphModel.getGraphVisible();\n } else {\n graph = graphModel.getGraph();\n }\n //Do the job\n}\n")),(0,i.kt)("h3",{id:"finish-the-builder"},"Finish the builder"),(0,i.kt)("p",null,"In the builder, return a new instance of your exporter in the ",(0,i.kt)("inlineCode",{parentName:"p"},"buildExporter()")," method."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@Override\npublic GraphExporter buildExporter() {\n return new MyExporter();\n}\n")),(0,i.kt)("h2",{id:"with-settings-ui"},"With settings UI"),(0,i.kt)("p",null,"You can create an ",(0,i.kt)("inlineCode",{parentName:"p"},"ExporterUI")," class for your exporter. It is not mandatory and the exporter will work normally with default settings."),(0,i.kt)("h3",{id:"create-myexporterui"},"Create MyExporterUI"),(0,i.kt)("p",null,"Create a new exporter UI class, for instance ",(0,i.kt)("em",{parentName:"p"},"MyExporterUI")," that implements ",(0,i.kt)("inlineCode",{parentName:"p"},"ExporterUI"),"."),(0,i.kt)("p",null,"Your UI class is responsible of providing the JPanel associated to your exporter and set settings value to your ",(0,i.kt)("em",{parentName:"p"},"MyExporter")," instance. The system will ask for a JPanel, show a setting dialog and then call ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()"),". If users validate the settings panel by hitting OK, the ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()")," method is called with update set as true and ask the UI to write the setting values.\nThe sample below will help you:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public class MyExporterUI implements ExporterUI {\n \n private JPanel panel;\n private MyExporter exporter;\n \n public void setup(Exporter exporter) {\n this.exporter= (MyExporter)exporter;\n }\n \n public JPanel getPanel() {\n panel = new JPanel();\n return panel;\n }\n \n public void unsetup(boolean update) {\n if(update) {\n //The user clicked OK when closing settings\n } else {\n //Cancel was hit\n }\n panel = null;\n exporter = null;\n }\n \n public String getDisplayName() {\n return "Exporter Foo";\n }\n \n public boolean isUIForExporter(Exporter exporter) {\n return exporter instanceof MyExporter;\n }\n}\n')),(0,i.kt)("h3",{id:"register-the-ui"},"Register the UI"),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your UI class. Add the following line before ",(0,i.kt)("em",{parentName:"p"},"MyexporterUI")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = ExporterUI.class)\npublic class MyExporterUI implements ExporterUI{\n...\n")),(0,i.kt)("p",null,"Note that by doing this your class becomes a singleton."),(0,i.kt)("h3",{id:"remember-settings"},"Remember settings"),(0,i.kt)("p",null,"How to remember last settings set to the exporter, as each time a new export is made, a new instance of Exporter is created."),(0,i.kt)("p",null,"It is the ",(0,i.kt)("inlineCode",{parentName:"p"},"ExporterUI"),"'s role to remember settings. The only thing to do is load settings at ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()")," and save settings at unsetup. Look at existing classes in the ",(0,i.kt)("inlineCode",{parentName:"p"},"ExporterPluginUI")," module to have an example."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"image",src:r(1821).Z,width:"597",height:"430"})))}d.isMDXComponent=!0},1821:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/00_image-190bbf83f8d3044278ec3f70d6848c5a.png"}}]); \ No newline at end of file diff --git a/assets/js/96c922fe.338182c2.js b/assets/js/96c922fe.338182c2.js new file mode 100644 index 0000000..b70cd75 --- /dev/null +++ b/assets/js/96c922fe.338182c2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[8294],{3905:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>h});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function l(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var u=n.createContext({}),p=function(e){var t=n.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},s=function(e){var t=p(e.components);return n.createElement(u.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,i=e.originalType,u=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=p(o),h=r,c=d["".concat(u,".").concat(h)]||d[h]||m[h]||i;return o?n.createElement(c,a(a({ref:t},s),{},{components:o})):n.createElement(c,a({ref:t},s))}));function h(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=o.length,a=new Array(i);a[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l.mdxType="string"==typeof e?e:r,a[1]=l;for(var p=2;p<i;p++)a[p]=o[p];return n.createElement.apply(null,a)}return n.createElement.apply(null,o)}d.displayName="MDXCreateElement"},2326:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const i={id:"developer_handbook",title:"Developer Handbook",sidebar_position:1},a=void 0,l={unversionedId:"Developer_Documentation/developer_handbook",id:"Developer_Documentation/developer_handbook",title:"Developer Handbook",description:"This page explains how to contribute to Gephi's development.",source:"@site/docs/Developer_Documentation/Developer_Handbook.md",sourceDirName:"Developer_Documentation",slug:"/Developer_Documentation/developer_handbook",permalink:"/Developer_Documentation/developer_handbook",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Developer_Documentation/Developer_Handbook.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{id:"developer_handbook",title:"Developer Handbook",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/Developer_Documentation/"},next:{title:"How to build Gephi",permalink:"/Developer_Documentation/how_to_build_gephi"}},u={},p=[{value:"How to download the development version of Gephi",id:"how-to-download-the-development-version-of-gephi",level:2},{value:"Prerequisites",id:"prerequisites",level:3},{value:"Getting the source code",id:"getting-the-source-code",level:3},{value:"Compiling and Running Gephi",id:"compiling-and-running-gephi",level:3},{value:"How to create and publish your own feature",id:"how-to-create-and-publish-your-own-feature",level:2},{value:"Configure your forked repository",id:"configure-your-forked-repository",level:3},{value:"Push commits",id:"push-commits",level:3},{value:"Merge from the main repository",id:"merge-from-the-main-repository",level:3},{value:"Send pull requests",id:"send-pull-requests",level:3},{value:"How to contribute to the main project",id:"how-to-contribute-to-the-main-project",level:2}],s={toc:p};function m(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"This page explains how to contribute to Gephi's development."),(0,r.kt)("h2",{id:"how-to-download-the-development-version-of-gephi"},"How to download the development version of Gephi"),(0,r.kt)("h3",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Note: Gephi uses multi-platforms tools, so all the following steps should be the same (well, mostly) whatever the OS you are running"),(0,r.kt)("li",{parentName:"ul"},"First, you will need ",(0,r.kt)("a",{parentName:"li",href:"http://git-scm.com/download"},"git")," to download the files."),(0,r.kt)("li",{parentName:"ul"},"You also need ",(0,r.kt)("a",{parentName:"li",href:"http://netbeans.org/"},"Netbeans 8.0+"))),(0,r.kt)("h3",{id:"getting-the-source-code"},"Getting the source code"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Read the full instructions: [","[Checkout Code]","]")),(0,r.kt)("p",null,"Now you should have a Gephi fork and a master branch."),(0,r.kt)("p",null,"Set up your account credentials to Git:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'git config --global user.name "Firstname Lastname"\ngit config --global user.email "your_email@youremail.com"\n')),(0,r.kt)("h3",{id:"compiling-and-running-gephi"},"Compiling and Running Gephi"),(0,r.kt)("p",null,"Read full instructions: [","[Configuring NetBeans]","]"),(0,r.kt)("h2",{id:"how-to-create-and-publish-your-own-feature"},"How to create and publish your own feature"),(0,r.kt)("h3",{id:"configure-your-forked-repository"},"Configure your forked repository"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"You\u2019ve successfully forked the Gephi repository and got the code in a gephi folder by doing")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"git clone git@github.com:username/gephi.git")),(0,r.kt)("p",null,"When a repo is cloned, it has a default remote called origin that points to your fork on GitHub, not the original repo it was forked from. To keep track of the original repo, you need to add another remote named upstream:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"cd gephi\ngit remote add upstream git://github.com/gephi/gephi.git\ngit fetch upstream master\n")),(0,r.kt)("p",null,"This keeps your fork up to date. Each time you run ",(0,r.kt)("inlineCode",{parentName:"p"},"git fetch upstream master")," it downloads the latest changes from the main repository (not your fork). Note that this does NOT change any of your files. You'll need a merge to actually apply the latest changes to your fork."),(0,r.kt)("h3",{id:"push-commits"},"Push commits"),(0,r.kt)("p",null,"When you work on the code, commit often!\nThe commit process is straightforward. First add all the files you want to include in your commit:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"git add .")),(0,r.kt)("p",null,"Then commit these files"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},'git commit -m "This is my first commit hourray"')),(0,r.kt)("p",null,"Run git status often to see what your repository is up to.\nYour commits are local. To send them to GitHub run:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"git push origin master")),(0,r.kt)("h3",{id:"merge-from-the-main-repository"},"Merge from the main repository"),(0,r.kt)("p",null,"When we update the main gephi repository, your fork doesn't get updated automatically. To merge the latest commits to your fork, run a merge from upstream:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"git fetch upstream master\ngit merge upstream/master\n")),(0,r.kt)("p",null,"To fetch and merge in one line, simply run"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"git pull upstream master")),(0,r.kt)("p",null,"When you merge, you may run into conflicts. This is normal if you worked on the same files.\nNote that ",(0,r.kt)("inlineCode",{parentName:"p"},"git fetch upstream")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"git pull upstream")," will download the data from all branches, which you probably don't need. That's why we add 'master' to specify which branch to fetch to."),(0,r.kt)("h3",{id:"send-pull-requests"},"Send pull requests"),(0,r.kt)("p",null,"That's the standard and easiest way to contribute to the project. It's fully integrated into GitHub and well explained ",(0,r.kt)("a",{parentName:"p",href:"http://help.github.com/send-pull-requests/"},"here"),"."),(0,r.kt)("h2",{id:"how-to-contribute-to-the-main-project"},"How to contribute to the main project"),(0,r.kt)("p",null,"When you are a member of the gephi team, you have the write rights on the main repository. Instead of submitting pull requests you simply commit to the repository, including the master branch.\nChange your upstream push url to authenticated version:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"git remote set-url upstream git@github.com:gephi/gephi.git")),(0,r.kt)("p",null,"Push to the master branch. Make sure you pulled to the latest revision before (git pull upstream master)."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"git push upstream master")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/96cd1949.37cf6e26.js b/assets/js/96cd1949.37cf6e26.js new file mode 100644 index 0000000..03a98bd --- /dev/null +++ b/assets/js/96cd1949.37cf6e26.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5440],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(n),g=a,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||o;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var s=2;s<o;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}u.displayName="MDXCreateElement"},7098:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const o={id:"generator",title:"Generator",sidebar_position:8},i=void 0,l={unversionedId:"Plugins/generator",id:"Plugins/generator",title:"Generator",description:"This HowTo shows how to create a new graph generator in Gephi.",source:"@site/docs/Plugins/Generator.md",sourceDirName:"Plugins",slug:"/Plugins/generator",permalink:"/Plugins/generator",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Generator.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{id:"generator",title:"Generator",sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Export",permalink:"/Plugins/export"},next:{title:"Filter",permalink:"/Plugins/filter"}},p={},s=[{value:"Create a new Generator",id:"create-a-new-generator",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create Generator",id:"create-generator",level:3},{value:"Generate the graph",id:"generate-the-graph",level:3},{value:"Set LongTask",id:"set-longtask",level:3},{value:"Sample",id:"sample",level:3}],c={toc:s};function d(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This HowTo shows how to create a new graph generator in Gephi."),(0,a.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,a.kt)("em",{parentName:"p"},"MyGenerator"),", you can start this tutorial."),(0,a.kt)("h2",{id:"create-a-new-generator"},"Create a new Generator"),(0,a.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,a.kt)("p",null,"Add ",(0,a.kt)("inlineCode",{parentName:"p"},"Lookup"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"GraphAPI")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"LongTaskAPI")," modules as dependencies for your plugin module ",(0,a.kt)("em",{parentName:"p"},"MyGenerator"),". See [","[How To Set Module Dependencies]","]."),(0,a.kt)("h3",{id:"create-generator"},"Create Generator"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Create a new class that implements ",(0,a.kt)("a",{parentName:"li",href:"https://gephi.org/docs/api/org/gephi/io/generator/spi/Generator.html"},"Generator"),". This is the place the code belongs."),(0,a.kt)("li",{parentName:"ul"},'Fill getName() method by returning a display name like "My Generator". Fill ',(0,a.kt)("inlineCode",{parentName:"li"},"getUI()")," method by returning ",(0,a.kt)("inlineCode",{parentName:"li"},"null"),". Leaves other methods untouched for the moment."),(0,a.kt)("li",{parentName:"ul"},"Add ",(0,a.kt)("inlineCode",{parentName:"li"},"@ServiceProvider")," annotation to your builder class. Add the following line before ",(0,a.kt)("em",{parentName:"li"},"MyGenerator")," class definition, as shown below:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = Generator.class)\npublic class MyGenerator implements Generator {\n...\n")),(0,a.kt)("h3",{id:"generate-the-graph"},"Generate the graph"),(0,a.kt)("p",null,"Fill ",(0,a.kt)("inlineCode",{parentName:"p"},"generate()")," method by creating ",(0,a.kt)("inlineCode",{parentName:"p"},"NodeDraft")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"EdgeDraft")," elements to add to the ",(0,a.kt)("inlineCode",{parentName:"p"},"ContainerLoader"),"."),(0,a.kt)("h3",{id:"set-longtask"},"Set LongTask"),(0,a.kt)("p",null,"To let your graph creation task be canceled and its progress watched, implement ",(0,a.kt)("inlineCode",{parentName:"p"},"LongTask")," interface on ",(0,a.kt)("em",{parentName:"p"},"MyGenerator"),".\nAdd two fields:"),(0,a.kt)("p",null,"private boolean cancel = false;\nprivate ProgressTicket progressTicket;"),(0,a.kt)("p",null,"and implement new methods:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},"public boolean cancel() {\n cancel = true;\n return true;\n}\n \npublic void setProgressTicket(ProgressTicket progressTicket) {\n this.progressTicket = progressTicket;\n}\n")),(0,a.kt)("p",null,"Use the ",(0,a.kt)("inlineCode",{parentName:"p"},"cancel")," field to terminate your algorithm execution properly and return from ",(0,a.kt)("inlineCode",{parentName:"p"},"generate()"),"."),(0,a.kt)("h3",{id:"sample"},"Sample"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-java"},'@ServiceProvider(service = Generator.class)\npublic class HelloWorld implements Generator {\n \n protected ProgressTicket progress;\n protected boolean cancel = false;\n \n public void generate(ContainerLoader container) {\n // create nodes\n NodeDraft n1 = container.factory().newNodeDraft();\n NodeDraft n2 = container.factory().newNodeDraft();\n \n // set node labels\n n1.setLabel("Hello");\n n2.setLabel("World");\n \n // create edge\n EdgeDraft e = container.factory().newEdgeDraft();\n e.setSource(n1);\n e.setTarget(n2);\n \n // fill in the graph\n container.addNode(n1);\n container.addNode(n2);\n container.addEdge(e);\n }\n \n public String getName() {\n return "Hello World";\n }\n \n public GeneratorUI getUI() {\n return null;\n }\n \n public boolean cancel() {\n cancel = true;\n return true;\n }\n \n public void setProgressTicket(ProgressTicket progressTicket) {\n this.progress = progressTicket;\n }\n}\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a69ec8a7.30214ac2.js b/assets/js/a69ec8a7.30214ac2.js new file mode 100644 index 0000000..d01a34a --- /dev/null +++ b/assets/js/a69ec8a7.30214ac2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[5399],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>c});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n,i,a={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),p=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return i.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),h=p(n),c=a,m=h["".concat(s,".").concat(c)]||h[c]||d[c]||o;return n?i.createElement(m,r(r({ref:t},u),{},{components:n})):i.createElement(m,r({ref:t},u))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,r[1]=l;for(var p=2;p<o;p++)r[p]=n[p];return i.createElement.apply(null,r)}return i.createElement.apply(null,n)}h.displayName="MDXCreateElement"},906:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var i=n(7462),a=(n(7294),n(3905));const o={id:"troubleshooting",title:"Troubleshooting",sidebar_position:1,tags:["Troubleshooting","Startup"]},r=void 0,l={unversionedId:"User_Manual/troubleshooting",id:"User_Manual/troubleshooting",title:"Troubleshooting",description:"Memory issues",source:"@site/docs/User_Manual/Troubleshooting.md",sourceDirName:"User_Manual",slug:"/User_Manual/troubleshooting",permalink:"/User_Manual/troubleshooting",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Troubleshooting.md",tags:[{label:"Troubleshooting",permalink:"/tags/troubleshooting"},{label:"Startup",permalink:"/tags/startup"}],version:"current",sidebarPosition:1,frontMatter:{id:"troubleshooting",title:"Troubleshooting",sidebar_position:1,tags:["Troubleshooting","Startup"]},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/"},next:{title:"Vocabulary",permalink:"/User_Manual/vocabulary"}},s={},p=[{value:"Memory issues",id:"memory-issues",level:2},{value:"How to edit gephi.conf:",id:"how-to-edit-gephiconf",level:3},{value:"64-bit",id:"64-bit",level:3},{value:"Where are user files?",id:"where-are-user-files",level:2},{value:"Linux issues",id:"linux-issues",level:2},{value:"Select Sun JRE on Ubuntu",id:"select-sun-jre-on-ubuntu",level:3},{value:"Improve text rendering",id:"improve-text-rendering",level:3},{value:"Mac OS X issues",id:"mac-os-x-issues",level:2},{value:"Improve text rendering",id:"improve-text-rendering-1",level:3},{value:"Windows issues",id:"windows-issues",level:2},{value:"Gephi not using Graphical Card on Laptop",id:"gephi-not-using-graphical-card-on-laptop",level:3}],u={toc:p};function d(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,i.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"memory-issues"},"Memory issues"),(0,a.kt)("p",null,"Memory available to Gephi is determined by Java. Less or more memory can be allocated by configuring Gephi's startup settings. If too little memory is allocated, Gephi will stop running when it reached the limit and you will loose your current work. If too much memory is set, Java will not be able to start and return ",(0,a.kt)("strong",{parentName:"p"},"JVM Creation failed")," message. By default, maximum memory is set to 256mo or 512mo."),(0,a.kt)("p",null,"To modify memory settings, you need to edit Gephi settings file. Modify the value after the ",(0,a.kt)("inlineCode",{parentName:"p"},"-Xmx")," option to change the maximum heap space. For example, to use a heap size between 256 and 1024 MB, change the options to ",(0,a.kt)("inlineCode",{parentName:"p"},"-Xms256m")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"-Xmx1024m"),". If you have Gephi open, you must close and reopen Gephi before new options take effect. On computers with 2GB of memory, you can set ",(0,a.kt)("inlineCode",{parentName:"p"},"-Xmx1400")," to get maximum performance."),(0,a.kt)("h3",{id:"how-to-edit-gephiconf"},"How to edit gephi.conf:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On ",(0,a.kt)("strong",{parentName:"li"},"Windows"),", go to the Gephi folder in Start menu and click on Startup Settings. Edit this file with Notepad or WordPad. Alternatively, go to ",(0,a.kt)("inlineCode",{parentName:"li"},"C:\\Program Files\\Gephi\\etc\\gephi.conf")," and edit file manually."),(0,a.kt)("li",{parentName:"ul"},"On ",(0,a.kt)("strong",{parentName:"li"},"Mac OS X"),", right-click on Gephi application icon and select Show Package Contents to open a new Finder window displaying a Contents folder. Open the Contents folder, and then open the ",(0,a.kt)("inlineCode",{parentName:"li"},"Resources/gephi/etc")," folder, in which the gephi.conf file resides. Use TextEdit to edit the file."),(0,a.kt)("li",{parentName:"ul"},"On ",(0,a.kt)("strong",{parentName:"li"},"Linux"),", go into your application directory and then into the ",(0,a.kt)("inlineCode",{parentName:"li"},"etc")," folder. Edit the file with a text editor.")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"To use Gephi with more than ~1.5GB of memory, which could happen with very large graphs, you need to use A 64-bit version of Java. See following section.")),(0,a.kt)("h3",{id:"64-bit"},"64-bit"),(0,a.kt)("p",null,"Gephi has been successfully tested on 64-bit architecture (AMD64, Intel Core 2 Duo, Intel Core i7), 64 bits OS (Windows Vista 64-bit, Windows 7 64-bit) and 64-bit version of Java (JVM 64-Bit Server). To use more than ~1.5GB of memory in Gephi, which could happen with very large graphs, you need to have a 64-bit architecture, OS and a 64-bit JVM. A compatible 64-bit JRE or JDK can be downloaded from Java website."),(0,a.kt)("p",null,"When multiple JRE or JDK are installed on the same machine, you can specify to Gephi to use a particular path. Edit ",(0,a.kt)("inlineCode",{parentName:"p"},"gephi.conf")," as described in the upper section, uncomment the jdkhome line and set the JRE or JDK path."),(0,a.kt)("h2",{id:"where-are-user-files"},"Where are user files?"),(0,a.kt)("p",null,"Locate and delete gephi user directory to clean your installation."),(0,a.kt)("p",null,"On Windows 2K/XP, user directory is located in"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"C:\\Documents and Settings\\username\\Application Data\\.gephi")),(0,a.kt)("p",null,"On Windows Vista/Seven, user directory is located in"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"C:\\Users\\username\\AppData\\Roaming\\.gephi"),(0,a.kt)("br",{parentName:"p"}),"\n","(the logs files are under ",(0,a.kt)("inlineCode",{parentName:"p"},"C:\\Users\\username\\AppData\\Roaming\\.gephi\\{gephiVersion}\\dev\\var\\log\\messages.log")),(0,a.kt)("p",null,"On Mac OS X, user directory is located in"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"/Users/username/Library/Application\\ Support/gephi")),(0,a.kt)("p",null,"On Linux, user directory is located in"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"/home/username/.gephi")),(0,a.kt)("h2",{id:"linux-issues"},"Linux issues"),(0,a.kt)("h3",{id:"select-sun-jre-on-ubuntu"},"Select Sun JRE on Ubuntu"),(0,a.kt)("p",null,"After installing the Sun Java package, remember to run in command line:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo update-alternatives --config java\nsudo update-alternatives --config javac\n")),(0,a.kt)("p",null,"In both cases select the option that has a path with java-6-sun in it."),(0,a.kt)("h3",{id:"improve-text-rendering"},"Improve text rendering"),(0,a.kt)("p",null,"Add the following JVM parameter in the Gephi configuration file:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"-J-Dawt.useSystemAAFontSettings=on")),(0,a.kt)("p",null,"Or add it to your environment variables:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},'export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on"')),(0,a.kt)("h2",{id:"mac-os-x-issues"},"Mac OS X issues"),(0,a.kt)("h3",{id:"improve-text-rendering-1"},"Improve text rendering"),(0,a.kt)("p",null,"Add the following JVM parameter in the Gephi configuration file:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"-J-Dapple.awt.graphics.UseQuartz=true")),(0,a.kt)("h2",{id:"windows-issues"},"Windows issues"),(0,a.kt)("h3",{id:"gephi-not-using-graphical-card-on-laptop"},"Gephi not using Graphical Card on Laptop"),(0,a.kt)("p",null,(0,a.kt)("em",{parentName:"p"},"The troubleshooting explained is for Intel + Nvidia based laptop, note that the process is still relevant for AMD based laptop, just the tools involved might be different")),(0,a.kt)("p",null,"If you have a laptop that has a dedicated graphical card (Nvidia), it's very probable that the laptop has also integrated card (Intel(R) UHD Graphics)."),(0,a.kt)("p",null,"Windows might probably, by default, wont' give Gephi the ability to use the dedicated graphical card, which will result in degraded performance for visualisation."),(0,a.kt)("p",null,"To check that Gephi has or not get granted to use the correct graphical card :"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Open Gephi"),(0,a.kt)("li",{parentName:"ul"},"On the top bar, go to ",(0,a.kt)("strong",{parentName:"li"},"Tools -> Options"),", a window will open"),(0,a.kt)("li",{parentName:"ul"},"On the tab go to ",(0,a.kt)("strong",{parentName:"li"},"Visualisation")," and then on the tab under ",(0,a.kt)("strong",{parentName:"li"},"Open GL"))),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(6015).Z,width:"1914",height:"1040"})),(0,a.kt)("p",null,"On the right side of the windows, if you see something like ",(0,a.kt)("inlineCode",{parentName:"p"},"Nvidia Corporation")," it means that Gephi is using the dedicated graphical card, all good."),(0,a.kt)("p",null,"If you see something like ",(0,a.kt)("inlineCode",{parentName:"p"},"Intel UHD")," it means Gephi is using the integrated graphical card. "),(0,a.kt)("p",null,"To change this and force Windows to let Gephi use the dedicated graphical card :"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Search for ",(0,a.kt)("strong",{parentName:"li"},"Nvidia Control Panel")," on your computer and open it."),(0,a.kt)("li",{parentName:"ul"},"On left side, select ",(0,a.kt)("strong",{parentName:"li"},"3D Settings -> Manage 3D settings")),(0,a.kt)("li",{parentName:"ul"},"Then select the ",(0,a.kt)("strong",{parentName:"li"},"Program settings")," tab"),(0,a.kt)("li",{parentName:"ul"},"Click on ",(0,a.kt)("strong",{parentName:"li"},"Add")," and select ",(0,a.kt)("strong",{parentName:"li"},"Gephi")),(0,a.kt)("li",{parentName:"ul"},"Make sure the option ",(0,a.kt)("strong",{parentName:"li"},"NVIDIA High Performance")," is selected"),(0,a.kt)("li",{parentName:"ul"},"Click on ",(0,a.kt)("strong",{parentName:"li"},"Apply"))),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"image",src:n(8952).Z,width:"904",height:"762"})),(0,a.kt)("p",null,"Then, restart Gephi. It should be now using the dedicated graphical card."))}d.isMDXComponent=!0},6015:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/Graphical_Card_Information-107127dead8bc98fb74ae195694f739e.png"},8952:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/Nvidia_3D_Panel-d6f7621fd0f7264afd3d848b70d3e664.png"}}]); \ No newline at end of file diff --git a/assets/js/aa559eb0.faf806e3.js b/assets/js/aa559eb0.faf806e3.js new file mode 100644 index 0000000..287b331 --- /dev/null +++ b/assets/js/aa559eb0.faf806e3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[9664],{6257:e=>{e.exports=JSON.parse('{"label":"Layout","permalink":"/tags/layout","allTagsPath":"/tags","count":1,"items":[{"id":"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","title":"Layouts, clusters, and where to find them","description":"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s","permalink":"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them"}]}')}}]); \ No newline at end of file diff --git a/assets/js/ad1d6189.aecf1310.js b/assets/js/ad1d6189.aecf1310.js new file mode 100644 index 0000000..a2735e6 --- /dev/null +++ b/assets/js/ad1d6189.aecf1310.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[1089],{2662:a=>{a.exports=JSON.parse('{"label":"GUI","permalink":"/tags/gui","allTagsPath":"/tags","count":1,"items":[{"id":"User_Manual/gui","title":"Graphical User Interface","description":"Global visual framework","permalink":"/User_Manual/gui"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b1b9faeb.c2a5f77e.js b/assets/js/b1b9faeb.c2a5f77e.js new file mode 100644 index 0000000..fb42d79 --- /dev/null +++ b/assets/js/b1b9faeb.c2a5f77e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[6077],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(r),d=a,f=m["".concat(p,".").concat(d)]||m[d]||c[d]||o;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<o;s++)l[s]=r[s];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},5116:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>c,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(7462),a=(r(7294),r(3905));const o={id:"vocabulary",title:"Vocabulary",sidebar_position:2},l=void 0,i={unversionedId:"User_Manual/vocabulary",id:"User_Manual/vocabulary",title:"Vocabulary",description:"AutoUpdate",source:"@site/docs/User_Manual/Vocabulary.md",sourceDirName:"User_Manual",slug:"/User_Manual/vocabulary",permalink:"/User_Manual/vocabulary",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Vocabulary.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{id:"vocabulary",title:"Vocabulary",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Troubleshooting",permalink:"/User_Manual/troubleshooting"},next:{title:"Graphical User Interface",permalink:"/User_Manual/gui"}},p={},s=[],u={toc:s};function c(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"AutoUpdate"),"\nThe application can update itself."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Attribute"),"\nData associated to a node or an edge. Could be text, numbers, booleans and more."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Clustering"),"\nAlgorithm that group nodes in clusters or communities."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Exporter"),"\nModule that exports in a particular file format."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Generator"),"\nAlgorithm that generates a network."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Graph file"),"\nFile format that describes a graph structure: list of nodes, list of edges and attributes. Example: GEXF."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Importer"),"\nModule that imports a particular file format."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Ranking"),"\nSorting nodes or edges by an attribute's value."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Partition"),"\nVisual clustering. Give colors to categories."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Preview"),"\nDisplay the graph exactly as it is exported."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Project"),"\nA Gephi session, which contains all workspaces and data."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Tool"),"\nWay to interact with the displayed graph."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Vectorial file"),"\nGraphical file format that descibes shapes."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Workspace"),"\nA whole environment for exploring one graph."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bc6c5bae.7ec6ddf8.js b/assets/js/bc6c5bae.7ec6ddf8.js new file mode 100644 index 0000000..14f8e57 --- /dev/null +++ b/assets/js/bc6c5bae.7ec6ddf8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[7398],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),c=s(r),m=i,g=c["".concat(l,".").concat(m)]||c[m]||u[m]||o;return r?n.createElement(g,a(a({ref:t},d),{},{components:r})):n.createElement(g,a({ref:t},d))}));function m(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=c;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:i,a[1]=p;for(var s=2;s<o;s++)a[s]=r[s];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}c.displayName="MDXCreateElement"},5225:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const o={id:"Spigot_importer_with_Wizard",title:"Spigot importer with Wizard",sidebar_position:6},a=void 0,p={unversionedId:"Plugins/Spigot_importer_with_Wizard",id:"Plugins/Spigot_importer_with_Wizard",title:"Spigot importer with Wizard",description:"Introduction",source:"@site/docs/Plugins/Spigot_importer_with_Wizard.md",sourceDirName:"Plugins",slug:"/Plugins/Spigot_importer_with_Wizard",permalink:"/Plugins/Spigot_importer_with_Wizard",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Spigot_importer_with_Wizard.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{id:"Spigot_importer_with_Wizard",title:"Spigot importer with Wizard",sidebar_position:6},sidebar:"tutorialSidebar",previous:{title:"Import",permalink:"/Plugins/import"},next:{title:"Export",permalink:"/Plugins/export"}},l={},s=[{value:"Introduction",id:"introduction",level:2},{value:"Create a new Importer",id:"create-a-new-importer",level:2},{value:"Set Dependencies",id:"set-dependencies",level:3},{value:"Create SpigotImporterBuilder",id:"create-spigotimporterbuilder",level:3},{value:"Create SpigotImporter",id:"create-spigotimporter",level:3},{value:"Finish the builder",id:"finish-the-builder",level:3},{value:"Wizard UI",id:"wizard-ui",level:2},{value:"Create Wizard Panel",id:"create-wizard-panel",level:3},{value:"Create ImporterWizardUI",id:"create-importerwizardui",level:3},{value:"Register the UI",id:"register-the-ui",level:2}],d={toc:s};function u(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,n.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"introduction"},"Introduction"),(0,i.kt)("p",null,"This HowTo shows in about 20 minutes how to create a new spigot in Gephi. Spigots are like file importers, but with a different datasource. Spigots are the best way to import data from various data sources like Web Services, APIs, custom Databases or anything Java can read from. Like Importers, spigots push data to a ",(0,i.kt)("inlineCode",{parentName:"p"},"Container"),", which hosts all data collected (i.e. nodes, edges and attributes). Moreover, spigots user interface supports ",(0,i.kt)("strong",{parentName:"p"},"Wizards"),", which makes it easy to have rich settings and a consistent flow."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"spigot_menu",src:r(99).Z,width:"411",height:"374"})),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"Import Spigot Menu")),(0,i.kt)("p",null,"Please look at [","[Plugin Quick Start]","] to know how to create a new Netbeans Module. When you have your plugin module, that we will call ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigot"),", you can start this tutorial."),(0,i.kt)("p",null,"One can find spigot importer examples in the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/SpigotPlugin/"},"Gephi source code"),"."),(0,i.kt)("h2",{id:"create-a-new-importer"},"Create a new Importer"),(0,i.kt)("h3",{id:"set-dependencies"},"Set Dependencies"),(0,i.kt)("p",null,"Add [","[Import API]","], [","[LongTask API]","], [","[Utilities API]","], [","[Dialogs API]","] and [","[Lookup]","] modules as dependencies for your plugin module MySpigot. See [","[How To Set Module Dependencies]","]."),(0,i.kt)("h3",{id:"create-spigotimporterbuilder"},"Create SpigotImporterBuilder"),(0,i.kt)("p",null,"Importer Builder is a factory class for building the important instance, all Importers should have their own builder."),(0,i.kt)("p",null,"Create a new builder class, for instance ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigotBuilder")," that implements ",(0,i.kt)("a",{parentName:"p",href:"https://gephi.org/docs/api/org/gephi/io/importer/spi/SpigotImporterBuilder.html"},"SpigotImporterBuilder"),"."),(0,i.kt)("p",null,"Leave the ",(0,i.kt)("inlineCode",{parentName:"p"},"buildImporter()")," method empty for the moment and fill the ",(0,i.kt)("inlineCode",{parentName:"p"},"getName()")," methods like below."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public String getName() {\n return "My Spigot";\n}\n \npublic SpigotImporter buildImporter() {\n return null;\n}\n')),(0,i.kt)("p",null,"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"@ServiceProvider")," annotation to your builder class. Add the following line before ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigotBuilder")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = SpigotImporterBuilder.class)\npublic class MySpigotBuilder implements SpigotImporterBuilder {\n...\n")),(0,i.kt)("h3",{id:"create-spigotimporter"},"Create SpigotImporter"),(0,i.kt)("p",null,"The importer is where the job will be done. Create a new spigot importer class, for instance ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigot")," that implements ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/importer/spi/SpigotImporter.html"},"SpigotImporter"),"."),(0,i.kt)("p",null,"For more details, have a look at ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/importer/api/ContainerLoader.html"},"ContainerLoader")," and ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/importer/api/Report.html"},"Report")," documentation."),(0,i.kt)("p",null,"Add also ",(0,i.kt)("inlineCode",{parentName:"p"},"LongTask")," interface to your class, in order you will be able to use progress and cancel management."),(0,i.kt)("p",null,"Your ",(0,i.kt)("inlineCode",{parentName:"p"},"MyImporter")," would look like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public class MySpigot implements SpigotImporter, LongTask {\n \n private ContainerLoader container;\n private Report report;\n private ProgressTicket progressTicket;\n private boolean cancel = false;\n \n public boolean execute(ContainerLoader loader) {\n this.container = loader;\n this.report = new Report();\n //Import done here\n return !cancel;\n }\n \n public ContainerLoader getContainer() {\n return container;\n }\n \n public Report getReport() {\n return report;\n }\n \n public boolean cancel() {\n cancel = true;\n return true;\n }\n \n public void setProgressTicket(ProgressTicket progressTicket) {\n this.progressTicket = progressTicket;\n }\n}\n")),(0,i.kt)("p",null,"The infrastructure is set, the container for pushing data, the report for pushing logs and errors, and the progress management."),(0,i.kt)("p",null,"Look at ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/ImportPlugin"},"File Importers examples")," or ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/gephi/gephi/tree/master/modules/SpigotPlugin/"},"Spigots examples")," code to learn how to push data to the container."),(0,i.kt)("h3",{id:"finish-the-builder"},"Finish the builder"),(0,i.kt)("p",null,"Go back to the ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigotBuilder")," and complete ",(0,i.kt)("inlineCode",{parentName:"p"},"buildImporter()")," method:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public SpigotImporter buildImporter() {\n return new MySpigot();\n}\n")),(0,i.kt)("h2",{id:"wizard-ui"},"Wizard UI"),(0,i.kt)("p",null,"You will create a ",(0,i.kt)("inlineCode",{parentName:"p"},"ImporterWizardUI")," class for your importer and learn how to create a wizard to configure your MySpigot."),(0,i.kt)("p",null,"A wizard is a set of panels, which follow each other with conditions. Consult the ",(0,i.kt)("a",{parentName:"p",href:"http://bits.netbeans.org/dev/javadoc/org-openide-dialogs/index.html?org/openide/WizardDescriptor.html"},"Wizard API Javadoc"),". One can also find a more general tutorial on Netbeans Wizards ",(0,i.kt)("a",{parentName:"p",href:"http://platform.netbeans.org/tutorials/nbm-wizard.html"},"here"),". The ImporterWizardUI class will provide the panels and the title of the spigot importer, as well as its description. But first, create a wizard panel."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"spigot_howto1",src:r(2677).Z,width:"720",height:"515"})),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"My Spigot")),(0,i.kt)("h3",{id:"create-wizard-panel"},"Create Wizard Panel"),(0,i.kt)("p",null,"Create a new Java Panel class named ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigotWizardPanel1"),". Go to File > New File > Swing GUI Forms > JPanel Form."),(0,i.kt)("p",null,"Design your interface, by adding check boxes, text field etc. and go to the Source view."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"spigot_howto_design",src:r(919).Z,width:"266",height:"163"})),(0,i.kt)("p",null,"Create an ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()")," method like below. This method will be called when the user leaves the wizard to actually configure your Spigot with the settings made in the UI."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"public void unsetup(MySpigot importer) {\n //Configure the importer\n \n //Example\n //importer.setOption(optionCheckbox.isSelected());\n}\n")),(0,i.kt)("p",null,"We will now edit this panel to implement the ",(0,i.kt)("a",{parentName:"p",href:"http://bits.netbeans.org/dev/javadoc/org-openide-dialogs/index.html?org/openide/WizardDescriptor.Panel.html"},"WizardDescriptor.Panel")," interface."),(0,i.kt)("p",null,"See below how to implement this class"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public class MySpigotWizardPanel1 extends javax.swing.JPanel implements WizardDescriptor.Panel {\n \n private List<ChangeListener> listeners; //these allow you to tell Gephi when UI changes are made\n \n \n //Generated JPanel code goes here....\n \n \n public Component getComponent() {\n return this;\n }\n \n @Override\n public String getName() {\n return "Select Datasource"; //this will be the title of the panel in the wizard\n }\n \n @Override\n public HelpCtx getHelp() {\n return HelpCtx.DEFAULT_HELP;\n }\n \n /*\n * You can use a settings object to keep track of state. Normally the\n * settings object will be the WizardDescriptor, so you can use\n * WizardDescriptor.getProperty & putProperty to store information entered\n * by the user.\n */\n public void readSettings(Object settings) {\n }\n \n public void storeSettings(Object settings) {\n }\n \n public boolean isValid() {\n return true; //if you implement the change listeners properly, this should contain actual logic\n }\n \n @Override\n public void addChangeListener(ChangeListener cl) {\n if (listeners == null) {\n listeners = new ArrayList();\n }\n \n listeners.add(cl);\n }\n \n @Override\n public void removeChangeListener(ChangeListener cl) {\n listeners.remove(cl);\n }\n}\n')),(0,i.kt)("h3",{id:"create-importerwizardui"},"Create ImporterWizardUI"),(0,i.kt)("p",null,"Create a new spigot wizard UI class, for instance ",(0,i.kt)("inlineCode",{parentName:"p"},"MyImporterWizardUI")," that implements ",(0,i.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/org/gephi/io/importer/spi/ImporterWizardUI.html"},"ImporterWizardUI"),"."),(0,i.kt)("p",null,"This class is a singleton service, and registers your wizard in the system. It has two important methods: ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup"),". The ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()")," method is called when the wizard is closed and is responsible for configuring the actual Spigot importer. In other words, the UI push settings values to the importer not the contrary."),(0,i.kt)("p",null,"The sample below will help you:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},'public class MySpigotWizardUI implements ImporterWizardUI {\n \n private Panel[] panels = null;\n \n @Override\n public String getDisplayName() {\n return "My Spigot Importer";\n }\n \n @Override\n public String getCategory() {\n return "My Spigot";\n }\n \n @Override\n public String getDescription() {\n return "My Spigot imports very cool data";\n }\n \n @Override\n public Panel[] getPanels() {\n if (panels == null) {\n panels = new Panel[1];\n panels[0] = new MySpigotWizardPanel1();\n }\n return panels;\n }\n \n @Override\n public void setup(Panel panel) {\n //Before opening the wizard\n }\n \n @Override\n public void unsetup(SpigotImporter importer, Panel panel) {\n //When the wizard has been closed\n ((MySpigotWizardPanel1) ((Panel) panels[0]).getComponent()).unsetup((MySpigot)importer);\n \n panels = null;\n }\n \n @Override\n public boolean isUIForImporter(Importer importer) {\n return importer instanceof MySpigot;\n }\n}\n')),(0,i.kt)("p",null,"Notice how the ",(0,i.kt)("inlineCode",{parentName:"p"},"unsetup()")," method of ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigotWizardPanel1")," is called."),(0,i.kt)("p",null,"Ideally, this UI class is also responsible for saving the settings, in order to have the same settings the second time the spigot is used. For doing that, use the ",(0,i.kt)("inlineCode",{parentName:"p"},"setup()")," method to load parameters in the panels. "),(0,i.kt)("h2",{id:"register-the-ui"},"Register the UI"),(0,i.kt)("p",null,"Add [","[@ServiceProvider]","] annotation to your UI class. Add the following line before ",(0,i.kt)("inlineCode",{parentName:"p"},"MySpigotWizardUI")," class definition, as shown below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-java"},"@ServiceProvider(service = ImporterWizardUI.class)\npublic class MySpigotWizardUI implements ImporterWizardUI{\n...\n")))}u.isMDXComponent=!0},99:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/00_spigot_menu-43fabe3ba509ac94d1403d9d59d22d3e.png"},2677:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/01_spigot_howto1-d1abe4a5408add177fccd78edd28e723.png"},919:(e,t,r)=>{r.d(t,{Z:()=>n});const n="data:image/png;base64,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"}}]); \ No newline at end of file diff --git a/assets/js/c4686e34.88697520.js b/assets/js/c4686e34.88697520.js new file mode 100644 index 0000000..4416e0c --- /dev/null +++ b/assets/js/c4686e34.88697520.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[9583],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/c67f2107.47c5ca50.js b/assets/js/c67f2107.47c5ca50.js new file mode 100644 index 0000000..786a933 --- /dev/null +++ b/assets/js/c67f2107.47c5ca50.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[3372],{8839:e=>{e.exports=JSON.parse('{"label":"Troubleshooting","permalink":"/tags/troubleshooting","allTagsPath":"/tags","count":1,"items":[{"id":"User_Manual/troubleshooting","title":"Troubleshooting","description":"Memory issues","permalink":"/User_Manual/troubleshooting"}]}')}}]); \ No newline at end of file diff --git a/assets/js/c9a13e5f.4559cba2.js b/assets/js/c9a13e5f.4559cba2.js new file mode 100644 index 0000000..6f1153c --- /dev/null +++ b/assets/js/c9a13e5f.4559cba2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[706],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>h});var o=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,o,i=function(e,t){if(null==e)return{};var n,o,i={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=o.createContext({}),u=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=u(e.components);return o.createElement(p.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},c=o.forwardRef((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,p=e.parentName,s=r(e,["components","mdxType","originalType","parentName"]),c=u(n),h=i,m=c["".concat(p,".").concat(h)]||c[h]||d[h]||l;return n?o.createElement(m,a(a({ref:t},s),{},{components:n})):o.createElement(m,a({ref:t},s))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,a=new Array(l);a[0]=c;var r={};for(var p in t)hasOwnProperty.call(t,p)&&(r[p]=t[p]);r.originalType=e,r.mdxType="string"==typeof e?e:i,a[1]=r;for(var u=2;u<l;u++)a[u]=n[u];return o.createElement.apply(null,a)}return o.createElement.apply(null,n)}c.displayName="MDXCreateElement"},2333:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>r,toc:()=>u});var o=n(7462),i=(n(7294),n(3905));const l={id:"how_to_build_gephi",title:"How to build Gephi",sidebar_position:2},a=void 0,r={unversionedId:"Developer_Documentation/how_to_build_gephi",id:"Developer_Documentation/how_to_build_gephi",title:"How to build Gephi",description:"Follow this guide to start developing the Gephi source code and test your changes.",source:"@site/docs/Developer_Documentation/How_to_build_Gephi.md",sourceDirName:"Developer_Documentation",slug:"/Developer_Documentation/how_to_build_gephi",permalink:"/Developer_Documentation/how_to_build_gephi",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Developer_Documentation/How_to_build_Gephi.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{id:"how_to_build_gephi",title:"How to build Gephi",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Developer Handbook",permalink:"/Developer_Documentation/developer_handbook"},next:{title:"Code Style",permalink:"/Developer_Documentation/code_style"}},p={},u=[{value:"Introduction",id:"introduction",level:2},{value:"Netbeans Platform",id:"netbeans-platform",level:3},{value:"Gephi Architecture",id:"gephi-architecture",level:3},{value:"Build Gephi",id:"build-gephi",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Checkout and Build the sources",id:"checkout-and-build-the-sources",level:3},{value:"Run it",id:"run-it",level:3},{value:"Building Gephi in NetBeans",id:"building-gephi-in-netbeans",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"Code changes not taken in account",id:"code-changes-not-taken-in-account",level:4},{value:"Building Gephi in IntelliJ IDEA",id:"building-gephi-in-intellij-idea",level:2},{value:"Troubleshooting",id:"troubleshooting-1",level:3},{value:"Debugging",id:"debugging",level:4}],s={toc:u};function d(e){let{components:t,...l}=e;return(0,i.kt)("wrapper",(0,o.Z)({},s,l,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"Follow this guide to start developing the Gephi source code and test your changes."),(0,i.kt)("h2",{id:"introduction"},"Introduction"),(0,i.kt)("h3",{id:"netbeans-platform"},"Netbeans Platform"),(0,i.kt)("p",null,'The NetBeans Platform is a generic framework for Swing applications. It provides the "plumbing" that, before, every developer had to write themselves\u2014saving state, connecting actions to menu items, toolbar items and keyboard shortcuts; window management, and so on.'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://netbeans.apache.org/kb/docs/platform/"},"Description")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://bits.netbeans.org/dev/javadoc/"},"Netbeans API Index")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://netbeans.apache.org/wiki/DevFaqIndex.asciidoc"},"FAQ"))),(0,i.kt)("h3",{id:"gephi-architecture"},"Gephi Architecture"),(0,i.kt)("p",null,"Gephi software architecture is modular and therefore each feature is split into modules. Modules depend on each other, and Gephi modules can either depend on other Gephi modules or Netbeans Platform modules. Plugins developers simply create new modules that contains their code, add dependencies to Gephi modules, and distribute their plugins by creating an NBM package. See Gephi APIs documentation to learn more about the API plugins that can be used by modules."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"http://gephi.org/docs/api"},"Gephi APIs documentation"))),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"image",src:n(311).Z,width:"660",height:"300"})),(0,i.kt)("h2",{id:"build-gephi"},"Build Gephi"),(0,i.kt)("h3",{id:"requirements"},"Requirements"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Java JDK 11 or later"),(0,i.kt)("li",{parentName:"ul"},"Apache Maven version 3.2.2 or later")),(0,i.kt)("h3",{id:"checkout-and-build-the-sources"},"Checkout and Build the sources"),(0,i.kt)("p",null,"Navigate to the desired directory you wish to place the project via terminal, then clone the repository:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"git clone https://github.com/gephi/gephi\ncd gephi \n")),(0,i.kt)("p",null,"Gephi uses Maven for building. Each module has its ",(0,i.kt)("inlineCode",{parentName:"p"},"POM.xml")," file and there is a ",(0,i.kt)("inlineCode",{parentName:"p"},"gephi-parent")," POM file that lists all the modules required to build. "),(0,i.kt)("p",null,"Run this command to build all modules. Note that this process could take some time."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"mvn clean install\n")),(0,i.kt)("h3",{id:"run-it"},"Run it"),(0,i.kt)("p",null,"Once built, Gephi can be run from the ",(0,i.kt)("inlineCode",{parentName:"p"},"modules/application")," folder using a special Maven goal:"),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Mac/Linux:")," "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},">> cd modules/application\n>> mvn nbm:cluster-app nbm:run-platform\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Windows:")," "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},">> cd modules\\application\n>> mvn nbm:cluster-app nbm:run-platform\n")),(0,i.kt)("h2",{id:"building-gephi-in-netbeans"},"Building Gephi in NetBeans"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://netbeans.apache.org/"},"Apache Netbeans")," is the default IDE to develop Gephi as it natively integrates with the Netbeans Platform. Loading the project is straightforward."),(0,i.kt)("p",null,"Open Netbeans and go to ",(0,i.kt)("strong",{parentName:"p"},"File > Open Project")," to look for the Gephi folder. Then, ",(0,i.kt)("strong",{parentName:"p"},"Open Project"),'. Ensure the checkbox "Open Required Projects" is not selected.'),(0,i.kt)("p",null,"![Opening Gephi]","(/docs/Developer_Documentation/How-to-build-Gephi/01_Opening Gephi.png)"),(0,i.kt)("p",null,"Right-click on the project and select ",(0,i.kt)("strong",{parentName:"p"},"Clean and Build"),". "),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Build",src:n(499).Z,width:"582",height:"352"})),(0,i.kt)("p",null,"Next, in the ",(0,i.kt)("strong",{parentName:"p"},"Projects")," tab of the file navigator, select ",(0,i.kt)("strong",{parentName:"p"},"Gephi > Modules > gephi-app")," and open the application module."),(0,i.kt)("p",null,"![Open gephi-app]","(/docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png)"),(0,i.kt)("p",null,"Finally, select ",(0,i.kt)("strong",{parentName:"p"},"Run")," from this module."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Run",src:n(5329).Z,width:"556",height:"502"})),(0,i.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,i.kt)("h4",{id:"code-changes-not-taken-in-account"},"Code changes not taken in account"),(0,i.kt)("p",null,"When you make code changes in a module, make sure to ",(0,i.kt)("strong",{parentName:"p"},"Clean and Build")," this module before Running Gephi again as otherwise your changes won't be taken in account."),(0,i.kt)("h2",{id:"building-gephi-in-intellij-idea"},"Building Gephi in IntelliJ IDEA"),(0,i.kt)("p",null,"As Gephi is a Maven project it is well supported by IntelliJ but requires some tweaks to work properly."),(0,i.kt)("p",null,"Open IntelliJ and open the Gephi folder. You'll be asked whether you want to Trust this Maven repository. Select ",(0,i.kt)("strong",{parentName:"p"},"Trust Project"),"."),(0,i.kt)("p",null,"![Trust Maven]","(/docs/Developer_Documentation/How-to-build-Gephi/05_Trust Maven.png)"),(0,i.kt)("p",null,"IntelliJ then takes some time to scan the project and resolve dependencies. Once completed, you should see Gephi properly listed as a project in the Project pane."),(0,i.kt)("p",null,"![Project loaded]","(/docs/Developer_Documentation/How-to-build-Gephi/06_Project loaded.png)"),(0,i.kt)("p",null,"Then, navigate to IntelliJ's preferences panel ",(0,i.kt)("strong",{parentName:"p"},"Build, Execution, Deployment > Build Tools > Maven > Runner")," and select the option ",(0,i.kt)("strong",{parentName:"p"},"Delegate IDE build/run actions to Maven"),". This is a critical step."),(0,i.kt)("p",null,"![Maven delegate config]","(/docs/Developer_Documentation/How-to-build-Gephi/07_Maven delegate config.png)"),(0,i.kt)("p",null,"Next in the top-level menu select ",(0,i.kt)("strong",{parentName:"p"},"Build > Build Project"),"."),(0,i.kt)("p",null,"If it fails with and error like ",(0,i.kt)("inlineCode",{parentName:"p"},"javac flag not found --release"),", you would need to fo back to ",(0,i.kt)("strong",{parentName:"p"},"Build, Execution, Deployment > Build Tools > Maven > Runner")," and add an ",(0,i.kt)("strong",{parentName:"p"},"Environment Variables")," with ",(0,i.kt)("inlineCode",{parentName:"p"},"JAVA_HOME=<path of the selected JDK>")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Build",src:n(8479).Z,width:"556",height:"380"})),(0,i.kt)("p",null,"Once completed, create a run configuration by following ",(0,i.kt)("strong",{parentName:"p"},"Run > Edit Configurations...")," in the top-level menu."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Build",src:n(1841).Z,width:"762",height:"492"})),(0,i.kt)("p",null,"Here, select ",(0,i.kt)("strong",{parentName:"p"},"Add new configuration")," and search for ",(0,i.kt)("strong",{parentName:"p"},"Maven"),"."),(0,i.kt)("p",null,"![Add Maven Config]","(/docs/Developer_Documentation/How-to-build-Gephi/10_Add Maven Config.png)"),(0,i.kt)("p",null,"Next, we'll configure two things here. Enter ",(0,i.kt)("inlineCode",{parentName:"p"},"nbm:cluster-app nbm:run-platform")," into the ",(0,i.kt)("strong",{parentName:"p"},"Command line")," field and select the ",(0,i.kt)("inlineCode",{parentName:"p"},"modules/application")," sub-directory into the ",(0,i.kt)("strong",{parentName:"p"},"Working directory")," chooser. Give Gephi as name for the configuration."),(0,i.kt)("p",null,"![Set Maven Config]","(/docs/Developer_Documentation/How-to-build-Gephi/11_Set Maven Config.png)"),(0,i.kt)("p",null,"Finally, you can run Gephi by selecting ",(0,i.kt)("strong",{parentName:"p"},"Run > Run 'Gephi'")," from the top-level menu."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Run",src:n(2156).Z,width:"748",height:"246"})),(0,i.kt)("h3",{id:"troubleshooting-1"},"Troubleshooting"),(0,i.kt)("h4",{id:"debugging"},"Debugging"),(0,i.kt)("p",null,"At this point (IntelliJ 2021.1) debugging doesn't work out of the box. To enable debugging in IntelliJ follow these steps:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Alter your Run configuration and add ",(0,i.kt)("inlineCode",{parentName:"p"}," -Dnetbeans.run.params.debug=-J-agentlib:jdwp=transport=dt_socket,suspend=n,server=n,address=8000")," to the command line, after ",(0,i.kt)("inlineCode",{parentName:"p"},"nbm:cluster-app nbm:run-platform"),".")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Create a new ",(0,i.kt)("strong",{parentName:"p"},"Remote JVM Debug")," Run configuration and select ",(0,i.kt)("strong",{parentName:"p"},"Listen to Remote JVM"),". Make sure to configure 8000 as the port as well. You can name this configuration ",(0,i.kt)("strong",{parentName:"p"},"Gephi Debug"),". "))),(0,i.kt)("p",null,"Now, start the ",(0,i.kt)("strong",{parentName:"p"},"Gephi Debug")," by selecting the Debug button. The debugger starts and waits for Gephi to start as well. Then, start Gephi in Debug mode. The debugger should now log ",(0,i.kt)("inlineCode",{parentName:"p"},"Connected to the target VM, address: 'localhost:8000', transport: 'socket'")," and properly stop at your breakpoints."))}d.isMDXComponent=!0},311:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApQAAAEsCAMAAABKYNOLAAAA/1BMVEUzMzM9Pj9ISkxTVlldYWVmZmZnZ2doaGhobXJpaWlqampra2tsbGxtbW1ubm5vb29xcXFycnJzc3NzeX90dHR1dXV2dnZ3d3d4eHh5eXl7e3t+fn5+hYx/f3+CgoKEhISGhoaIiIiJkZmLi4uMjIyRkZGSkpKTnKWVlZWXl5eZmZmbm5ucnJydnZ2enp6eqLKioqKmqaunp6eptL+qqqqrq6uwsLC0wMy1u8K2tra3vcS7u7u/v7+/zNnHx8fJ1+XLy8vT09PU4/LX5fPb29vb6vnd3d3e3t7f7//g4ODm5ubo6Ojs7Ozu7u7x8fH09PT39/f5+fn7+/v9/f3///+sNz4aAAAO5ElEQVR42u3da2PUVLuH8X+SVRpoZdAgeBgPLJWBRyBuo64tGqPZgrciirK//2d5XqzMsdOWw0xn0V7XC5yakEkzv8mslSlT/T9RYolDQKAkAiWBkgiUBEoiUBIoiUBJBEoCJREoCZREoCRQEoGSQEkESiJQEiiJtoPyf/7P7OHDRzv749Q9T34HaeMo//eR2aNHtqs/Hp6658nvIG0c5SPbaac/5snvIG0c5W4fcnt06p4nv4N03lBa6igZU+4A5cNHiT/mye8gnTeUD1NHyZiSiQ4THVAy0WGi8yaiDENd/LIP4aS1T1nMRIc2MabUtMybmQXpRMInL97GRGfXzxraBcrCOedcLpWbR7mBic52nzWMKVOc6EjDqWUihVc4FW59orPrZw2d/ZhyhtKcqo2j3MBEZ7vPGiY6aaP0csNj3nlvZma1D2Zm3di5On7ReR//CJUr6zOZ6Gz3WcOYMs0x5fQxH89QTh94J29mtSSpKOTni+P/q85iorPrZw3tEGWfL6qbo2wl14RSWlysKjSF1J7JRGebzxrGlClPdBqnrFv3mJdyZmbVEsqxmfXS5EwmOrt91tAuxpSzalv3mEuNRYILj3k7P0+d1URnO88aJjopoyyq1tahbKcTi2L9eeoMJjrbfNYwpkx7omNrUc5mu247KF/44vmunjV03lBudKKzmx2kHb6js+YxL+Stn66Qbecxf60dBOV5v3i+9Jh3s1FaES+s1HqVx3yT7+hs5VnDROdNQdlLlVlfSN6skXxvdaadTXS2+axhTPmmjCmtknKXxcvRVg0/pLOzic5unzWUCMq+lOT64UGtC6lsU5robO5Zw5gyxYnOMXVh9c0Qp/rlN7Olic5ZPmvo7MeUp4/pivhDDy/wnt1Z/hudDT1rmOi8kSgLFcEsFMq38pNhO37WMKZMcUx5am02DNnaraB8/R3c8rOGEkRpXZVLxbjfzj+H2PGzhjHlGzTRSeff6Oz6WUMJjil3/W90dr2DdN5Q8mEEoNzKmHK7jzmfugbK5MaUfOoaE53zONEBJWNKJjr0mi/fO/xtIPbw4emPefI7SBtH+Xo9GI3uJ/19J7+DoAQlgRKUBEpQghKUBEpQghKUBEpQghKUBEpQEihBCUpQEihBCUpQEihBCUpQEihBCUpQEihBSbtA+ezp02dJo0x5B0G5yZ4/fvx7fMx/vHv3lwS/5eR3EJQb3+I/927dffJgNLr/561rN1N8zJPfQVBu/jG/ffXdbx6MRve/e/vKh7+miDL1HQTlxrf477fXDj76YjS6/fHBta9T/JaT30FQbn6TTz49uPr+aPTB6OCTP5L8npPfQVBuvh+uXz48PHzryjvfJ/pNJ7+DoNx4f39+sL+/v3/w2V+JftPJ7yAoN9/P713a27t086dkv+vkdxCUm+/Ly3t7l+88T/fbTn4HQbnxfru+t3cj5astye8gKDffves3vkr6+05+B0G5pv8QbalXR2lEWwmUBEoiUBIoiUBJoAQlgZJACUoC5ZtXmHhft6eu1odwzBfLX4ahbvi6nd0CJShfqN5nkiQV4TS70jFfmI2lZnpb0zJvZmZOHpSgfInaQsrH3peS6ldHmWUq5ygL55xzueL/AyUoX+48WSiPZ8i+lLoXR7lcrSqf/W1pOOdO4i1QgvKl8spmEgtVr4rSqZ3M6M1QmlMFSlC+7IkyW3jNruXi/6xLV056M7Pga6tLN+6mKEPlysbMrPML0jrl1ik/gtLLzVH2k9K5SQdKUJ5crWyRaBxl5nGW0kZVY2kYbgapliSNV0+bY3kzN53qzFGOF1B2w2YbUILyxMbz6cnsrJfJ1aF2yjozr0xl0xRSMAuSytAUUreCMlNnVk+3NUPZ5/IzlKWKOtTF7HwKSlAeNxY8MtyrBluVKjM/TKALlWYhftFLk2WU8XW/z4apzhRlE2EPdxKvGXUqOlCC8oVQulg7nPXMrJPM/DAjbySzILWzv7SI0sWBaTVsTPPq+Z1kqnomOqB8CZQDomCtNACVgnkV8YVYCjOHqyg7qQkhBD+8NE9FFlW7cCdjScXFnOeA8iXHlG643BNCCIO8WWGYPg8vycehHM//RrM80VmSH1crmOiA8uQaZQuvqYO86XvXoX8xlNnwDo7L4wD0GJTW16Wki3jREpQvVbZoRArWDQPHmB8uGbVSfxzKejah7uII9DiUZmZNsXQRCpSgPNpkQVArBbN8eF+nc743Pyz2Kuw4lE7j6RaKYZ69BmVXaHYFHpSgPLFKqjozs7aKF8zr+ALbFXJmXio6s1qqj0PZLbxlHk+a68+UucrerC+nAwJQgvKEuY6UO5dJcu3ANHNFFOqVS66QKjsO5XiYoA+T9OY4lI0k57LVhaAE5Zq6KpOkrJy9Y51JUtmZmZdrsukPRq5HmWky31ap8tgxZZNLkruAJkH5Si5DWPrB8zaEfpjoOLMQNnc3XKcE5evmL+IIEJSgBCUoQQnKN7vajTkIoCRQgpJASaAEJYGSCJR0rlESpfYrS+hlunN4eIejkPhvHLtoPRiN7nMUQAlKUBIoQQlKUBIoQQlKAiUoQQlKAiUoQUmgBCUoQUmgBCUoCZSgBCUoCZSgBCUoCZSgBCWBEpRvGspnT58+41CAMoGeP378e0T54927v3A8QJlA/9y7dffJg9Ho/p+3rt0EJSiTQHn76rvfPBiN7n/39pUPf+V4gDKB/v322sFHX4xGtz8+uPY1hwOUSfTk04Or749GH4wOPvmDowHKNPrh+uXDw8O3rrzzPccClIn09+cH+/v7+wef/cWxAGUq/fzepb29Szd/4kiAMp2+vLy3d/nOcw4EKNPpt+t7eze4HATKpLp3/cZXHIWto+SjPSm5D03l46WJzzwnUIKSQEkESgIlESgJlESgJFCCkkB5hoXQzW/269fpQruh+4oN99iHcOyqtfcBlBcVpZTPbx51MGnNzMtt6L6GMm9mFqT192d9IakE5cVFKX88ylxhoygL55xzeRS3BmW8PxtLY86UFxql2mNRasMohzuYSGEtymENp4ox5YVGmak4a5RR3UkoPSgvNMrJ9AV8ENHXpSsnvZkFL1W+My9ntXPj6QRltoKZdZPSuSqYmXXeW6hcWce1JqVzk249Si83QznfwnB/wedyvjYzq0vn4j11vu4r5/vgawuVq4JZN54uBOV5QxnGyrq5mTaPc5HWzEuSgnm5SpJU2/IKZvUwdaniGLGefdENazVrUY7nKBe2MNxf/I8za4u4jWBmQa6Q1Hu5uLxpM0kqelCeR5R9Hl+epWDWZXJ1qJ2ybuFMKZWhcVK7vIIFqWxCnUutWZBUhaaQWrNSRR3qYj63X0TZ5/IDysUtrJwp+0LZJNSFsrjxrG68eWUah6ZQnhVNqKQJKM8jSgvxoZWCWTVciqlULYwp48SjULmyQhU5dxqQjc2slyZmUmNmnYruKMpmJnplC8tjykk8G/eFSrMwDDJ83NegOBJ2GxrugjI1lFYp64ebmaKiTlpE2ZuZNdLqCm03bCWibGekMlX9sdcp40AgHNnCMkqnsc3udrpxP8yOhrGEB+V5RdlnKuPNVnIxKcxRxvl5L4WVFcy6MBkXmr0cT0mNJRXL85wZyqJqbeE65XwLyyjjyTbe7WzlqcJhTVCeW5TWSM30lXxWOHJJSAorKzT5cHsVpY2jv/UTHZujXNzCKsqwNMQA5cVCaaWy6Qlp+g516I9BubBCI8lVk3YNSuvrUgvvFx2DcmkLoATlwoPbZRpLwbrZ+ztLF8/jHLqV+uUVCpX94pjSVi59N4Wyk1EubWEZZT7MrFupA+UFRGmT4fU4H97h65xfOFNOBeQrKwwL6iMouyLOh5betVmHcmkLyyirYSg7Vm6gvIgozUWUg46ukJvNNbxUdGa1VK+skKkysyY7eqbMVfZmfbmIZh3KpS1M5zYRZYhXopbFg/IioeyyeLOSMlcM79jkylxrXkUmVww/Tba4gpdylyvLF942jKQaSc5lSw7XoVzawnB/0wGAlzKXxyuSoLyIKOcv0pkkld3wqqqJebk2l4bLhksrjCWp6hpl/cqYMs6qXTht9r24heH+ZqPSJj/yw5egvKD/HKKd/wx6P7u5+HPpa1c4UrfwU+0ntLSF1c21G/qhd1ASgZJAycEjUBIoQUmgJAIlgZIIlHThUBKl9itL6GW6c3h4h6PAbxxLqgej0X2OAihBCUoCJShBCUoCJShBSaAEJShBSaAEJSgJlKAEJSgJlKAEJYESlKAEJYESlKAEJYESlKAkUILyTUP57OnTZxwKUCbQ88ePf48of7x79xeOBygT6J97t+4+eTAa3f/z1rWboARlEihvX333mwej0f3v3r7y4a8cD1Am0L/fXjv46IvR6PbHB9e+5nCAMomefHpw9f3R6IPRwSd/cDRAmUY/XL98eHj41pV3vudYgDKR/v78YH9/f//gs784FqBMpZ/fu7S3d+nmTxwJUKbTl5f39i7fec6BAGU6/XZ9b+8Gl4NAmVT3rt/4iqOwdZR8tCcl96GpfLw08ZnnBEpQEiiJQEmgJAIlgZIIlARKUBIo39z6EDgIoEyrIHEQQAlKUIISlKAEJShBuRGU3aR0rgpm1vg6LvI+LC0gUJ4pylqxyqxWZmZmrdQuLSBQniXKIJVNqHOptV5qzMzGypcXECjPEmUlZ2bWSd6sjKfFXOOVBQTKs3z5bjszM5P89PU7vnovLSBQnu3suwuTcSF5sz5TY+aVry4gUJ4lyiYfJjTezCpVZoXGRxYQKLftcY6ykeSqSRvtNcqsi6/eywsIlGdxioz/KVT2C0PHTM0kXhhaWUCg3GatFMysVm5m8bbVg71K4yJOwVcWECi3WqbSrI/4MlVm1mSDvUb5cLFyZQGBcqtNpNxlyjoz81LucmV5vCxpuYa3dVYXECi3ms8kFfGdmrEkVV2jrB++HN5XXFlAoNz2ZCd005t9COvVHbuAQEmgJAIlgZIIlARKUBIoCZSgJFASbRQlUWq/soSI3zhGBEoCJREoCZREoCRQEoGSQEkESiJQEiiJQEmgJAIlgZIIlESgJFASgZJASQRKAiXRmfRfTTP8J/nBHPcAAAAASUVORK5CYII="},499:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/02_Build-5d072826e1e7f557b1efbc4effc9a366.png"},5329:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/04_Run-3899271660669251844fc9db4cc1c085.png"},8479:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/08_Build-d52324a4a065eb0171a086612a91cc23.png"},1841:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/09_Build-0643eee6daba2e8ca61b12f58dc340f4.png"},2156:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/12_Run-197cf774fb247b33d9a230209110a092.png"}}]); \ No newline at end of file diff --git a/assets/js/cfc8f0db.a7fff369.js b/assets/js/cfc8f0db.a7fff369.js new file mode 100644 index 0000000..64aa8b0 --- /dev/null +++ b/assets/js/cfc8f0db.a7fff369.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[2153],{3691:e=>{e.exports=JSON.parse('{"label":"Cluster","permalink":"/tags/cluster","allTagsPath":"/tags","count":1,"items":[{"id":"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","title":"Layouts, clusters, and where to find them","description":"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s","permalink":"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them"}]}')}}]); \ No newline at end of file diff --git a/assets/js/dc64227d.5a3657c1.js b/assets/js/dc64227d.5a3657c1.js new file mode 100644 index 0000000..0850ba9 --- /dev/null +++ b/assets/js/dc64227d.5a3657c1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[2830],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>c});var r=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function n(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,l=function(e,t){if(null==e)return{};var a,r,l={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var u=r.createContext({}),o=function(e){var t=r.useContext(u),a=t;return e&&(a="function"==typeof e?e(t):n(n({},t),e)),a},p=function(e){var t=o(e.components);return r.createElement(u.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,l=e.mdxType,i=e.originalType,u=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),m=o(a),c=l,g=m["".concat(u,".").concat(c)]||m[c]||d[c]||i;return a?r.createElement(g,n(n({ref:t},p),{},{components:a})):r.createElement(g,n({ref:t},p))}));function c(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var i=a.length,n=new Array(i);n[0]=m;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s.mdxType="string"==typeof e?e:l,n[1]=s;for(var o=2;o<i;o++)n[o]=a[o];return r.createElement.apply(null,n)}return r.createElement.apply(null,a)}m.displayName="MDXCreateElement"},4791:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>n,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>o});var r=a(7462),l=(a(7294),a(3905));const i={id:"de\u0301marrage-rapide-fr",title:"De\u0301marrage rapide (FR)",sidebar_position:2},n="Tutoriel Gephi <br/> D\xe9marrage rapide",s={unversionedId:"Plugins/de\u0301marrage-rapide-fr",id:"Plugins/de\u0301marrage-rapide-fr",title:"De\u0301marrage rapide (FR)",description:"Bienvenue sur ce tutoriel. Vous apprendrez ici les \xe9tapes fondamentales pour visualiser et manipuler un r\xe9seau dans Gephi.",source:"@site/docs/Plugins/De\u0301marrage_rapide_(FR).md",sourceDirName:"Plugins",slug:"/Plugins/de\u0301marrage-rapide-fr",permalink:"/Plugins/de\u0301marrage-rapide-fr",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/De\u0301marrage_rapide_(FR).md",tags:[],version:"current",sidebarPosition:2,frontMatter:{id:"de\u0301marrage-rapide-fr",title:"De\u0301marrage rapide (FR)",sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Plugin Quick Start",permalink:"/Plugins/Plugin_Quick_Start"},next:{title:"Layout",permalink:"/Plugins/layout"}},u={},o=[{value:"Ouverture d\u2019un fichier graphe",id:"ouverture-dun-fichier-graphe",level:2},{value:"Rapport d\u2019import",id:"rapport-dimport",level:2},{value:"Affichage du graphe",id:"affichage-du-graphe",level:2},{value:"Visualisation du graphe",id:"visualisation-du-graphe",level:2},{value:"Spatialisation du graphe",id:"spatialisation-du-graphe",level:2},{value:"Contr\xf4le de la spatialisation",id:"contr\xf4le-de-la-spatialisation",level:2},{value:"Affichage du graphe spatialis\xe9",id:"affichage-du-graphe-spatialis\xe9",level:2},{value:"Classement (par couleur)",id:"classement-par-couleur-1",level:2},{value:"Configuration des couleurs",id:"configuration-des-couleurs",level:2},{value:"Tableau des r\xe9sultats du classement",id:"tableau-des-r\xe9sultats-du-classement",level:2},{value:"M\xe9triques",id:"m\xe9triques-1",level:2},{value:"Configuration des m\xe9triques",id:"configuration-des-m\xe9triques",level:2},{value:"R\xe9sultat des m\xe9triques",id:"r\xe9sultat-des-m\xe9triques",level:2},{value:"Classement (par taille)",id:"classement-par-taille-1",level:2},{value:"Graphe avec diff\xe9renciation de couleurs et de tailles",id:"graphe-avec-diff\xe9renciation-de-couleurs-et-de-tailles",level:2},{value:"Nouvelle spatialisation",id:"nouvelle-spatialisation-1",level:2},{value:"Affichage des labels",id:"affichage-des-labels-1",level:2},{value:"D\xe9tection de communaut\xe9",id:"d\xe9tection-de-communaut\xe9-1",level:2},{value:"Partition",id:"partition-1",level:2},{value:"Nouvelle apparence du r\xe9seau",id:"nouvelle-apparence-du-r\xe9seau",level:2},{value:"Filtrage",id:"filtrage-1",level:2},{value:"R\xe9seau filtr\xe9",id:"r\xe9seau-filtr\xe9",level:2},{value:"Pr\xe9visualisation",id:"pr\xe9visualisation-1",level:2},{value:"Pr\xe9visualisation du graphe",id:"pr\xe9visualisation-du-graphe",level:2},{value:"Export au format SVG",id:"export-au-format-svg",level:2},{value:"Enregistrement du projet",id:"enregistrement-du-projet",level:2}],p=(d="STRONG",function(e){return console.warn("Component "+d+" was not imported, exported, or provided by MDXProvider as global scope"),(0,l.kt)("div",e)});var d;const m={toc:o};function c(e){let{components:t,...a}=e;return(0,l.kt)("wrapper",(0,r.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"tutoriel-gephi--d\xe9marrage-rapide"},"Tutoriel Gephi ",(0,l.kt)("br",null)," D\xe9marrage rapide"),(0,l.kt)("p",null,"Bienvenue sur ce tutoriel. Vous apprendrez ici les \xe9tapes fondamentales pour visualiser et manipuler un r\xe9seau dans Gephi. "),(0,l.kt)("p",null,"Ce tutoriel se base sur la version 0.7alpha2 de Gephi.",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("a",{parentName:"p",href:"https://gephi.org/users/download/"},"T\xe9l\xe9charger Gephi")," "),(0,l.kt)("h1",{id:"import-de-fichiers"},"Import de fichiers"),(0,l.kt)("h2",{id:"ouverture-dun-fichier-graphe"},"Ouverture d\u2019un fichier graphe"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"T\xe9l\xe9chargez le fichier ",(0,l.kt)("a",{parentName:"li",href:"https://gephi.org/datasets/LesMiserables.gexf"},"LesMiserables.gexf")," "),(0,l.kt)("li",{parentName:"ul"},"Dans la barre de menu, allez dans le menu ",(0,l.kt)("strong",{parentName:"li"},"Fichier")," et ",(0,l.kt)("strong",{parentName:"li"},"Ouvrir...")," ")),(0,l.kt)("p",null,"~~ Image : tutorial_quickstart1_FR ~~ "),(0,l.kt)(p,{mdxType:"STRONG"},"Format des graphes"),"- GEXF - GraphML - Pajek NET - GDF - GML - Tulip TLP - CSV - ZIP compress\xe9",(0,l.kt)("h2",{id:"rapport-dimport"},"Rapport d\u2019import"),(0,l.kt)("ul",null,(0,l.kt)("li",null,"Lorsque votre fichier s\u2019ouvre, le rapport r\xe9capitule les donn\xe9es trouv\xe9es et les probl\xe8mes rencontr\xe9s."),(0,l.kt)("ul",null,(0,l.kt)("li",null,"Nombre de noeuds"),(0,l.kt)("li",null,"Nombre de liens"),(0,l.kt)("li",null,"Type de graphe"))),"* Cliquez sur **OK** pour valider et visualiser le graphe.",(0,l.kt)("p",null,"~~ Image : tutorial_quickstart2_FR ~~ "),(0,l.kt)("h2",{id:"affichage-du-graphe"},"Affichage du graphe"),(0,l.kt)("p",null,"Nous avons import\xe9 le fichier de donn\xe9es LesMiserables.gexf",(0,l.kt)("sup",null,"1"),". Il s\u2019agit du r\xe9seau pond\xe9r\xe9 des apparitions simultan\xe9es des personnages du roman ",(0,l.kt)("em",{parentName:"p"},"Les Mis\xe9rables")," de Victor Hugo.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : ? ~~ "),(0,l.kt)("p",null,"Les noeuds sont d\u2019abord plac\xe9s de mani\xe8re al\xe9atoire, la pr\xe9sentation que vous voyez peut donc diff\xe9rer l\xe9g\xe8rement. "),(0,l.kt)("cite",null,(0,l.kt)("sup",null,"1"),"D. E. Knuth, The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley, Reading, MA (1993)"),(0,l.kt)("h1",{id:"visualisation"},"Visualisation"),(0,l.kt)("h2",{id:"visualisation-du-graphe"},"Visualisation du graphe"),(0,l.kt)("ul",null,(0,l.kt)("li",null,"Utilisez votre souris pour vous d\xe9placer dans la visualisation et modifier son \xe9chelle."),(0,l.kt)("ul",null,(0,l.kt)("li",null,"Zoom : Molette de la souris"),"~~ Image : ? ~~",(0,l.kt)("li",null,"Panoramique : Glisser \xe0 droite"),"~~ Image : ? ~~")),"* L\u2019**\xe9chelle du poids des liens** se trouve en bas de la fen\xeatre.",(0,l.kt)("p",null,"~~ Image : gephi_configure_labels__bisFR ~~"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Si vous ne voyez plus votre graphe, r\xe9initialisez l\u2019\xe9chelle. ")),(0,l.kt)("p",null,"~~ Image : ? ~~ "),(0,l.kt)("h1",{id:"spatialisation"},"Spatialisation"),(0,l.kt)("h2",{id:"spatialisation-du-graphe"},"Spatialisation du graphe"),(0,l.kt)("p",null,"La fonction principale des algorithmes de spatialisation est de d\xe9finir la forme du graphe. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Rep\xe9rez le module ",(0,l.kt)("strong",{parentName:"li"},"Spatialisation")," dans le volet \xe0 gauche de l\u2019\xe9cran. "),(0,l.kt)("li",{parentName:"ul"},"S\xe9lectionnez ",(0,l.kt)("strong",{parentName:"li"},"Force Atlas"),".",(0,l.kt)("br",{parentName:"li"}),"Vous pouvez voir les propri\xe9t\xe9s de la spatialisation sous son nom. Conservez les valeurs. "),(0,l.kt)("li",{parentName:"ul"},"Pour lancer l\u2019algorithme, cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"Ex\xe9cuter"),". ")),(0,l.kt)(p,{mdxType:"STRONG"},"Algorithmes de spatialisation"),"La spatialisation des graphes est g\xe9n\xe9ralement r\xe9alis\xe9e \xe0 partir d\u2019algorithmes bas\xe9s sur les forces. Ils suivent un principe simple : les noeuds reli\xe9s s\u2019attirent et les noeuds non reli\xe9s se repoussent.",(0,l.kt)("h2",{id:"contr\xf4le-de-la-spatialisation"},"Contr\xf4le de la spatialisation"),(0,l.kt)("p",null,"Les propri\xe9t\xe9s de spatialisation vous permettent de contr\xf4ler l\u2019algorithme afin de g\xe9n\xe9rer une repr\xe9sentation esth\xe9tique.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart9_FR ~~"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Pour agrandir le graphe, r\xe9glez la ",(0,l.kt)("strong",{parentName:"li"},"Force de r\xe9pulsion")," sur 10 000. "),(0,l.kt)("li",{parentName:"ul"},"Pour valider la valeur modifi\xe9e, appuyez sur la touche ",(0,l.kt)("strong",{parentName:"li"},"Entr\xe9e")," de votre clavier. "),(0,l.kt)("li",{parentName:"ul"},"Vous pouvez maintenant ",(0,l.kt)("strong",{parentName:"li"},"Arr\xeater")," l\u2019algorithme. ")),(0,l.kt)("h2",{id:"affichage-du-graphe-spatialis\xe9"},"Affichage du graphe spatialis\xe9"),(0,l.kt)("p",null,"~~ Image : ? ~~ "),(0,l.kt)("h1",{id:"classement-par-couleur"},"Classement (par couleur)"),(0,l.kt)("h2",{id:"classement-par-couleur-1"},"Classement (par couleur)"),(0,l.kt)("p",null,"Le module ",(0,l.kt)("strong",{parentName:"p"},"Classement")," vous permet de configurer la couleur et la taille d\u2019un noeud. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Cliquez sur le module ",(0,l.kt)("strong",{parentName:"li"},"Classement")," en haut \xe0 gauche de l\u2019\xe9cran. "),(0,l.kt)("li",{parentName:"ul"},"S\xe9lectionnez ",(0,l.kt)("strong",{parentName:"li"},"Degr\xe9")," comme param\xe8tre de classement. ")),(0,l.kt)("p",null,"~~ Image : tutorial_quickstart12_FR ~~ "),(0,l.kt)("p",null,"Le panneau de configuration suivant s\u2019affiche :",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart13_FR ~~ "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"Appliquer")," pour afficher le r\xe9sultat. ")),(0,l.kt)("h2",{id:"configuration-des-couleurs"},"Configuration des couleurs"),(0,l.kt)("p",null,"~~ Image : tutorial_quickstart13_FR ~~ "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"D\xe9placez la souris sur le curseur de d\xe9grad\xe9.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : ? ~~ "),(0,l.kt)("li",{parentName:"ul"},"Pour configurer la couleur, double-cliquez sur les triangles.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : ? ~~ ")),(0,l.kt)(p,{mdxType:"STRONG"},"Palette"),"Pour utiliser la palette, double-cliquez sur le volet. ~~ Image : tutorial_quickstart17_FR + ? ~~",(0,l.kt)("h2",{id:"tableau-des-r\xe9sultats-du-classement"},"Tableau des r\xe9sultats du classement"),(0,l.kt)("p",null,"Vous pouvez voir les valeurs du classement en affichant le tableau des r\xe9sultats. Le noeud Valjean poss\xe8de 36 liens et est le plus connect\xe9 du r\xe9seau. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Activez l\u2019affichage des r\xe9sultats sous forme de tableau. "),(0,l.kt)("li",{parentName:"ul"},"Cliquez \xe0 nouveau sur le bouton ",(0,l.kt)("strong",{parentName:"li"},"Appliquer"),". ")),(0,l.kt)("p",null,"~~ Image : tutorial_quickstart18_FR ~~ "),(0,l.kt)("h1",{id:"m\xe9triques"},"M\xe9triques"),(0,l.kt)("h2",{id:"m\xe9triques-1"},"M\xe9triques"),(0,l.kt)("p",null,"Nous allons calculer la longueur de chemin moyenne pour le r\xe9seau. Cela permet de calculer la longueur du chemin entre toutes les paires de noeuds et de fournir des informations sur la distance entre les noeuds. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Dans le volet droit, cliquez sur le module ",(0,l.kt)("strong",{parentName:"li"},"Statistiques"),". "),(0,l.kt)("li",{parentName:"ul"},"Cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"Ex\xe9cuter")," en face de ",(0,l.kt)("strong",{parentName:"li"},"Plus courts chemins"),". ")),(0,l.kt)("p",null,"~~ Image : tutorial_quickstart19_FR ~~"),(0,l.kt)(p,{mdxType:"STRONG"},"M\xe9triques disponibles"),"- Diam\xe8tre - Plus courts chemins - Coefficient de Clustering - PageRank - HITS - Betweeness Centrality - Closeness Centrality - Excentricit\xe9 - D\xe9tection de communaut\xe9 (Modularit\xe9)",(0,l.kt)("h2",{id:"configuration-des-m\xe9triques"},"Configuration des m\xe9triques"),(0,l.kt)("p",null,"Le panneau de configuration s\u2019affiche.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart20_FR ~~",(0,l.kt)("br",{parentName:"p"}),"\n","Pour calculer la m\xe9trique, s\xe9lectionnez ",(0,l.kt)("strong",{parentName:"p"},"Dirig\xe9"),", puis cliquez sur ",(0,l.kt)("strong",{parentName:"p"},"OK"),". "),(0,l.kt)("h2",{id:"r\xe9sultat-des-m\xe9triques"},"R\xe9sultat des m\xe9triques"),(0,l.kt)("p",null,"\xc0 la fin du traitement, le r\xe9sultat de la m\xe9trique est affich\xe9 dans un rapport.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart21 ~~ "),(0,l.kt)("h1",{id:"classement-par-taille"},"Classement (par taille)"),(0,l.kt)("h2",{id:"classement-par-taille-1"},"Classement (par taille)"),(0,l.kt)("p",null,"Les m\xe9triques g\xe9n\xe8rent des rapports g\xe9n\xe9raux ainsi que les r\xe9sultats pour chaque noeud.",(0,l.kt)("br",{parentName:"p"}),"\n","Ainsi, trois nouvelles valeurs ont \xe9t\xe9 cr\xe9\xe9es par l\u2019algorithme ",(0,l.kt)("strong",{parentName:"p"},"Plus courts chemins"),". "),(0,l.kt)("ul",null,(0,l.kt)("li",null,"**Betweeness Centrality**"),(0,l.kt)("li",null,"**Closeness Centrality**"),(0,l.kt)("li",null,"**Excentricit\xe9**")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Retournez sur l\u2019onglet ",(0,l.kt)("strong",{parentName:"li"},"Classement"),". "),(0,l.kt)("li",{parentName:"ul"},"S\xe9lectionnez ",(0,l.kt)("strong",{parentName:"li"},"Betweeness Centrality")," dans la liste d\xe9roulante.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart22_FR ~~",(0,l.kt)("br",{parentName:"li"}),"Cette m\xe9trique fait ressortir les noeuds les plus importants dont la fr\xe9quence est la plus \xe9lev\xe9e. ")),(0,l.kt)("p",null,"\xc0 pr\xe9sent, param\xe9trez la taille des noeuds. L\u2019indicateur de ",(0,l.kt)("strong",{parentName:"p"},"Degree")," (Degr\xe9) est toujours repr\xe9sent\xe9 par des couleurs. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Pour d\xe9finir la taille, s\xe9lectionnez l\u2019ic\xf4ne en forme de diamant dans la barre d\u2019outils. "),(0,l.kt)("li",{parentName:"ul"},"D\xe9finissez la taille minimale sur 10 et la taille maximale sur 50.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart23_FR ~~ "),(0,l.kt)("li",{parentName:"ul"},"Pour voir le r\xe9sultat, cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"Appliquer"),". ")),(0,l.kt)("h2",{id:"graphe-avec-diff\xe9renciation-de-couleurs-et-de-tailles"},"Graphe avec diff\xe9renciation de couleurs et de tailles"),(0,l.kt)("p",null,"~~ Image : ? ~~",(0,l.kt)("br",{parentName:"p"}),"\n","Couleur : Degree (Degr\xe9)",(0,l.kt)("br",{parentName:"p"}),"\n","Taille : M\xe9trique ",(0,l.kt)("strong",{parentName:"p"},"Betweeness Centrality")," "),(0,l.kt)("h1",{id:"nouvelle-spatialisation"},"Nouvelle spatialisation"),(0,l.kt)("h2",{id:"nouvelle-spatialisation-1"},"Nouvelle spatialisation"),(0,l.kt)("p",null,"La spatialisation n\u2019est pas totalement satisfaisante. En effet, des noeuds de grande taille chevauchent parfois des noeuds plus petits.",(0,l.kt)("br",{parentName:"p"}),"\n","L\u2019algorithme ",(0,l.kt)("strong",{parentName:"p"},"Force Atlas")," dispose d\u2019une option qui permet de prendre la taille des noeuds en consid\xe9ration lors de la spatialisation. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Retournez sur le volet ",(0,l.kt)("strong",{parentName:"li"},"Spatialisation"),". "),(0,l.kt)("li",{parentName:"ul"},"Cochez l\u2019option ",(0,l.kt)("strong",{parentName:"li"},"Ajustement par taille"),", puis ex\xe9cutez \xe0 nouveau l\u2019algorithme pendant quelques instants. "),(0,l.kt)("li",{parentName:"ul"},"Les noeuds ne se chevauchent plus d\xe9sormais. ")),(0,l.kt)("p",null,"~~ Image : tutorial_quickstart26_FR ~~"),(0,l.kt)("h1",{id:"affichage-des-labels"},"Affichage des labels"),(0,l.kt)("h2",{id:"affichage-des-labels-1"},"Affichage des labels"),(0,l.kt)("p",null,"Explorons le r\xe9seau plus en d\xe9tails maintenant que les couleurs et la taille mettent en valeur les noeuds importants.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart27_FR ~~ "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Affichez les labels des noeuds.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart ~~"),(0,l.kt)("li",{parentName:"ul"},"Param\xe9trez l\u2019affichage des labels afin que leur taille soit proportionnelle \xe0 celle des noeuds.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : gephi_configure_labels__bisbisFR ~~ "),(0,l.kt)("li",{parentName:"ul"},"Pour r\xe9gler la taille des labels, faites glisser le curseur de l\u2019\xe9chelle.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : gephi_configure_labels__bisbisbisFR ~~ ")),(0,l.kt)("h1",{id:"d\xe9tection-de-communaut\xe9"},"D\xe9tection de communaut\xe9"),(0,l.kt)("h2",{id:"d\xe9tection-de-communaut\xe9-1"},"D\xe9tection de communaut\xe9"),(0,l.kt)("p",null,"La capacit\xe9 \xe0 d\xe9tecter et \xe0 \xe9tudier les communaut\xe9s est essentielle \xe0 l\u2019analyse du r\xe9seau. Dans notre exemple, nous souhaitons colorer les groupes de noeuds.",(0,l.kt)("br",{parentName:"p"}),"\n","Gephi utilise la m\xe9thode Louvain",(0,l.kt)("sup",null,"1"),", disponible dans le volet ",(0,l.kt)("strong",{parentName:"p"},"Statistiques"),".",(0,l.kt)("br",{parentName:"p"}),"\n","Cliquez sur ",(0,l.kt)("strong",{parentName:"p"},"Ex\xe9cuter")," en regard de la ligne ",(0,l.kt)("strong",{parentName:"p"},"Modularit\xe9"),".",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart28_FR ~~ "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"S\xe9lectionnez ",(0,l.kt)("strong",{parentName:"li"},"Al\xe9atoire")," dans le volet. "),(0,l.kt)("li",{parentName:"ul"},"Pour lancer la d\xe9tection, cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"OK"),".\n~~ Image : tutorial_quickstart29_FR ~~ ")),(0,l.kt)("cite",null,(0,l.kt)("sup",null,"1"),"Blondel V, Guillaume J, Lambiotte R, Mech E (2008) Fast unfolding of communities in large networks. J Stat Mech : Theory Exp 2008:P10008. (http://findcommunities.googlepages.com)"),(0,l.kt)("h1",{id:"partition"},"Partition"),(0,l.kt)("h2",{id:"partition-1"},"Partition"),(0,l.kt)("p",null,"L\u2019algorithme de d\xe9tection de communaut\xe9 a cr\xe9\xe9 une valeur de ",(0,l.kt)("strong",{parentName:"p"},"Modularity Class")," (classe de modularit\xe9) pour chaque noeud.",(0,l.kt)("br",{parentName:"p"}),"\n","Le module ",(0,l.kt)("strong",{parentName:"p"},"Partition")," peut utiliser ces nouvelles donn\xe9es pour colorer les communaut\xe9s. "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Dans le volet gauche, cliquez sur le module ",(0,l.kt)("strong",{parentName:"li"},"Partition"),". "),(0,l.kt)("li",{parentName:"ul"},"Pour remplir la liste de partitions, cliquez sur le bouton ",(0,l.kt)("strong",{parentName:"li"},"Rafra\xeechir"),".",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart30_FR ~~ ")),(0,l.kt)(p,{mdxType:"STRONG"},"Comment visualiser les colonnes affichant les noeuds et les liens ?"),"Pour afficher les colonnes et les valeurs des noeuds et des liens, consultez le **Tableau de donn\xe9es**. Pour actualiser le tableau, cliquez sur l\u2019onglet **Laboratoire des donn\xe9es**, puis cliquez sur **Noeuds**.",(0,l.kt)("br",null),"* Dans la liste de partitions, s\xe9lectionnez **Modularity Class** (classe de modularit\xe9). Dans l\u2019exemple ci-dessous, neuf communaut\xe9s ont \xe9t\xe9 trouv\xe9es. Le nombre de communaut\xe9s est variable. Une couleur a \xe9t\xe9 d\xe9finie au hasard pour chaque identifiant de communaut\xe9. ~~ Image : tutorial_quickstart31_FR ~~ * Pour afficher les noeuds en couleur, cliquez sur **Appliquer**. Pour acc\xe9der \xe0 la fonction **G\xe9n\xe9rer les couleurs al\xe9atoirement**, cliquez sur le volet \xe0 l\u2019aide du bouton droit de la souris. ~~ Image : tutorial_quickstart33_FR ~~",(0,l.kt)("h2",{id:"nouvelle-apparence-du-r\xe9seau"},"Nouvelle apparence du r\xe9seau"),(0,l.kt)("p",null,"~~ Image : ? ~~ "),(0,l.kt)("h1",{id:"filtrage"},"Filtrage"),(0,l.kt)("h2",{id:"filtrage-1"},"Filtrage"),(0,l.kt)("p",null,"Le filtrage constitue la derni\xe8re manipulation. Il est possible de cr\xe9er des filtres permettant de masquer certains noeuds et liens du r\xe9seau. Dans cet exemple, nous allons cr\xe9er un filtre afin de supprimer les feuilles, c\u2019est-\xe0-dire les noeuds \xe0 lien unique.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart34_FR ~~ "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Dans le volet droit, cliquez sur le module ",(0,l.kt)("strong",{parentName:"li"},"Filtres"),". "),(0,l.kt)("li",{parentName:"ul"},"Dans la cat\xe9gorie ",(0,l.kt)("strong",{parentName:"li"},"Topologie"),", s\xe9lectionnez ",(0,l.kt)("strong",{parentName:"li"},"Plage de degr\xe9s"),".",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart35_FR ~~ "),(0,l.kt)("li",{parentName:"ul"},"Sous ",(0,l.kt)("strong",{parentName:"li"},"Requ\xeates"),", faites glisser l\u2019option sur ",(0,l.kt)("strong",{parentName:"li"},"Glissez")," le filtre ici.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart36_FR ~~ "),(0,l.kt)("li",{parentName:"ul"},"Pour activer le filtre, cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"Plage de degr\xe9s"),". Le volet des param\xe8tres s\u2019affiche.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart37_FR ~~",(0,l.kt)("br",{parentName:"li"}),"Ce volet comprend un curseur de r\xe9glage de la plage de degr\xe9s ainsi qu\u2019un graphique repr\xe9sentant les donn\xe9es, ici la r\xe9partition par degr\xe9s.",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart39_FR ~~ "),(0,l.kt)("li",{parentName:"ul"},"D\xe9placez le curseur de gauche afin de r\xe9gler le degr\xe9 minimum sur 2. "),(0,l.kt)("li",{parentName:"ul"},"Pour appliquer le filtre, cliquez sur le bouton ",(0,l.kt)("strong",{parentName:"li"},"Filtrer"),".",(0,l.kt)("br",{parentName:"li"}),"Les noeuds dont le degr\xe9 est inf\xe9rieur \xe0 2 sont d\xe9sormais masqu\xe9s. ")),(0,l.kt)(p,{mdxType:"STRONG"},"Astuce"),"Pour modifier les limites des degr\xe9s, double-cliquez sur les valeurs correspondantes. ~~ Image : ? ~~",(0,l.kt)("h2",{id:"r\xe9seau-filtr\xe9"},"R\xe9seau filtr\xe9"),(0,l.kt)("p",null,"~~ Image : ? ~~",(0,l.kt)("br",{parentName:"p"}),"\n","La manipulation est termin\xe9e. Nous allons \xe0 pr\xe9sent pr\xe9visualiser la mod\xe9lisation et pr\xe9parer l\u2019export. "),(0,l.kt)("h1",{id:"pr\xe9visualisation"},"Pr\xe9visualisation"),(0,l.kt)("h2",{id:"pr\xe9visualisation-1"},"Pr\xe9visualisation"),(0,l.kt)("ul",null,(0,l.kt)("li",null,"Avant d\u2019exporter le graphe au format SVG ou PDF, allez sur la **Pr\xe9visualisation** pour :"),(0,l.kt)("ul",null,(0,l.kt)("li",null,"obtenir un aper\xe7u exact du graphe ;"),(0,l.kt)("li",null,"y apporter la touche finale."))),"* Dans le ruban, s\xe9lectionnez l\u2019onglet **Pr\xe9visualisation** : ~~ Image : tutorial_quickstart41_FR ~~ * Pour afficher la pr\xe9visualisation, cliquez sur **Rafra\xeechir**. ~~ Image : tutorial_quickstart_preview_FR ~~",(0,l.kt)(p,{mdxType:"STRONG"},"Astuce"),"Si le graphe est trop grand, vous pouvez afficher un graphe partiel en d\xe9pla\xe7ant le curseur du **Ratio** \xe0 50 % ou \xe0 25 %.",(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Dans la cat\xe9gorie ",(0,l.kt)("strong",{parentName:"li"},"Labels de noeud"),", activez la case \xe0 cocher ",(0,l.kt)("strong",{parentName:"li"},"Afficher les labels"),". "),(0,l.kt)("li",{parentName:"ul"},"Cliquez sur ",(0,l.kt)("strong",{parentName:"li"},"Pr\xe9visualiser"),".",(0,l.kt)("br",{parentName:"li"}),"~~ Image : tutorial_quickstart44_FR ~~",(0,l.kt)("br",{parentName:"li"}),"Dans les ",(0,l.kt)("strong",{parentName:"li"},"Param\xe8tres d\u2019aper\xe7u"),", cliquez sur la liste de ",(0,l.kt)("strong",{parentName:"li"},"R\xe9glages")," pr\xe9d\xe9finis et essayez diff\xe9rentes configurations. ")),(0,l.kt)("h2",{id:"pr\xe9visualisation-du-graphe"},"Pr\xe9visualisation du graphe"),(0,l.kt)("p",null,"~~ Image : ~~ "),(0,l.kt)("h1",{id:"export"},"Export"),(0,l.kt)("h2",{id:"export-au-format-svg"},"Export au format SVG"),(0,l.kt)("p",null,"\xc0 partir de la ",(0,l.kt)("strong",{parentName:"p"},"Pr\xe9visualisation"),", cliquez sur ",(0,l.kt)("strong",{parentName:"p"},"SVG")," en face de ",(0,l.kt)("strong",{parentName:"p"},"Export"),".",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart43_FR ~~ "),(0,l.kt)("p",null,"Tout comme les PDF, les fichiers SVG sont des graphiques vectoriels. Les images peuvent facilement \xeatre redimensionn\xe9es. Il est donc possible de les imprimer ou de les int\xe9grer \xe0 des pr\xe9sentations en haute r\xe9solution. "),(0,l.kt)("p",null,"Les fichiers SVG peuvent \xeatre modifi\xe9s \xe0 l\u2019aide du logiciel Inkscape ou Adobe Illustrator.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : ~~ "),(0,l.kt)(p,{mdxType:"STRONG"},"Captures d\u2019\xe9cran en haute r\xe9solution"),"Si vous pr\xe9f\xe9rez uniquement les captures d\u2019\xe9cran au format PNG en haute r\xe9solution, cliquez sur l\u2019ic\xf4ne ~~ Image : ? ~~ situ\xe9e sous l\u2019aper\xe7u, dans la barre des param\xe8tres d\u2019aper\xe7u.",(0,l.kt)("h1",{id:"enregistrement"},"Enregistrement"),(0,l.kt)("h2",{id:"enregistrement-du-projet"},"Enregistrement du projet"),(0,l.kt)("p",null,"L\u2019enregistrement de votre projet regroupe l\u2019ensemble des donn\xe9es et des r\xe9sultats dans un fichier de session unique.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : tutorial_quickstart48_FR ~~",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Image : ? ~~",(0,l.kt)("br",{parentName:"p"}),"\n","Si vous n\u2019avez pas suivi toutes les \xe9tapes, vous pouvez t\xe9l\xe9charger la session :",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("a",{parentName:"p",href:"https://gephi.org/datasets/lesmiserables.gml.zip"},"https://gephi.org/datasets/lesmiserables.gml.zip")),(0,l.kt)("h1",{id:"conclusion"},"Conclusion"),(0,l.kt)("p",null,"Ce tutoriel vous a pr\xe9sent\xe9 les manipulations de base permettant d\u2019ouvrir, de visualiser, de manipuler et de g\xe9n\xe9rer un fichier de r\xe9seau avec Gephi.",(0,l.kt)("br",{parentName:"p"}),"\n","~~ Images : ??? ~~",(0,l.kt)("br",{parentName:"p"}),"\n","Pour en savoir plus : "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://gephi.org/"},"Site Web Gephi")," "),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://wiki.gephi.org/"},"Wiki Gephi")," "),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://wiki.gephi.org/"},"Forum Gephi")," ")),(0,l.kt)("p",null,"Ces pages sont disponibles uniquement en anglais. "),(0,l.kt)("p",null,"Derni\xe8re mise \xe0 jour le 5 mars 2010"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.3806fe1c.js b/assets/js/df203c0f.3806fe1c.js new file mode 100644 index 0000000..1561074 --- /dev/null +++ b/assets/js/df203c0f.3806fe1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[9924],{7068:(e,t,l)=>{l.r(t),l.d(t,{default:()=>w});var a=l(7294),n=l(6010),r=l(9960),o=l(2263);const s=["zero","one","two","few","many","other"];function c(e){return s.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,o.Z)();return(0,a.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function g(){const e=u();return{selectMessage:(t,l)=>function(e,t,l){const a=e.split("|");if(1===a.length)return a[0];a.length>l.pluralForms.length&&console.error(`For locale=${l.locale}, a maximum of ${l.pluralForms.length} plural forms are expected (${l.pluralForms.join(",")}), but the message contains ${a.length}: ${e}`);const n=l.select(t),r=l.pluralForms.indexOf(n);return a[Math.min(r,a.length-1)]}(l,t,e)}}var m=l(1944),d=l(5281),p=l(5999),h=l(3285),f=l(197);function E(e){let{doc:t}=e;return a.createElement("article",{className:"margin-vert--lg"},a.createElement(r.Z,{to:t.permalink},a.createElement("h2",null,t.title)),t.description&&a.createElement("p",null,t.description))}function w(e){let{tag:t}=e;const l=function(){const{selectMessage:e}=g();return t=>e(t,(0,p.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:t}))}(),o=(0,p.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:l(t.count),tagName:t.label});return a.createElement(m.FG,{className:(0,n.Z)(d.k.wrapper.docsPages,d.k.page.docsTagDocListPage)},a.createElement(m.d,{title:o}),a.createElement(f.Z,{tag:"doc_tag_doc_list"}),a.createElement(h.Z,null,a.createElement("div",{className:"container margin-vert--lg"},a.createElement("div",{className:"row"},a.createElement("main",{className:"col col--8 col--offset-2"},a.createElement("header",{className:"margin-bottom--xl"},a.createElement("h1",null,o),a.createElement(r.Z,{href:t.allTagsPath},a.createElement(p.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),a.createElement("section",{className:"margin-vert--lg"},t.items.map((e=>a.createElement(E,{key:e.id,doc:e})))))))))}}}]); \ No newline at end of file diff --git a/assets/js/e659bfc7.8acd85bd.js b/assets/js/e659bfc7.8acd85bd.js new file mode 100644 index 0000000..1e698fc --- /dev/null +++ b/assets/js/e659bfc7.8acd85bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[6993],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>g});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n,i,a={},r=Object.keys(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),u=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=u(e.components);return i.createElement(l.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),d=u(n),g=a,h=d["".concat(l,".").concat(g)]||d[g]||c[g]||r;return n?i.createElement(h,o(o({ref:t},s),{},{components:n})):i.createElement(h,o({ref:t},s))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=d;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p.mdxType="string"==typeof e?e:a,o[1]=p;for(var u=2;u<r;u++)o[u]=n[u];return i.createElement.apply(null,o)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},2256:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>p,toc:()=>u});var i=n(7462),a=(n(7294),n(3905));const r={id:"update-a-plugin",title:"Update a plugin",sidebar_position:15},o=void 0,p={unversionedId:"Plugins/update-a-plugin",id:"Plugins/update-a-plugin",title:"Update a plugin",description:"Step1: New code",source:"@site/docs/Plugins/Update_a_plugin.md",sourceDirName:"Plugins",slug:"/Plugins/update-a-plugin",permalink:"/Plugins/update-a-plugin",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/Plugins/Update_a_plugin.md",tags:[],version:"current",sidebarPosition:15,frontMatter:{id:"update-a-plugin",title:"Update a plugin",sidebar_position:15},sidebar:"tutorialSidebar",previous:{title:"Build a plugin without Gephi source code",permalink:"/Plugins/Build_a_plugin_without_Gephi_source_code"},next:{title:"Code Sharing Strategy",permalink:"/Plugins/code_sharing_strategy"}},l={},u=[{value:"Step1: New code",id:"step1-new-code",level:2},{value:"Step2: Update specification version",id:"step2-update-specification-version",level:2},{value:"Step3: Upload on the Gephi Marketplace",id:"step3-upload-on-the-gephi-marketplace",level:2},{value:"Upload a new plugin",id:"upload-a-new-plugin",level:3},{value:"Update an existing plugin",id:"update-an-existing-plugin",level:3}],s={toc:u};function c(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,i.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"step1-new-code"},"Step1: New code"),(0,a.kt)("p",null,"A plugin usually use some of Gephi's APIs. For example for a layout plugin, it will depend on LayoutAPI and GraphAPI. Gephi developers sometimes have to change existing APIs, and break compatibility with existing plug-ins. In that case, plugin developers have to update their code to make it work with the new version. This is not likely to happen on APIs marked as ",(0,a.kt)("strong",{parentName:"p"},"stable")," on the ",(0,a.kt)("a",{parentName:"p",href:"http://gephi.org/docs/api/"},"API Index"),"."),(0,a.kt)("p",null,"When an API is updated, a message is sent on the ",(0,a.kt)("a",{parentName:"p",href:"http://gephi.org/mailman/listinfo/gephi-plugins"},"gephi-plugins")," mailing-list and the ",(0,a.kt)("strong",{parentName:"p"},"API Changes")," section is updated on the API Index."),(0,a.kt)("h2",{id:"step2-update-specification-version"},"Step2: Update specification version"),(0,a.kt)("p",null,'The specification version is a version number given by the plugin developers in the module properties. Gephi uses specification versions to know when a plugin should be updated. For instance if a Gephi user has the plugin "SuperLayout" at version 1.1 and the 1.2 version is available on the website, Gephi will ask the user if he wants to update it.'),(0,a.kt)("p",null,"So, before uploading a new version of your plug-in, always increment the Specification Version."),(0,a.kt)("p",null,"Right click on your plugin and select ",(0,a.kt)("inlineCode",{parentName:"p"},"Properties"),'. On the "API Versionning" tab increase the number of the specification version.'),(0,a.kt)("h2",{id:"step3-upload-on-the-gephi-marketplace"},"Step3: Upload on the Gephi Marketplace"),(0,a.kt)("h3",{id:"upload-a-new-plugin"},"Upload a new plugin"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Go to ",(0,a.kt)("a",{parentName:"li",href:"https://gephi.org/plugins/#/"},"https://gephi.org/plugins/#/"))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Click on the ",(0,a.kt)("strong",{parentName:"li"},"List your own > New plugin")," menu item"),(0,a.kt)("li",{parentName:"ul"},"Log in"),(0,a.kt)("li",{parentName:"ul"},"Follow the instructions to upload the file."),(0,a.kt)("li",{parentName:"ul"},"Wait for and admin approval. You will receive a notification by email when it is published.")),(0,a.kt)("h3",{id:"update-an-existing-plugin"},"Update an existing plugin"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Go to ",(0,a.kt)("a",{parentName:"li",href:"https://gephi.org/plugins/#/"},"https://gephi.org/plugins/#/"))),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Log in"),(0,a.kt)("li",{parentName:"ul"},"Go to your user profile"),(0,a.kt)("li",{parentName:"ul"},"Select the plugin to update and follow instructions to upload a new version")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eb0053ed.818559a9.js b/assets/js/eb0053ed.818559a9.js new file mode 100644 index 0000000..9ecd9bf --- /dev/null +++ b/assets/js/eb0053ed.818559a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[7363],{2808:e=>{e.exports=JSON.parse('{"label":"Startup","permalink":"/tags/startup","allTagsPath":"/tags","count":2,"items":[{"id":"User_Manual/gui","title":"Graphical User Interface","description":"Global visual framework","permalink":"/User_Manual/gui"},{"id":"User_Manual/troubleshooting","title":"Troubleshooting","description":"Memory issues","permalink":"/User_Manual/troubleshooting"}]}')}}]); \ No newline at end of file diff --git a/assets/js/f8dc70c6.3cf13a72.js b/assets/js/f8dc70c6.3cf13a72.js new file mode 100644 index 0000000..92dff16 --- /dev/null +++ b/assets/js/f8dc70c6.3cf13a72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[4140],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),f=o,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}p.displayName="MDXCreateElement"},4055:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={id:"02-layouts-clusters-and-where-to-find-them",title:"Layouts, clusters, and where to find them",sidebar_position:2,tags:["Video","Layout","Cluster"]},i="Layouts, clusters, and where to find them",s={unversionedId:"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them",id:"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them",title:"Layouts, clusters, and where to find them",description:"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s",source:"@site/docs/User_Manual/Official_Videos/Layouts_clusters_and_where_to_find_them.md",sourceDirName:"User_Manual/Official_Videos",slug:"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them",permalink:"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them",draft:!1,editUrl:"https://github.com/gephi/gephi-documentation/docs/docs/User_Manual/Official_Videos/Layouts_clusters_and_where_to_find_them.md",tags:[{label:"Video",permalink:"/tags/video"},{label:"Layout",permalink:"/tags/layout"},{label:"Cluster",permalink:"/tags/cluster"}],version:"current",sidebarPosition:2,frontMatter:{id:"02-layouts-clusters-and-where-to-find-them",title:"Layouts, clusters, and where to find them",sidebar_position:2,tags:["Video","Layout","Cluster"]},sidebar:"tutorialSidebar",previous:{title:"First contact with Gephi",permalink:"/User_Manual/Official_Videos/01-first-contact-with-gephi"},next:{title:"Introduction",permalink:"/Developer_Documentation/"}},l={},c=[],u={toc:c};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"layouts-clusters-and-where-to-find-them"},"Layouts, clusters, and where to find them"),(0,o.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/0LqY8OfSsKE",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s"},"https://www.youtube.com/watch?v=0LqY8OfSsKE&t=7s")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.b0525baa.js b/assets/js/main.b0525baa.js new file mode 100644 index 0000000..f04296f --- /dev/null +++ b/assets/js/main.b0525baa.js @@ -0,0 +1,2 @@ +/*! For license information please see main.b0525baa.js.LICENSE.txt */ +(self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"028f1327":[()=>n.e(7210).then(n.t.bind(n,6780,19)),"~docs/default/tag-tags-code-style-970.json",6780],"05038888":[()=>n.e(3040).then(n.bind(n,4366)),"@site/docs/Plugins/index.md",4366],"089ea586":[()=>n.e(5545).then(n.bind(n,6819)),"@site/docs/Plugins/Code_Sharing_Strategy.md",6819],"0f8eeba2":[()=>n.e(8126).then(n.bind(n,8589)),"@site/docs/Plugins/GraphStreaming.md",8589],"129a2cfd":[()=>n.e(5120).then(n.bind(n,2459)),"@site/docs/Plugins/Add_a_submenu.md",2459],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,6102)),"@theme/DocItem",6102],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1d809187":[()=>n.e(5333).then(n.bind(n,7266)),"@site/docs/Developer_Documentation/Localization.md",7266],"2413df23":[()=>n.e(956).then(n.bind(n,6969)),"@site/docs/Plugins/Preview_renderer.md",6969],36190045:[()=>n.e(4525).then(n.bind(n,2009)),"@site/docs/Plugins/Extend_Data_Laboratory.md",2009],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"373d7df1":[()=>n.e(3642).then(n.bind(n,9724)),"@site/docs/Plugins/Add_a_module_panel.md",9724],"389c429d":[()=>n.e(3431).then(n.bind(n,5852)),"@site/docs/Plugins/Filter.md",5852],"39879d55":[()=>n.e(8749).then(n.bind(n,492)),"@site/docs/Developer_Documentation/Code_Style.md",492],"3cbef51b":[()=>n.e(9041).then(n.bind(n,1549)),"@site/docs/User_Manual/index.md",1549],"41b1d610":[()=>n.e(1545).then(n.bind(n,8711)),"@site/docs/User_Manual/GUI.md",8711],45312050:[()=>n.e(7977).then(n.bind(n,9128)),"@site/docs/Plugins/Import.md",9128],53310853:[()=>n.e(2118).then(n.bind(n,450)),"@site/docs/Plugins/Plugin_Quick_Start.md",450],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"582be2f7":[()=>n.e(4879).then(n.t.bind(n,380,19)),"~docs/default/tag-tags-development-9b9.json",380],"582f342d":[()=>n.e(688).then(n.bind(n,3404)),"@site/docs/Developer_Documentation/index.md",3404],"5a82e0e9":[()=>n.e(1579).then(n.bind(n,4584)),"@site/docs/Plugins/Statistics.md",4584],"5ab79cae":[()=>n.e(3252).then(n.bind(n,4579)),"@site/docs/User_Manual/Datasets.md",4579],"6154b2f8":[()=>n.e(7327).then(n.bind(n,1488)),"@site/docs/User_Manual/Import_Dynamic_Data.md",1488],"633ac33c":[()=>n.e(3445).then(n.bind(n,9209)),"@site/docs/Plugins/Layout.md",9209],"67449e3e":[()=>n.e(5551).then(n.bind(n,3250)),"@site/docs/User_Manual/Import_CSV_Data.md",3250],"6db9f2c2":[()=>n.e(1970).then(n.t.bind(n,370,19)),"~docs/default/tag-tags-video-37d.json",370],"831ba68a":[()=>n.e(3480).then(n.bind(n,8472)),"@site/docs/Plugins/Build_a_plugin_without_Gephi_source_code.md",8472],"88dc0e52":[()=>n.e(5612).then(n.bind(n,5829)),"@site/docs/User_Manual/Official_Videos/First_contact_with_gephi.md",5829],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],94004172:[()=>n.e(3031).then(n.bind(n,9070)),"@site/docs/Plugins/Export.md",9070],"96c922fe":[()=>n.e(8294).then(n.bind(n,2326)),"@site/docs/Developer_Documentation/Developer_Handbook.md",2326],"96cd1949":[()=>n.e(5440).then(n.bind(n,7098)),"@site/docs/Plugins/Generator.md",7098],a69ec8a7:[()=>n.e(5399).then(n.bind(n,906)),"@site/docs/User_Manual/Troubleshooting.md",906],aa559eb0:[()=>n.e(9664).then(n.t.bind(n,6257,19)),"~docs/default/tag-tags-layout-4c5.json",6257],ad1d6189:[()=>n.e(1089).then(n.t.bind(n,2662,19)),"~docs/default/tag-tags-gui-9eb.json",2662],b1b9faeb:[()=>n.e(6077).then(n.bind(n,5116)),"@site/docs/User_Manual/Vocabulary.md",5116],bc6c5bae:[()=>n.e(7398).then(n.bind(n,5225)),"@site/docs/Plugins/Spigot_importer_with_Wizard.md",5225],c4686e34:[()=>n.e(9583).then(n.t.bind(n,3769,19)),"/home/runner/work/gephi-documentation/gephi-documentation/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],c67f2107:[()=>n.e(3372).then(n.t.bind(n,8839,19)),"~docs/default/tag-tags-troubleshooting-643.json",8839],c9a13e5f:[()=>n.e(706).then(n.bind(n,2333)),"@site/docs/Developer_Documentation/How_to_build_Gephi.md",2333],cfc8f0db:[()=>n.e(2153).then(n.t.bind(n,3691,19)),"~docs/default/tag-tags-cluster-0f9.json",3691],dc64227d:[()=>n.e(2830).then(n.bind(n,4791)),"@site/docs/Plugins/De\u0301marrage_rapide_(FR).md",4791],df203c0f:[()=>n.e(9924).then(n.bind(n,7068)),"@theme/DocTagDocListPage",7068],e659bfc7:[()=>n.e(6993).then(n.bind(n,2256)),"@site/docs/Plugins/Update_a_plugin.md",2256],eb0053ed:[()=>n.e(7363).then(n.t.bind(n,2808,19)),"~docs/default/tag-tags-startup-492.json",2808],f8dc70c6:[()=>n.e(4140).then(n.bind(n,4055)),"@site/docs/User_Manual/Official_Videos/Layouts_clusters_and_where_to_find_them.md",4055]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/tags",component:f("/tags","df9"),exact:!0},{path:"/tags/cluster",component:f("/tags/cluster","90b"),exact:!0},{path:"/tags/code-style",component:f("/tags/code-style","23c"),exact:!0},{path:"/tags/development",component:f("/tags/development","544"),exact:!0},{path:"/tags/gui",component:f("/tags/gui","fb5"),exact:!0},{path:"/tags/layout",component:f("/tags/layout","db8"),exact:!0},{path:"/tags/startup",component:f("/tags/startup","a5c"),exact:!0},{path:"/tags/troubleshooting",component:f("/tags/troubleshooting","1b0"),exact:!0},{path:"/tags/video",component:f("/tags/video","912"),exact:!0},{path:"/",component:f("/","711"),routes:[{path:"/",component:f("/","510"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Developer_Documentation/",component:f("/Developer_Documentation/","24b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Developer_Documentation/code_style",component:f("/Developer_Documentation/code_style","da9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Developer_Documentation/developer_handbook",component:f("/Developer_Documentation/developer_handbook","b76"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Developer_Documentation/how_to_build_gephi",component:f("/Developer_Documentation/how_to_build_gephi","e74"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Developer_Documentation/localization",component:f("/Developer_Documentation/localization","fd7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/",component:f("/Plugins/","25f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/Add_a_module_panel",component:f("/Plugins/Add_a_module_panel","680"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/Add_a_submenu",component:f("/Plugins/Add_a_submenu","f5b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/Build_a_plugin_without_Gephi_source_code",component:f("/Plugins/Build_a_plugin_without_Gephi_source_code","dff"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/code_sharing_strategy",component:f("/Plugins/code_sharing_strategy","7a8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/de\u0301marrage-rapide-fr",component:f("/Plugins/de\u0301marrage-rapide-fr","3ad"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/export",component:f("/Plugins/export","c17"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/Extend_Data_Laboratory",component:f("/Plugins/Extend_Data_Laboratory","6fd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/filter",component:f("/Plugins/filter","802"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/generator",component:f("/Plugins/generator","943"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/graphstreaming",component:f("/Plugins/graphstreaming","2a0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/import",component:f("/Plugins/import","250"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/layout",component:f("/Plugins/layout","018"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/Plugin_Quick_Start",component:f("/Plugins/Plugin_Quick_Start","ccc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/preview-renderer",component:f("/Plugins/preview-renderer","98b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/Spigot_importer_with_Wizard",component:f("/Plugins/Spigot_importer_with_Wizard","999"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/statistics",component:f("/Plugins/statistics","644"),exact:!0,sidebar:"tutorialSidebar"},{path:"/Plugins/update-a-plugin",component:f("/Plugins/update-a-plugin","fce"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/datasets",component:f("/User_Manual/datasets","dda"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/gui",component:f("/User_Manual/gui","8b5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/Import_CSV_Data",component:f("/User_Manual/Import_CSV_Data","5ba"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/Import_Dynamic_Data",component:f("/User_Manual/Import_Dynamic_Data","7e7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/Official_Videos/01-first-contact-with-gephi",component:f("/User_Manual/Official_Videos/01-first-contact-with-gephi","074"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them",component:f("/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","11b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/troubleshooting",component:f("/User_Manual/troubleshooting","a18"),exact:!0,sidebar:"tutorialSidebar"},{path:"/User_Manual/vocabulary",component:f("/User_Manual/vocabulary","b89"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6775),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),E=n(3320),k=n(197);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function S(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function x(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(S,null),r.createElement(_,null),r.createElement(k.Z,{tag:E.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var P=n(8934),A=n(8940);function L(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=s.map((t=>{var r;const a=(null==(r=t.default)?void 0:r[e])??t[e];return null==a?void 0:a(...n)}));return()=>a.forEach((e=>null==e?void 0:e()))}const O=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1)),n=document.getElementById(e);null==n||n.scrollIntoView()}else window.scrollTo(0,0)}(n),L("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class I extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?L("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=L("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const R=I,D="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseurl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function U(){const{siteConfig:{baseUrl:e}}=(0,g.Z)();return(0,r.useLayoutEffect)((()=>{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:D}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(U,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var j=n(4763);function Z(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(j.Z,null,r.createElement(A.M,null,r.createElement(P.t,null,r.createElement(f,null,r.createElement($,null),r.createElement(x,null),r.createElement(z,null),r.createElement(R,{location:T(t)},e)))))}var H=n(6887);const V=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r;if("undefined"==typeof document)return void n();const a=document.createElement("link");a.setAttribute("rel","prefetch"),a.setAttribute("href",e),a.onload=()=>t(),a.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??(null==(r=document.getElementsByName("script")[0])?void 0:r.parentNode);null==o||o.appendChild(a)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(9670);const W=new Set,q=new Set,Y=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},K={prefetch(e){if(!(e=>!Y()&&!q.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(H).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?V(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!q.has(e))(e)&&(q.add(e),N(e))},Q=Object.freeze(K);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"User_Manual/index","docs":[{"id":"Developer_Documentation/code_style","path":"/Developer_Documentation/code_style","sidebar":"tutorialSidebar"},{"id":"Developer_Documentation/developer_handbook","path":"/Developer_Documentation/developer_handbook","sidebar":"tutorialSidebar"},{"id":"Developer_Documentation/how_to_build_gephi","path":"/Developer_Documentation/how_to_build_gephi","sidebar":"tutorialSidebar"},{"id":"Developer_Documentation/index","path":"/Developer_Documentation/","sidebar":"tutorialSidebar"},{"id":"Developer_Documentation/localization","path":"/Developer_Documentation/localization","sidebar":"tutorialSidebar"},{"id":"Plugins/Add_a_module_panel","path":"/Plugins/Add_a_module_panel","sidebar":"tutorialSidebar"},{"id":"Plugins/Add_a_submenu","path":"/Plugins/Add_a_submenu","sidebar":"tutorialSidebar"},{"id":"Plugins/Build_a_plugin_without_Gephi_source_code","path":"/Plugins/Build_a_plugin_without_Gephi_source_code","sidebar":"tutorialSidebar"},{"id":"Plugins/code_sharing_strategy","path":"/Plugins/code_sharing_strategy","sidebar":"tutorialSidebar"},{"id":"Plugins/de\u0301marrage-rapide-fr","path":"/Plugins/de\u0301marrage-rapide-fr","sidebar":"tutorialSidebar"},{"id":"Plugins/export","path":"/Plugins/export","sidebar":"tutorialSidebar"},{"id":"Plugins/Extend_Data_Laboratory","path":"/Plugins/Extend_Data_Laboratory","sidebar":"tutorialSidebar"},{"id":"Plugins/filter","path":"/Plugins/filter","sidebar":"tutorialSidebar"},{"id":"Plugins/generator","path":"/Plugins/generator","sidebar":"tutorialSidebar"},{"id":"Plugins/graphstreaming","path":"/Plugins/graphstreaming","sidebar":"tutorialSidebar"},{"id":"Plugins/import","path":"/Plugins/import","sidebar":"tutorialSidebar"},{"id":"Plugins/index","path":"/Plugins/","sidebar":"tutorialSidebar"},{"id":"Plugins/layout","path":"/Plugins/layout","sidebar":"tutorialSidebar"},{"id":"Plugins/Plugin_Quick_Start","path":"/Plugins/Plugin_Quick_Start","sidebar":"tutorialSidebar"},{"id":"Plugins/preview-renderer","path":"/Plugins/preview-renderer","sidebar":"tutorialSidebar"},{"id":"Plugins/Spigot_importer_with_Wizard","path":"/Plugins/Spigot_importer_with_Wizard","sidebar":"tutorialSidebar"},{"id":"Plugins/statistics","path":"/Plugins/statistics","sidebar":"tutorialSidebar"},{"id":"Plugins/update-a-plugin","path":"/Plugins/update-a-plugin","sidebar":"tutorialSidebar"},{"id":"User_Manual/datasets","path":"/User_Manual/datasets","sidebar":"tutorialSidebar"},{"id":"User_Manual/gui","path":"/User_Manual/gui","sidebar":"tutorialSidebar"},{"id":"User_Manual/Import_CSV_Data","path":"/User_Manual/Import_CSV_Data","sidebar":"tutorialSidebar"},{"id":"User_Manual/Import_Dynamic_Data","path":"/User_Manual/Import_Dynamic_Data","sidebar":"tutorialSidebar"},{"id":"User_Manual/index","path":"/","sidebar":"tutorialSidebar"},{"id":"User_Manual/Official_Videos/01-first-contact-with-gephi","path":"/User_Manual/Official_Videos/01-first-contact-with-gephi","sidebar":"tutorialSidebar"},{"id":"User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","path":"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them","sidebar":"tutorialSidebar"},{"id":"User_Manual/troubleshooting","path":"/User_Manual/troubleshooting","sidebar":"tutorialSidebar"},{"id":"User_Manual/vocabulary","path":"/User_Manual/vocabulary","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/","label":"User Manual"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.2.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.2.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.2.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.2.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.2.0"}}}'),u={siteConfig:a.Z,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(412),o=n(5742),i=n(3285);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(i.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??u)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){var n;let{isNavLink:f,to:p,href:m,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":b,autoAddBaseUrl:v=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:E}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),_=(0,a.useContext)(c),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=p||m;const C=(0,s.Z)(x),T=null==x?void 0:x.replace("pathname://","");let P=void 0!==T?(A=T,v&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;P&&C&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:w,baseUrl:E}));const L=(0,a.useRef)(!1),O=f?o.OL:o.rU,N=u.Z.canUseIntersectionObserver,I=(0,a.useRef)(),R=()=>{L.current||null==P||(window.docusaurus.preload(P),L.current=!0)};(0,a.useEffect)((()=>(!N&&C&&null!=P&&window.docusaurus.prefetch(P),()=>{N&&I.current&&I.current.disconnect()})),[I,P,N,C]);const D=(null==(n=P)?void 0:n.startsWith("#"))??!1,M=!P||!C||D;return M||b||_.collectLink(P),M?a.createElement("a",(0,r.Z)({ref:S,href:P},x&&!C&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(O,(0,r.Z)({},y,{onMouseEnter:R,onTouchStart:R,innerRef:e=>{S.current=e,N&&e&&C&&(I.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(I.current.unobserve(e),I.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),I.current.observe(e))},to:P},f&&{isActive:h,activeClassName:g}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,Z:()=>i});var r=n(2263),a=n(3919);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.Z)();return{withBaseUrl:(n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[a,o]=n;const i=r?`${r}.${a}`:a;var l;"object"==typeof(l=o)&&l&&Object.keys(l).length>0?e(o,i):t[i]=o}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>c,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6775),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=null==n?void 0:n.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=null==r?void 0:r[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.Z,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(9640)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a="iconExternalLink_nPIU";function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},3285:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6775),u=n(5999),c=n(5936);const d="docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v="skipToContent_fXgn";function y(){return r.createElement(g,{className:v})}var w=n(6668),E=n(9689);function k(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const _="closeButton_CVFx";function S(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",_,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const x="content_knG7";function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(x,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T="announcementBar_mb4j",P="announcementBarPlaceholder_vyr4",A="announcementBarClose_gvF7",L="announcementBarContent_xLdY";function O(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,E.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:P}),r.createElement(C,{className:L}),i&&r.createElement(S,{onClick:n,className:A}))}var N=n(2961),I=n(2466);var R=n(902),D=n(3102);const M=r.createContext(null);function F(e){let{children:t}=e;const n=function(){const e=(0,N.e)(),t=(0,D.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,R.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(M.Provider,{value:n},t)}function B(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function U(){const e=(0,r.useContext)(M);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,D.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:B(o)})),[a,o,t])}function z(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=U();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var $=n(2949),j=n(2389);function Z(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function H(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const V={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function G(e){let{className:t,value:n,onChange:o}=e;const i=(0,j.Z)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(V.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",V.toggleButton,!i&&V.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(Z,{className:(0,a.Z)(V.toggleIcon,V.lightToggleIcon)}),r.createElement(H,{className:(0,a.Z)(V.toggleIcon,V.darkToggleIcon)})))}const W=r.memo(G);function q(e){let{className:t}=e;const n=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,$.I)();return n?null:r.createElement(W,{className:t,value:a,onChange:o})}var Y=n(1327);function K(){return r.createElement(Y.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,N.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function X(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(K,null),r.createElement(q,{className:"margin-right--md"}),r.createElement(Q,null))}var J=n(9960),ee=n(4996),te=n(3919);function ne(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var re=n(9471);function ae(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,ee.Z)(a),p=(0,ee.Z)(t),m=(0,ee.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,te.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(re.Z,u&&{width:12,height:12}))};return o?r.createElement(J.Z,(0,l.Z)({href:c?m:o},d,h)):r.createElement(J.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ne(n,t.pathname):t.pathname.startsWith(p)},d,h))}function oe(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ae,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ie(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ae,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function le(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ie:oe;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var se=n(6043),ue=n(8596),ce=n(2263);function de(e,t){return e.some((e=>function(e,t){return!!(0,ue.Mg)(e.to,t)||!!ne(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function fe(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ae,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Ce,(0,l.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),d(!1);const t=u.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function pe(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,ce.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=de(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ae,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(Ce,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function me(e){let{mobile:t=!1,...n}=e;const a=t?pe:fe;return r.createElement(a,n)}var ge=n(4711);function he(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const be="iconLanguage_nlXk";var ve=n(1875);const ye="searchBox_ZlJk";function we(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,ye)},t)}var Ee=n(143),ke=n(2802);var _e=n(373);const Se=e=>e.docs.find((t=>t.id===e.mainDocId));const xe={default:le,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,ce.Z)(),f=(0,ge.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(me,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(he,{className:be}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(we,{className:n},r.createElement(ve.Z,null))},dropdown:me,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Ee.Iw)(a),s=(0,ke.vY)(t,a);return null===s?null:r.createElement(le,(0,l.Z)({exact:!0},o,{isActive:()=>(null==i?void 0:i.path)===s.path||!(null==i||!i.sidebar)&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,Ee.Iw)(a),s=(0,ke.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(le,(0,l.Z)({exact:!0},o,{isActive:()=>(null==i?void 0:i.sidebar)===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,ke.lO)(a)[0],s=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(le,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,Ee.Iw)(n),m=(0,Ee.gB)(n),{savePreferredVersionName:g}=(0,_e.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??Se(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,ke.lO)(n)[0],v=t&&h.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:Se(b).path;return h.length<=1?r.createElement(le,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(me,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function Ce(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=xe[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Te(){const e=(0,N.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ce,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Pe(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ae(){const e=0===(0,w.L)().navbar.items.length,t=U();return r.createElement(r.Fragment,null,!e&&r.createElement(Pe,{onClick:()=>t.hide()}),t.content)}function Le(){const e=(0,N.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(z,{header:r.createElement(X,null),primaryMenu:r.createElement(Te,null),secondaryMenu:r.createElement(Ae,null)}):null}const Oe="navbarHideable_m1mJ",Ne="navbarHidden_jGov";function Ie(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Re(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,N.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const l=null==r?void 0:r.scrollY,s=document.documentElement.scrollHeight-o.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Oe,!s&&Ne],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Ie,{onClick:i.toggle}),r.createElement(Le,null))}function De(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Me(){const{toggle:e,shown:t}=(0,N.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(De,null))}const Fe="colorModeToggle_DEke";function Be(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ce,(0,l.Z)({},e,{key:t})))))}function Ue(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function ze(){const e=(0,N.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(Ue,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Me,null),r.createElement(K,null),r.createElement(Be,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Be,{items:a}),r.createElement(q,{className:Fe}),!o&&r.createElement(we,null,r.createElement(ve.Z,null)))})}function $e(){return r.createElement(Re,null,r.createElement(ze,null))}function je(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,ee.Z)(n),c=(0,ee.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(J.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,te.Z)(a)&&r.createElement(re.Z,null))}function Ze(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(je,{item:t}))}function He(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ze,{key:t,item:e})))))}function Ve(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(He,{key:t,column:e}))))}function Ge(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function We(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(je,{item:t})}function qe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(We,{item:e}),t.length!==n+1&&r.createElement(Ge,null))))))}function Ye(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ve,{columns:t}):r.createElement(qe,{links:t})}var Ke=n(941);const Qe="footerLogoLink_BH7S";function Xe(e){let{logo:t}=e;const{withBaseUrl:n}=(0,ee.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Ke.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function Je(e){let{logo:t}=e;return t.href?r.createElement(J.Z,{href:t.href,className:Qe,target:t.target},r.createElement(Xe,{logo:t})):r.createElement(Xe,{logo:t})}function et(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function tt(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function nt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(tt,{style:o,links:n&&n.length>0&&r.createElement(Ye,{links:n}),logo:a&&r.createElement(Je,{logo:a}),copyright:t&&r.createElement(et,{copyright:t})})}const rt=r.memo(nt);var at=n(12);const ot="docusaurus.tab.",it=r.createContext(void 0);const lt=(0,R.Qc)([$.S,E.pl,function(e){let{children:t}=e;const n=function(){const[e,t]=(0,r.useState)({}),n=(0,r.useCallback)(((e,t)=>{(0,at.W)(`docusaurus.tab.${e}`).set(t)}),[]);(0,r.useEffect)((()=>{try{const e={};(0,at._)().forEach((t=>{if(t.startsWith(ot)){const n=t.substring(ot.length);e[n]=(0,at.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const a=(0,r.useCallback)(((e,r)=>{t((t=>({...t,[e]:r}))),n(e,r)}),[n]);return(0,r.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:a})),[e,a])}();return r.createElement(it.Provider,{value:n},t)},I.OC,_e.L5,i.VC,function(e){let{children:t}=e;return r.createElement(D.n2,null,r.createElement(N.M,null,r.createElement(F,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ut(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const ct="mainWrapper_z2l0";function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(O,null),r.createElement($e,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ct,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ut,e)},t)),!n&&r.createElement(rt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),u=n(941);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(u.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:u}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)((null==u?void 0:u.href)||"/"),g=n?"":t,h=(null==u?void 0:u.alt)??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,(null==u?void 0:u.target)&&{target:u.target}),u&&a.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>m});var r=n(7462),a=n(7294),o=n(412);function i(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const l={display:"none",overflow:"hidden",height:"0px"},s={display:"block",overflow:"visible",height:"auto"};function u(e,t){const n=t?l:s;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function c(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=(null==r?void 0:r.duration)??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${(null==r?void 0:r.easing)??"ease-in-out"}`,height:`${t}px`}}function i(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return u(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function d(e){if(!o.Z.canUseDOM)return e?l:s}function f(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const f=(0,a.useRef)(null);return c({collapsibleRef:f,collapsed:n,animation:o}),a.createElement(t,{ref:f,style:s?void 0:d(n),onTransitionEnd:e=>{"height"===e.propertyName&&(u(f.current,n),null==i||i(n))},className:l},r)}function p(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(f,(0,r.Z)({},n,{collapsed:l})):null}function m(e){let{lazy:t,...n}=e;const r=t?p:f;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.W)("docusaurus.announcement.dismiss"),u=(0,o.W)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{o(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.W)(u),d="light",f="dark",p=e=>e===f?f:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)((e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e))(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&(e=>{c.set(p(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&s(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const m=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===f},setLightTheme(){s(d)},setDarkTheme(){s(f)}})),[o,s])}function g(e){let{children:t}=e;const n=m();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(2802),s=n(902),u=n(12);const c=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,u.W)(c(e),{persistence:t}).set(n)},f=(e,t)=>(0,u.W)(c(e),{persistence:t}).get(),p=(e,t)=>{(0,u.W)(c(e),{persistence:t}).del()};const m=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return r.createElement(m.Provider,{value:n},t)}function b(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(6775),l=n(902);function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(6668);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const c=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function f(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function p(){const e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412);const o="desktop",i="mobile",l="ssr";function s(){return a.Z.canUseDOM?window.innerWidth>996?o:i:l}function u(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},2802:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>f,_F:()=>m,cE:()=>d,hI:()=>w,lO:()=>b,vY:()=>y,oz:()=>v,s1:()=>h});var r=n(7294),a=n(6775),o=n(8790),i=n(143),l=n(373),s=n(1116);function u(e){return Array.from(new Set(e))}var c=n(8596);const d=!!i._r;function f(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=f(t);if(e)return e}}}const p=(e,t)=>void 0!==e&&(0,c.Mg)(e,t);function m(e,t){return"link"===e.type?p(e.href,t):"category"===e.type&&(p(e.href,t)||((e,t)=>e.some((e=>m(e,t))))(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,c.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,c.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function h(){var e;const t=(0,s.V)(),{pathname:n}=(0,a.TH)();return!1!==(null==(e=(0,i.gA)())?void 0:e.pluginData.breadcrumbs)&&t?g({sidebarItems:t.items,pathname:n}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function v(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function y(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function w(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return null!=e&&e.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){var n,r,a;super(),this.name="ReactContextError",this.message=`Hook ${(null==(n=this.stack)||null==(r=n.split("\n")[1])||null==(a=r.match(/at (?:\w+\.)?(?<name>\w+)/))?void 0:a.groups.name)??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:`${e}/`)?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{W:()=>l,_:()=>s});const r="localStorage";function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,o||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),o=!0),null}var t}let o=!1;const i={get:()=>null,set:()=>{},del:()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(null==t?void 0:t.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function s(e){void 0===e&&(e=r);const t=a(e);if(!t)return[];const n=[];for(let r=0;r<t.length;r+=1){const e=t.key(r);null!==e&&n.push(e)}return n}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6775);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6775),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>P,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&a(e),s=t&&a(t),u=l||s;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(2177);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var g=!("undefined"==typeof window||!window.document||!window.document.createElement);function h(e,t){t(window.confirm(e))}var b="popstate",v="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,E=i.getUserConfirmation,k=void 0===E?h:E,_=i.keyLength,S=void 0===_?6:_,x=e.basename?d(s(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return x&&(o=c(o,x)),p(o,r,n)}function T(){return Math.random().toString(36).substr(2,S)}var P=m();function A(e){(0,r.Z)($,e),$.length=n.length,P.notifyListeners($.location,$.action)}function L(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||I(C(e.state))}function O(){I(C(y()))}var N=!1;function I(e){if(N)N=!1,A();else{P.confirmTransitionTo(e,"POP",k,(function(t){t?A({action:"POP",location:e}):function(e){var t=$.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(N=!0,F(a))}(e)}))}}var R=C(y()),D=[R.key];function M(e){return x+f(e)}function F(e){n.go(e)}var B=0;function U(e){1===(B+=e)&&1===e?(window.addEventListener(b,L),o&&window.addEventListener(v,O)):0===B&&(window.removeEventListener(b,L),o&&window.removeEventListener(v,O))}var z=!1;var $={length:n.length,action:"POP",location:R,createHref:M,push:function(e,t){var r="PUSH",o=p(e,t,T(),$.location);P.confirmTransitionTo(o,r,k,(function(e){if(e){var t=M(o),i=o.key,l=o.state;if(a)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=D.indexOf($.location.key),u=D.slice(0,s+1);u.push(o.key),D=u,A({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,T(),$.location);P.confirmTransitionTo(o,r,k,(function(e){if(e){var t=M(o),i=o.key,l=o.state;if(a)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=D.indexOf($.location.key);-1!==s&&(D[s]=o.key),A({action:r,location:o})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return z||(U(1),z=!0),function(){return z&&(z=!1,U(-1)),t()}},listen:function(e){var t=P.appendListener(e);return U(1),function(){U(-1),t()}}};return $}var E="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};function _(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function S(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(_(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),g||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?h:a,i=n.hashType,u=void 0===i?"slash":i,b=e.basename?d(s(e.basename)):"",v=k[u],y=v.encodePath,w=v.decodePath;function C(){var e=w(S());return b&&(e=c(e,b)),p(e)}var T=m();function P(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var A=!1,L=null;function O(){var e,t,n=S(),r=y(n);if(n!==r)x(r);else{var a=C(),i=z.location;if(!A&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(L===f(a))return;L=null,function(e){if(A)A=!1,P();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?P({action:t,location:e}):function(e){var t=z.location,n=D.lastIndexOf(f(t));-1===n&&(n=0);var r=D.lastIndexOf(f(e));-1===r&&(r=0);var a=n-r;a&&(A=!0,M(a))}(e)}))}}(a)}}var N=S(),I=y(N);N!==I&&x(I);var R=C(),D=[f(R)];function M(e){t.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?window.addEventListener(E,O):0===F&&window.removeEventListener(E,O)}var U=!1;var z={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=_(window.location.href)),n+"#"+y(b+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);if(S()!==a){L=t,function(e){window.location.hash=e}(a);var o=D.lastIndexOf(f(z.location)),i=D.slice(0,o+1);i.push(t),D=i,P({action:n,location:r})}else P()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(b+t);S()!==a&&(L=t,x(a));var o=D.indexOf(f(z.location));-1!==o&&(D[o]=t),P({action:n,location:r})}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return U||(B(1),U=!0),function(){return U&&(U=!1,B(-1)),t()}},listen:function(e){var t=T.appendListener(e);return B(1),function(){B(-1),t()}}};return z}function T(e,t,n){return Math.min(Math.max(e,t),n)}function P(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,u)}var h=T(l,0,o.length-1),b=o.map((function(e){return p(e,void 0,"string"==typeof e?g():e.key||g())})),v=f;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[h],index:h,entries:b,createHref:v,push:function(e,t){var r="PUSH",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h<i.length;++h){var b=i[h];if(!(o[b]||r&&r[b]||g&&g[b]||l&&l[b])){var v=f(n,b);try{u(t,b,v)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,o){for(var i,l,s=a(e),u=1;u<arguments.length;u++){for(var c in i=Object(arguments[u]))n.call(i,c)&&(s[c]=i[c]);if(t){l=t(i);for(var d=0;d<l.length;d++)r.call(i,l[d])&&(s[l[d]]=i[l[d]])}}return s}},4779:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var E=null!=g&&null!=m&&m!==g,k="+"===y||"*"===y,_="?"===y||"*"===y,S=n[2]||c,x=b||v;r.push({name:h||o++,prefix:g||"",delimiter:S,optional:_,repeat:k,partial:E,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+s(S)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",l=t||{},s=(a||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');o+=c.prefix+d}}else o+=c}return o}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),g=i.slice(-m.length)===m;return a||(i=(g?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(p(e[a],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(o(e,n),t,n)}(e,t,n)}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var l in o)if(o.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=o[l])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],a||l);var s=t[l],u=r.util.type(s);"Object"!==u||o[i(s)]?"Array"!==u||o[i(s)]||(o[i(s)]=!0,e(s,n,l,o)):(o[i(s)]=!0,e(s,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",o),o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new l;return s(a,a.head,e),i(e,a,t,a.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var g=p[m],h=g.inside,b=!!g.lookbehind,v=!!g.greedy,y=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var E=g.pattern||g,k=l.next,_=c;k!==t.tail&&!(d&&_>=d.reach);_+=k.value.length,k=k.next){var S=k.value;if(t.length>e.length)return;if(!(S instanceof a)){var x,C=1;if(v){if(!(x=o(E,_,e,b))||x.index>=e.length)break;var T=x.index,P=x.index+x[0].length,A=_;for(A+=k.value.length;T>=A;)A+=(k=k.next).value.length;if(_=A-=k.value.length,k.value instanceof a)continue;for(var L=k;L!==t.tail&&(A<P||"string"==typeof L.value);L=L.next)C++,A+=L.value.length;C--,S=e.slice(_,A),x.index-=_}else if(!(x=o(E,0,S,b)))continue;T=x.index;var O=x[0],N=S.slice(0,T),I=S.slice(T+O.length),R=_+S.length;d&&R>d.reach&&(d.reach=R);var D=k.prev;if(N&&(D=s(t,D,N),_+=N.length),u(t,D,C),k=s(t,D,new a(f,h?r.tokenize(O,h):O,y,O)),I&&s(t,k,I),C>1){var M={cause:f+","+m,reach:R};i(e,t,n,k.prev,_,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var l="";for(var s in o.attributes)l+=" "+s+'="'+(o.attributes[s]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+l+">"+o.content+"</"+o.tag+">"},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.shell=e.languages.bash}(a),a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a=t[n];if("code"===a.type){var o=a.content[1],i=a.content[3];if(o&&i&&"code-language"===o.type&&"code-block"===i.type&&"string"==typeof o.content){var l=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(a.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r],u=/language-(.+)/.exec(o);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var o=f(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),a.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&a.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))a++;else if(r.test(l)&&0===--a)return o}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r<a;r++){var o=n[r];if("string"!=typeof o){var i=o.content;if(Array.isArray(i))if("template-string"===o.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(a),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];"RegExp"===e.util.type(o)&&(o=e.languages.javascript[a]={pattern:o});var i=o.inside||{};o.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(a),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;if("string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(a>=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},2503:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},9640:(e,t,n)=>{var r={"./prism-java":2503};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=9640},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,m={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var b={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){b[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];b[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){b[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){b[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){b[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){b[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){b[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){b[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){b[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=b.hasOwnProperty(t)?b[t]:null;(null!==a?0===a.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!p.call(g,e)||!p.call(m,e)&&(f.test(e)?g[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);b[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),b.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){b[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=60103,_=60106,S=60107,x=60108,C=60114,T=60109,P=60110,A=60112,L=60113,O=60120,N=60115,I=60116,R=60121,D=60128,M=60129,F=60130,B=60131;if("function"==typeof Symbol&&Symbol.for){var U=Symbol.for;k=U("react.element"),_=U("react.portal"),S=U("react.fragment"),x=U("react.strict_mode"),C=U("react.profiler"),T=U("react.provider"),P=U("react.context"),A=U("react.forward_ref"),L=U("react.suspense"),O=U("react.suspense_list"),N=U("react.memo"),I=U("react.lazy"),R=U("react.block"),U("react.scope"),D=U("react.opaque.id"),M=U("react.debug_trace_mode"),F=U("react.offscreen"),B=U("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function Z(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var H=!1;function V(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var a=s.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,l=o.length-1;1<=i&&0<=l&&a[i]!==o[l];)l--;for(;1<=i&&0<=l;i--,l--)if(a[i]!==o[l]){if(1!==i||1!==l)do{if(i--,0>--l||a[i]!==o[l])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Z(e):""}function G(e){switch(e.tag){case 5:return Z(e.type);case 16:return Z("Lazy");case 13:return Z("Suspense");case 19:return Z("SuspenseList");case 0:case 2:case 15:return e=V(e.type,!1);case 11:return e=V(e.type.render,!1);case 22:return e=V(e.type._render,!1);case 1:return e=V(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case _:return"Portal";case C:return"Profiler";case x:return"StrictMode";case L:return"Suspense";case O:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case P:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return W(e.type);case R:return W(e._render);case I:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function q(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Y(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return a({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=q(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=q(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ae(e,t.type,n):t.hasOwnProperty("defaultValue")&&ae(e,t.type,q(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ae(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function oe(e,t){return e=a({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+q(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:q(n)}}function ue(e,t){var n=q(t.value),r=q(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de="http://www.w3.org/1999/xhtml",fe="http://www.w3.org/2000/svg";function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function me(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ge,he,be=(he=function(e,t){if(e.namespaceURI!==fe||"innerHTML"in e)e.innerHTML=t;else{for((ge=ge||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ge.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},we=["Webkit","ms","Moz","O"];function Ee(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function ke(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=Ee(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ye).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var _e=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(_e[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function xe(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ce(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Pe=null,Ae=null;function Le(e){if(e=ra(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=oa(t),Te(e.stateNode,e.type,t))}}function Oe(e){Pe?Ae?Ae.push(e):Ae=[e]:Pe=e}function Ne(){if(Pe){var e=Pe,t=Ae;if(Ae=Pe=null,Le(e),t)for(e=0;e<t.length;e++)Le(t[e])}}function Ie(e,t){return e(t)}function Re(e,t,n,r,a){return e(t,n,r,a)}function De(){}var Me=Ie,Fe=!1,Be=!1;function Ue(){null===Pe&&null===Ae||(De(),Ne())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var r=oa(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var $e=!1;if(d)try{var je={};Object.defineProperty(je,"passive",{get:function(){$e=!0}}),window.addEventListener("test",je,je),window.removeEventListener("test",je,je)}catch(he){$e=!1}function Ze(e,t,n,r,a,o,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var He=!1,Ve=null,Ge=!1,We=null,qe={onError:function(e){He=!0,Ve=e}};function Ye(e,t,n,r,a,o,i,l,s){He=!1,Ve=null,Ze.apply(qe,arguments)}function Ke(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Xe(e){if(Ke(e)!==e)throw Error(i(188))}function Je(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ke(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var o=a.alternate;if(null===o){if(null!==(r=a.return)){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return Xe(a),e;if(o===r)return Xe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var l=!1,s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l){for(s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,at,ot=!1,it=[],lt=null,st=null,ut=null,ct=new Map,dt=new Map,ft=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function mt(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function gt(e,t){switch(e){case"focusin":case"focusout":lt=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":ut=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":dt.delete(t.pointerId)}}function ht(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=mt(t,n,r,a,o),null!==t&&(null!==(t=ra(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function bt(e){var t=na(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Qe(n)))return e.blockedOn=t,void at(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){rt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function vt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ra(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){vt(e)&&n.delete(t)}function wt(){for(ot=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=ra(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==lt&&vt(lt)&&(lt=null),null!==st&&vt(st)&&(st=null),null!==ut&&vt(ut)&&(ut=null),ct.forEach(yt),dt.forEach(yt)}function Et(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,wt)))}function kt(e){function t(t){return Et(t,e)}if(0<it.length){Et(it[0],e);for(var n=1;n<it.length;n++){var r=it[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==lt&&Et(lt,e),null!==st&&Et(st,e),null!==ut&&Et(ut,e),ct.forEach(t),dt.forEach(t),n=0;n<ft.length;n++)(r=ft[n]).blockedOn===e&&(r.blockedOn=null);for(;0<ft.length&&null===(n=ft[0]).blockedOn;)bt(n),null===n.blockedOn&&ft.shift()}function _t(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var St={animationend:_t("Animation","AnimationEnd"),animationiteration:_t("Animation","AnimationIteration"),animationstart:_t("Animation","AnimationStart"),transitionend:_t("Transition","TransitionEnd")},xt={},Ct={};function Tt(e){if(xt[e])return xt[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ct)return xt[e]=n[t];return e}d&&(Ct=document.createElement("div").style,"AnimationEvent"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),"TransitionEvent"in window||delete St.transitionend.transition);var Pt=Tt("animationend"),At=Tt("animationiteration"),Lt=Tt("animationstart"),Ot=Tt("transitionend"),Nt=new Map,It=new Map,Rt=["abort","abort",Pt,"animationEnd",At,"animationIteration",Lt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Ot,"transitionEnd","waiting","waiting"];function Dt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],a=e[n+1];a="on"+(a[0].toUpperCase()+a.slice(1)),It.set(r,t),Nt.set(r,a),u(a,[r])}}(0,o.unstable_now)();var Mt=8;function Ft(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Bt(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==o)r=o,a=Mt=15;else if(0!==(o=134217727&n)){var s=o&~i;0!==s?(r=Ft(s),a=Mt):0!==(l&=o)&&(r=Ft(l),a=Mt)}else 0!==(o=n&~i)?(r=Ft(o),a=Mt):0!==l&&(r=Ft(l),a=Mt);if(0===r)return 0;if(r=n&((0>(r=31-Ht(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Ft(t),a<=Mt)return t;Mt=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-Ht(t)),r|=e[n],t&=~a;return r}function Ut(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=$t(24&~t))?zt(10,t):e;case 10:return 0===(e=$t(192&~t))?zt(8,t):e;case 8:return 0===(e=$t(3584&~t))&&(0===(e=$t(4186112&~t))&&(e=512)),e;case 2:return 0===(t=$t(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function $t(e){return e&-e}function jt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Zt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Ht(t)]=n}var Ht=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Vt(e)/Gt|0)|0},Vt=Math.log,Gt=Math.LN2;var Wt=o.unstable_UserBlockingPriority,qt=o.unstable_runWithPriority,Yt=!0;function Kt(e,t,n,r){Fe||De();var a=Xt,o=Fe;Fe=!0;try{Re(a,e,t,n,r)}finally{(Fe=o)||Ue()}}function Qt(e,t,n,r){qt(Wt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var a;if(Yt)if((a=0==(4&t))&&0<it.length&&-1<pt.indexOf(e))e=mt(null,e,t,n,r),it.push(e);else{var o=Jt(e,t,n,r);if(null===o)a&>(e,r);else{if(a){if(-1<pt.indexOf(e))return e=mt(o,e,t,n,r),void it.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return lt=ht(lt,e,t,n,r,a),!0;case"dragenter":return st=ht(st,e,t,n,r,a),!0;case"mouseover":return ut=ht(ut,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ct.set(o,ht(ct.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,dt.set(o,ht(dt.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;gt(e,r)}Dr(e,t,r,null,n)}}}function Jt(e,t,n,r){var a=Ce(r);if(null!==(a=na(a))){var o=Ke(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Qe(o)))return a;a=null}else if(3===i){if(o.stateNode.hydrate)return 3===o.tag?o.stateNode.containerInfo:null;a=null}else o!==a&&(a=null)}}return Dr(e,t,r,a,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,a="value"in en?en.value:en.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return nn=a.slice(e,1<t?1-t:void 0)}function an(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function ln(){return!1}function sn(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?on:ln,this.isPropagationStopped=ln,this}return a(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var un,cn,dn,fn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(fn),mn=a({},fn,{view:0,detail:0}),gn=sn(mn),hn=a({},mn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==dn&&(dn&&"mousemove"===e.type?(un=e.screenX-dn.screenX,cn=e.screenY-dn.screenY):cn=un=0,dn=e),un)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),bn=sn(hn),vn=sn(a({},hn,{dataTransfer:0})),yn=sn(a({},mn,{relatedTarget:0})),wn=sn(a({},fn,{animationName:0,elapsedTime:0,pseudoElement:0})),En=a({},fn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),kn=sn(En),_n=sn(a({},fn,{data:0})),Sn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function Pn(){return Tn}var An=a({},mn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=an(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?an(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?an(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Ln=sn(An),On=sn(a({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=sn(a({},mn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),In=sn(a({},fn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Rn=a({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Dn=sn(Rn),Mn=[9,13,27,32],Fn=d&&"CompositionEvent"in window,Bn=null;d&&"documentMode"in document&&(Bn=document.documentMode);var Un=d&&"TextEvent"in window&&!Bn,zn=d&&(!Fn||Bn&&8<Bn&&11>=Bn),$n=String.fromCharCode(32),jn=!1;function Zn(e,t){switch(e){case"keyup":return-1!==Mn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Hn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Vn=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function qn(e,t,n,r){Oe(r),0<(t=Fr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Yn=null,Kn=null;function Qn(e){Ar(e,0)}function Xn(e){if(Q(aa(e)))return e}function Jn(e,t){if("change"===e)return t}var er=!1;if(d){var tr;if(d){var nr="oninput"in document;if(!nr){var rr=document.createElement("div");rr.setAttribute("oninput","return;"),nr="function"==typeof rr.oninput}tr=nr}else tr=!1;er=tr&&(!document.documentMode||9<document.documentMode)}function ar(){Yn&&(Yn.detachEvent("onpropertychange",or),Kn=Yn=null)}function or(e){if("value"===e.propertyName&&Xn(Kn)){var t=[];if(qn(t,Kn,e,Ce(e)),e=Qn,Fe)e(t);else{Fe=!0;try{Ie(e,t)}finally{Fe=!1,Ue()}}}}function ir(e,t,n){"focusin"===e?(ar(),Kn=n,(Yn=t).attachEvent("onpropertychange",or)):"focusout"===e&&ar()}function lr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Kn)}function sr(e,t){if("click"===e)return Xn(t)}function ur(e,t){if("input"===e||"change"===e)return Xn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},dr=Object.prototype.hasOwnProperty;function fr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!dr.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function pr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function mr(e,t){var n,r=pr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pr(r)}}function gr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?gr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function br(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var vr=d&&"documentMode"in document&&11>=document.documentMode,yr=null,wr=null,Er=null,kr=!1;function _r(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;kr||null==yr||yr!==X(r)||("selectionStart"in(r=yr)&&br(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},Er&&fr(Er,r)||(Er=r,0<(r=Fr(wr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=yr)))}Dt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Dt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Dt(Rt,2);for(var Sr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),xr=0;xr<Sr.length;xr++)It.set(Sr[xr],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Cr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Cr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,l,s,u){if(Ye.apply(this,arguments),He){if(!He)throw Error(i(198));var c=Ve;He=!1,Ve=null,Ge||(Ge=!0,We=c)}}(r,t,void 0,e),e.currentTarget=null}function Ar(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==o&&a.isPropagationStopped())break e;Pr(a,l,u),o=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==o&&a.isPropagationStopped())break e;Pr(a,l,u),o=s}}}if(Ge)throw e=We,Ge=!1,We=null,e}function Lr(e,t){var n=ia(t),r=e+"__bubble";n.has(r)||(Rr(t,e,2,!1),n.add(r))}var Or="_reactListening"+Math.random().toString(36).slice(2);function Nr(e){e[Or]||(e[Or]=!0,l.forEach((function(t){Tr.has(t)||Ir(t,!1,e,null),Ir(t,!0,e,null)})))}function Ir(e,t,n,r){var a=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,o=n;if("selectionchange"===e&&9!==n.nodeType&&(o=n.ownerDocument),null!==r&&!t&&Tr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=ia(o),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(a|=4),Rr(o,e,a,t),i.add(l))}function Rr(e,t,n,r){var a=It.get(t);switch(void 0===a?2:a){case 0:a=Kt;break;case 1:a=Qt;break;default:a=Xt}n=a.bind(null,t,n,e),a=void 0,!$e||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Dr(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===a||8===l.nodeType&&l.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===a||8===s.nodeType&&s.parentNode===a))return;i=i.return}for(;null!==l;){if(null===(i=na(l)))return;if(5===(s=i.tag)||6===s){r=o=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Be)return e(t,n);Be=!0;try{Me(e,t,n)}finally{Be=!1,Ue()}}((function(){var r=o,a=Ce(n),i=[];e:{var l=Nt.get(e);if(void 0!==l){var s=pn,u=e;switch(e){case"keypress":if(0===an(n))break e;case"keydown":case"keyup":s=Ln;break;case"focusin":u="focus",s=yn;break;case"focusout":u="blur",s=yn;break;case"beforeblur":case"afterblur":s=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=bn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=vn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Nn;break;case Pt:case At:case Lt:s=wn;break;case Ot:s=In;break;case"scroll":s=gn;break;case"wheel":s=Dn;break;case"copy":case"cut":case"paste":s=kn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=On}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var g=(p=m).stateNode;if(5===p.tag&&null!==g&&(p=g,null!==f&&(null!=(g=ze(m,f))&&c.push(Mr(m,g,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,a),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!na(u)&&!u[ea])&&(s||l)&&(l=a.window===a?a:(l=a.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?na(u):null)&&(u!==(d=Ke(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=bn,g="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=On,g="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:aa(s),p=null==u?l:aa(u),(l=new c(g,m+"leave",s,n,a)).target=d,l.relatedTarget=p,g=null,na(a)===r&&((c=new c(f,m+"enter",u,n,a)).target=p,c.relatedTarget=d,g=c),d=g,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Br(p))m++;for(p=0,g=f;g;g=Br(g))p++;for(;0<m-p;)c=Br(c),m--;for(;0<p-m;)f=Br(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Br(c),f=Br(f)}c=null}else c=null;null!==s&&Ur(i,l,s,c,!1),null!==u&&null!==d&&Ur(i,d,u,c,!0)}if("select"===(s=(l=r?aa(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var h=Jn;else if(Wn(l))if(er)h=ur;else{h=lr;var b=ir}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(h=sr);switch(h&&(h=h(e,r))?qn(i,h,n,a):(b&&b(e,l,r),"focusout"===e&&(b=l._wrapperState)&&b.controlled&&"number"===l.type&&ae(l,"number",l.value)),b=r?aa(r):window,e){case"focusin":(Wn(b)||"true"===b.contentEditable)&&(yr=b,wr=r,Er=null);break;case"focusout":Er=wr=yr=null;break;case"mousedown":kr=!0;break;case"contextmenu":case"mouseup":case"dragend":kr=!1,_r(i,n,a);break;case"selectionchange":if(vr)break;case"keydown":case"keyup":_r(i,n,a)}var v;if(Fn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Vn?Zn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(Vn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Vn&&(v=rn()):(tn="value"in(en=a)?en.value:en.textContent,Vn=!0)),0<(b=Fr(r,y)).length&&(y=new _n(y,e,null,n,a),i.push({event:y,listeners:b}),v?y.data=v:null!==(v=Hn(n))&&(y.data=v))),(v=Un?function(e,t){switch(e){case"compositionend":return Hn(t);case"keypress":return 32!==t.which?null:(jn=!0,$n);case"textInput":return(e=t.data)===$n&&jn?null:e;default:return null}}(e,n):function(e,t){if(Vn)return"compositionend"===e||!Fn&&Zn(e,t)?(e=rn(),nn=tn=en=null,Vn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Fr(r,"onBeforeInput")).length&&(a=new _n("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Ar(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Fr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=ze(e,n))&&r.unshift(Mr(e,o,a)),null!=(o=ze(e,t))&&r.push(Mr(e,o,a))),e=e.return}return r}function Br(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Ur(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,a?null!=(s=ze(n,o))&&i.unshift(Mr(n,s,l)):a||null!=(s=ze(n,o))&&i.push(Mr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function zr(){}var $r=null,jr=null;function Zr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Hr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Vr="function"==typeof setTimeout?setTimeout:void 0,Gr="function"==typeof clearTimeout?clearTimeout:void 0;function Wr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function qr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Yr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Kr=0;var Qr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Qr,Jr="__reactProps$"+Qr,ea="__reactContainer$"+Qr,ta="__reactEvents$"+Qr;function na(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ea]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Yr(e);null!==e;){if(n=e[Xr])return n;e=Yr(e)}return t}n=(e=n).parentNode}return null}function ra(e){return!(e=e[Xr]||e[ea])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function aa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oa(e){return e[Jr]||null}function ia(e){var t=e[ta];return void 0===t&&(t=e[ta]=new Set),t}var la=[],sa=-1;function ua(e){return{current:e}}function ca(e){0>sa||(e.current=la[sa],la[sa]=null,sa--)}function da(e,t){sa++,la[sa]=e.current,e.current=t}var fa={},pa=ua(fa),ma=ua(!1),ga=fa;function ha(e,t){var n=e.type.contextTypes;if(!n)return fa;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function ba(e){return null!=(e=e.childContextTypes)}function va(){ca(ma),ca(pa)}function ya(e,t,n){if(pa.current!==fa)throw Error(i(168));da(pa,t),da(ma,n)}function wa(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in e))throw Error(i(108,W(t)||"Unknown",o));return a({},n,r)}function Ea(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fa,ga=pa.current,da(pa,e),da(ma,ma.current),!0}function ka(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wa(e,t,ga),r.__reactInternalMemoizedMergedChildContext=e,ca(ma),ca(pa),da(pa,e)):ca(ma),da(ma,n)}var _a=null,Sa=null,xa=o.unstable_runWithPriority,Ca=o.unstable_scheduleCallback,Ta=o.unstable_cancelCallback,Pa=o.unstable_shouldYield,Aa=o.unstable_requestPaint,La=o.unstable_now,Oa=o.unstable_getCurrentPriorityLevel,Na=o.unstable_ImmediatePriority,Ia=o.unstable_UserBlockingPriority,Ra=o.unstable_NormalPriority,Da=o.unstable_LowPriority,Ma=o.unstable_IdlePriority,Fa={},Ba=void 0!==Aa?Aa:function(){},Ua=null,za=null,$a=!1,ja=La(),Za=1e4>ja?La:function(){return La()-ja};function Ha(){switch(Oa()){case Na:return 99;case Ia:return 98;case Ra:return 97;case Da:return 96;case Ma:return 95;default:throw Error(i(332))}}function Va(e){switch(e){case 99:return Na;case 98:return Ia;case 97:return Ra;case 96:return Da;case 95:return Ma;default:throw Error(i(332))}}function Ga(e,t){return e=Va(e),xa(e,t)}function Wa(e,t,n){return e=Va(e),Ca(e,t,n)}function qa(){if(null!==za){var e=za;za=null,Ta(e)}Ya()}function Ya(){if(!$a&&null!==Ua){$a=!0;var e=0;try{var t=Ua;Ga(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Ua=null}catch(n){throw null!==Ua&&(Ua=Ua.slice(e+1)),Ca(Na,qa),n}finally{$a=!1}}}var Ka=E.ReactCurrentBatchConfig;function Qa(e,t){if(e&&e.defaultProps){for(var n in t=a({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xa=ua(null),Ja=null,eo=null,to=null;function no(){to=eo=Ja=null}function ro(e){var t=Xa.current;ca(Xa),e.type._context._currentValue=t}function ao(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function oo(e,t){Ja=e,to=eo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Fi=!0),e.firstContext=null)}function io(e,t){if(to!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(to=e,t=1073741823),t={context:e,observedBits:t,next:null},null===eo){if(null===Ja)throw Error(i(308));eo=t,Ja.dependencies={lanes:0,firstContext:t,responders:null}}else eo=eo.next=t;return e._currentValue}var lo=!1;function so(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function uo(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function co(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function fo(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function po(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function mo(e,t,n,r){var o=e.updateQueue;lo=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=o.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,g=i;switch(s=t,p=n,g.tag){case 1:if("function"==typeof(m=g.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=g.payload)?m.call(p,f,s):m))break e;f=a({},f,s);break e;case 2:lo=!0}}null!==i.callback&&(e.flags|=32,null===(s=o.effects)?o.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=o.shared.pending))break;i=s.next,s.next=null,o.lastBaseUpdate=s,o.shared.pending=null}}null===d&&(u=f),o.baseState=u,o.firstBaseUpdate=c,o.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function go(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(i(191,a));a.call(r)}}}var ho=(new r.Component).refs;function bo(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:a({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var vo={isMounted:function(e){return!!(e=e._reactInternals)&&Ke(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=co(r,a);o.payload=t,null!=n&&(o.callback=n),fo(e,o),ms(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=co(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),fo(e,o),ms(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),a=co(n,r);a.tag=2,null!=t&&(a.callback=t),fo(e,a),ms(e,r,n)}};function yo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!fr(n,r)||!fr(a,o))}function wo(e,t,n){var r=!1,a=fa,o=t.contextType;return"object"==typeof o&&null!==o?o=io(o):(a=ba(t)?ga:pa.current,o=(r=null!=(r=t.contextTypes))?ha(e,a):fa),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=vo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function Eo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&vo.enqueueReplaceState(t,t.state,null)}function ko(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=ho,so(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=io(o):(o=ba(t)?ga:pa.current,a.context=ha(e,o)),mo(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(bo(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&vo.enqueueReplaceState(a,a.state,null),mo(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var _o=Array.isArray;function So(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var a=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===a?t.ref:(t=function(e){var t=r.refs;t===ho&&(t=r.refs={}),null===e?delete t[a]:t[a]=e},t._stringRef=a,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function xo(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function Co(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Gs(e,t)).index=0,e.sibling=null,e}function o(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ks(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=So(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=So(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Qs(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=qs(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ks(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=So(e,null,t),n.return=e,n;case _:return(t=Qs(t,e.mode,n)).return=e,t}if(_o(t)||j(t))return(t=qs(t,e.mode,n,null)).return=e,t;xo(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===a?n.type===S?d(e,t,n.props.children,r,a):u(e,t,n,r):null;case _:return n.key===a?c(e,t,n,r):null}if(_o(n)||j(n))return null!==a?null:d(e,t,n,r,null);xo(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return e=e.get(null===r.key?n:r.key)||null,r.type===S?d(t,e,r.props.children,a,r.key):u(t,e,r,a);case _:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(_o(r)||j(r))return d(t,e=e.get(n)||null,r,a,null);xo(t,r)}return null}function g(a,i,l,s){for(var u=null,c=null,d=i,g=i=0,h=null;null!==d&&g<l.length;g++){d.index>g?(h=d,d=null):h=d.sibling;var b=p(a,d,l[g],s);if(null===b){null===d&&(d=h);break}e&&d&&null===b.alternate&&t(a,d),i=o(b,i,g),null===c?u=b:c.sibling=b,c=b,d=h}if(g===l.length)return n(a,d),u;if(null===d){for(;g<l.length;g++)null!==(d=f(a,l[g],s))&&(i=o(d,i,g),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(a,d);g<l.length;g++)null!==(h=m(d,a,g,l[g],s))&&(e&&null!==h.alternate&&d.delete(null===h.key?g:h.key),i=o(h,i,g),null===c?u=h:c.sibling=h,c=h);return e&&d.forEach((function(e){return t(a,e)})),u}function h(a,l,s,u){var c=j(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,g=l,h=l=0,b=null,v=s.next();null!==g&&!v.done;h++,v=s.next()){g.index>h?(b=g,g=null):b=g.sibling;var y=p(a,g,v.value,u);if(null===y){null===g&&(g=b);break}e&&g&&null===y.alternate&&t(a,g),l=o(y,l,h),null===d?c=y:d.sibling=y,d=y,g=b}if(v.done)return n(a,g),c;if(null===g){for(;!v.done;h++,v=s.next())null!==(v=f(a,v.value,u))&&(l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return c}for(g=r(a,g);!v.done;h++,v=s.next())null!==(v=m(g,a,h,v.value,u))&&(e&&null!==v.alternate&&g.delete(null===v.key?h:v.key),l=o(v,l,h),null===d?c=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),c}return function(e,r,o,s){var u="object"==typeof o&&null!==o&&o.type===S&&null===o.key;u&&(o=o.props.children);var c="object"==typeof o&&null!==o;if(c)switch(o.$$typeof){case k:e:{for(c=o.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(o.type===S){n(e,u.sibling),(r=a(u,o.props.children)).return=e,e=r;break e}}else if(u.elementType===o.type){n(e,u.sibling),(r=a(u,o.props)).ref=So(e,u,o),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}o.type===S?((r=qs(o.props.children,e.mode,s,o.key)).return=e,e=r):((s=Ws(o.type,o.key,o.props,null,e.mode,s)).ref=So(e,r,o),s.return=e,e=s)}return l(e);case _:e:{for(u=o.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),(r=a(r,o.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Qs(o,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof o||"number"==typeof o)return o=""+o,null!==r&&6===r.tag?(n(e,r.sibling),(r=a(r,o)).return=e,e=r):(n(e,r),(r=Ks(o,e.mode,s)).return=e,e=r),l(e);if(_o(o))return g(e,r,o,s);if(j(o))return h(e,r,o,s);if(c&&xo(e,o),void 0===o&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var To=Co(!0),Po=Co(!1),Ao={},Lo=ua(Ao),Oo=ua(Ao),No=ua(Ao);function Io(e){if(e===Ao)throw Error(i(174));return e}function Ro(e,t){switch(da(No,t),da(Oo,e),da(Lo,Ao),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:me(null,"");break;default:t=me(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ca(Lo),da(Lo,t)}function Do(){ca(Lo),ca(Oo),ca(No)}function Mo(e){Io(No.current);var t=Io(Lo.current),n=me(t,e.type);t!==n&&(da(Oo,e),da(Lo,n))}function Fo(e){Oo.current===e&&(ca(Lo),ca(Oo))}var Bo=ua(0);function Uo(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var zo=null,$o=null,jo=!1;function Zo(e,t){var n=Hs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Ho(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Vo(e){if(jo){var t=$o;if(t){var n=t;if(!Ho(e,t)){if(!(t=qr(n.nextSibling))||!Ho(e,t))return e.flags=-1025&e.flags|2,jo=!1,void(zo=e);Zo(zo,n)}zo=e,$o=qr(t.firstChild)}else e.flags=-1025&e.flags|2,jo=!1,zo=e}}function Go(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;zo=e}function Wo(e){if(e!==zo)return!1;if(!jo)return Go(e),jo=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Hr(t,e.memoizedProps))for(t=$o;t;)Zo(e,t),t=qr(t.nextSibling);if(Go(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){$o=qr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}$o=null}}else $o=zo?qr(e.stateNode.nextSibling):null;return!0}function qo(){$o=zo=null,jo=!1}var Yo=[];function Ko(){for(var e=0;e<Yo.length;e++)Yo[e]._workInProgressVersionPrimary=null;Yo.length=0}var Qo=E.ReactCurrentDispatcher,Xo=E.ReactCurrentBatchConfig,Jo=0,ei=null,ti=null,ni=null,ri=!1,ai=!1;function oi(){throw Error(i(321))}function ii(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function li(e,t,n,r,a,o){if(Jo=o,ei=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Qo.current=null===e||null===e.memoizedState?Ii:Ri,e=n(r,a),ai){o=0;do{if(ai=!1,!(25>o))throw Error(i(301));o+=1,ni=ti=null,t.updateQueue=null,Qo.current=Di,e=n(r,a)}while(ai)}if(Qo.current=Ni,t=null!==ti&&null!==ti.next,Jo=0,ni=ti=ei=null,ri=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ni?ei.memoizedState=ni=e:ni=ni.next=e,ni}function ui(){if(null===ti){var e=ei.alternate;e=null!==e?e.memoizedState:null}else e=ti.next;var t=null===ni?ei.memoizedState:ni.next;if(null!==t)ni=t,ti=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ti=e).memoizedState,baseState:ti.baseState,baseQueue:ti.baseQueue,queue:ti.queue,next:null},null===ni?ei.memoizedState=ni=e:ni=ni.next=e}return ni}function ci(e,t){return"function"==typeof t?t(e):t}function di(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ti,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var l=a.next;a.next=o.next,o.next=l}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var s=l=o=null,u=a;do{var c=u.lane;if((Jo&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,o=r):s=s.next=d,ei.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==a);null===s?o=r:s.next=l,cr(r,t.memoizedState)||(Fi=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function fi(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(null!==a){n.pending=null;var l=a=a.next;do{o=e(o,l.action),l=l.next}while(l!==a);cr(o,t.memoizedState)||(Fi=!0),t.memoizedState=o,null===t.baseQueue&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function pi(e,t,n){var r=t._getVersion;r=r(t._source);var a=t._workInProgressVersionPrimary;if(null!==a?e=a===r:(e=e.mutableReadLanes,(e=(Jo&e)===e)&&(t._workInProgressVersionPrimary=r,Yo.push(t))),e)return n(t._source);throw Yo.push(t),Error(i(350))}function mi(e,t,n,r){var a=Il;if(null===a)throw Error(i(349));var o=t._getVersion,l=o(t._source),s=Qo.current,u=s.useState((function(){return pi(a,t,n)})),c=u[1],d=u[0];u=ni;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,g=f.source;f=f.subscribe;var h=ei;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=o(t._source);if(!cr(l,e)){e=n(t._source),cr(d,e)||(c(e),e=ps(h),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var s=31-Ht(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(h);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),cr(m,n)&&cr(g,t)&&cr(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=c=Oi.bind(null,ei,e),u.queue=e,u.baseQueue=null,d=pi(a,t,n),u.memoizedState=u.baseState=d),d}function gi(e,t,n){return mi(ui(),e,t,n)}function hi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Oi.bind(null,ei,e),[t.memoizedState,e]}function bi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=ei.updateQueue)?(t={lastEffect:null},ei.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function vi(e){return e={current:e},si().memoizedState=e}function yi(){return ui().memoizedState}function wi(e,t,n,r){var a=si();ei.flags|=e,a.memoizedState=bi(1|t,n,void 0,void 0===r?null:r)}function Ei(e,t,n,r){var a=ui();r=void 0===r?null:r;var o=void 0;if(null!==ti){var i=ti.memoizedState;if(o=i.destroy,null!==r&&ii(r,i.deps))return void bi(t,n,o,r)}ei.flags|=e,a.memoizedState=bi(1|t,n,o,r)}function ki(e,t){return wi(516,4,e,t)}function _i(e,t){return Ei(516,4,e,t)}function Si(e,t){return Ei(4,2,e,t)}function xi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ci(e,t,n){return n=null!=n?n.concat([e]):null,Ei(4,2,xi.bind(null,t,e),n)}function Ti(){}function Pi(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ai(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Li(e,t){var n=Ha();Ga(98>n?98:n,(function(){e(!0)})),Ga(97<n?97:n,(function(){var n=Xo.transition;Xo.transition=1;try{e(!1),t()}finally{Xo.transition=n}}))}function Oi(e,t,n){var r=fs(),a=ps(e),o={lane:a,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?o.next=o:(o.next=i.next,i.next=o),t.pending=o,i=e.alternate,e===ei||null!==i&&i===ei)ai=ri=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(o.eagerReducer=i,o.eagerState=s,cr(s,l))return}catch(u){}ms(e,a,r)}}var Ni={readContext:io,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ii={readContext:io,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:io,useEffect:ki,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,xi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return wi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Oi.bind(null,ei,e),[r.memoizedState,e]},useRef:vi,useState:hi,useDebugValue:Ti,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return ki((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return vi(e=Li.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},mi(r,e,t,n)},useOpaqueIdentifier:function(){if(jo){var e=!1,t=function(e){return{$$typeof:D,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Kr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&ei.mode)&&(ei.flags|=516,bi(5,(function(){n("r:"+(Kr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Kr++).toString(36)),t},unstable_isNewReconciler:!1},Ri={readContext:io,useCallback:Pi,useContext:io,useEffect:_i,useImperativeHandle:Ci,useLayoutEffect:Si,useMemo:Ai,useReducer:di,useRef:yi,useState:function(){return di(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return _i((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[yi().current,e]},useMutableSource:gi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Di={readContext:io,useCallback:Pi,useContext:io,useEffect:_i,useImperativeHandle:Ci,useLayoutEffect:Si,useMemo:Ai,useReducer:fi,useRef:yi,useState:function(){return fi(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=fi(ci),n=t[0],r=t[1];return _i((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=fi(ci)[0];return[yi().current,e]},useMutableSource:gi,useOpaqueIdentifier:function(){return fi(ci)[0]},unstable_isNewReconciler:!1},Mi=E.ReactCurrentOwner,Fi=!1;function Bi(e,t,n,r){t.child=null===e?Po(t,null,n,r):To(t,e.child,n,r)}function Ui(e,t,n,r,a){n=n.render;var o=t.ref;return oo(t,a),r=li(e,t,n,r,o,a),null===e||Fi?(t.flags|=1,Bi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function zi(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Vs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,$i(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:fr)(a,r)&&e.ref===t.ref)?ol(e,t,o):(t.flags|=1,(e=Gs(i,r)).ref=t.ref,e.return=t,t.child=e)}function $i(e,t,n,r,a,o){if(null!==e&&fr(e.memoizedProps,r)&&e.ref===t.ref){if(Fi=!1,0==(o&a))return t.lanes=e.lanes,ol(e,t,o);0!=(16384&e.flags)&&(Fi=!0)}return Hi(e,t,n,r,o)}function ji(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},ks(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},ks(t,e),null;t.memoizedState={baseLanes:0},ks(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,ks(t,r);return Bi(e,t,a,n),t.child}function Zi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Hi(e,t,n,r,a){var o=ba(n)?ga:pa.current;return o=ha(t,o),oo(t,a),n=li(e,t,n,r,o,a),null===e||Fi?(t.flags|=1,Bi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function Vi(e,t,n,r,a){if(ba(n)){var o=!0;Ea(t)}else o=!1;if(oo(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),wo(t,n,r),ko(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=io(u):u=ha(t,u=ba(n)?ga:pa.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&Eo(t,i,r,u),lo=!1;var f=t.memoizedState;i.state=f,mo(t,r,i,a),s=t.memoizedState,l!==r||f!==s||ma.current||lo?("function"==typeof c&&(bo(t,n,c,r),s=t.memoizedState),(l=lo||yo(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,uo(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Qa(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=io(s):s=ha(t,s=ba(n)?ga:pa.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&Eo(t,i,r,s),lo=!1,f=t.memoizedState,i.state=f,mo(t,r,i,a);var m=t.memoizedState;l!==d||f!==m||ma.current||lo?("function"==typeof p&&(bo(t,n,p,r),m=t.memoizedState),(u=lo||yo(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Gi(e,t,n,r,o,a)}function Gi(e,t,n,r,a,o){Zi(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&ka(t,n,!1),ol(e,t,o);r=t.stateNode,Mi.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=To(t,e.child,null,o),t.child=To(t,null,l,o)):Bi(e,t,l,o),t.memoizedState=r.state,a&&ka(t,n,!0),t.child}function Wi(e){var t=e.stateNode;t.pendingContext?ya(0,t.pendingContext,t.pendingContext!==t.context):t.context&&ya(0,t.context,!1),Ro(e,t.containerInfo)}var qi,Yi,Ki,Qi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,a=t.pendingProps,o=Bo.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&o)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===a.fallback||!0===a.unstable_avoidThisFallback||(o|=1),da(Bo,1&o),null===e?(void 0!==a.fallback&&Vo(t),e=a.children,o=a.fallback,i?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qi,e):"number"==typeof a.unstable_expectedLoadTime?(e=Ji(t,e,o,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Qi,t.lanes=33554432,e):((n=Ys({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=tl(e,t,a.children,a.fallback,n),i=t.child,o=e.child.memoizedState,i.memoizedState=null===o?{baseLanes:n}:{baseLanes:o.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Qi,a):(n=el(e,t,a.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var a=e.mode,o=e.child;return t={mode:"hidden",children:t},0==(2&a)&&null!==o?(o.childLanes=0,o.pendingProps=t):o=Ys(t,a,0,null),n=qs(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function el(e,t,n,r){var a=e.child;return e=a.sibling,n=Gs(a,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Gs(i,l),null!==e?r=Gs(e,r):(r=qs(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ao(e.return,t)}function rl(e,t,n,r,a,o){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a,lastEffect:o}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=a,i.lastEffect=o)}function al(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Bi(e,t,r.children,n),0!=(2&(r=Bo.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(da(Bo,r),0==(2&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===Uo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rl(t,!1,a,n,o,t.lastEffect);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===Uo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rl(t,!0,n,null,o,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function ol(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Gs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Gs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!jo)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return ba(t.type)&&va(),null;case 3:return Do(),ca(ma),ca(pa),Ko(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Wo(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Fo(t);var o=Io(No.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Io(Lo.current),Wo(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Xr]=t,r[Jr]=l,n){case"dialog":Lr("cancel",r),Lr("close",r);break;case"iframe":case"object":case"embed":Lr("load",r);break;case"video":case"audio":for(e=0;e<Cr.length;e++)Lr(Cr[e],r);break;case"source":Lr("error",r);break;case"img":case"image":case"link":Lr("error",r),Lr("load",r);break;case"details":Lr("toggle",r);break;case"input":ee(r,l),Lr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Lr("invalid",r);break;case"textarea":se(r,l),Lr("invalid",r)}for(var u in Se(n,l),e=null,l)l.hasOwnProperty(u)&&(o=l[u],"children"===u?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):s.hasOwnProperty(u)&&null!=o&&"onScroll"===u&&Lr("scroll",r));switch(n){case"input":K(r),re(r,l,!0);break;case"textarea":K(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=zr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===o.nodeType?o:o.ownerDocument,e===de&&(e=pe(n)),e===de?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Xr]=t,e[Jr]=r,qi(e,t),t.stateNode=e,u=xe(n,r),n){case"dialog":Lr("cancel",e),Lr("close",e),o=r;break;case"iframe":case"object":case"embed":Lr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Cr.length;o++)Lr(Cr[o],e);o=r;break;case"source":Lr("error",e),o=r;break;case"img":case"image":case"link":Lr("error",e),Lr("load",e),o=r;break;case"details":Lr("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Lr("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Lr("invalid",e);break;case"textarea":se(e,r),o=le(e,r),Lr("invalid",e);break;default:o=r}Se(n,o);var c=o;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?ke(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&be(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&ve(e,d):"number"==typeof d&&ve(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Lr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+q(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=zr)}Zr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Io(No.current),Io(Lo.current),Wo(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return ca(Bo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Wo(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Bo.current)?0===Bl&&(Bl=3):(0!==Bl&&3!==Bl||(Bl=4),null===Il||0==(134217727&$l)&&0==(134217727&jl)||vs(Il,Dl))),(r||n)&&(t.flags|=4),null);case 4:return Do(),null===e&&Nr(t.stateNode.containerInfo),null;case 10:return ro(t),null;case 19:if(ca(Bo),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Bl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Uo(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return da(Bo,1&Bo.current|2),t.child}e=e.sibling}null!==r.tail&&Za()>Gl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Uo(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!jo)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Za()-r.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Za(),n.sibling=null,t=Bo.current,da(Bo,l?1&t|2:1&t),n):null;case 23:case 24:return _s(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:ba(e.type)&&va();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Do(),ca(ma),ca(pa),Ko(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Fo(e),null;case 13:return ca(Bo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ca(Bo),null;case 4:return Do(),null;case 10:return ro(e),null;case 23:case 24:return _s(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=G(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}qi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Yi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Io(Lo.current);var i,l=null;switch(n){case"input":o=J(e,o),r=J(e,r),l=[];break;case"option":o=oe(e,o),r=oe(e,r),l=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),l=[];break;case"textarea":o=le(e,o),r=le(e,r),l=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=zr)}for(d in Se(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var u=o[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Lr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===D?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=co(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Kl||(Kl=!0,Ql=r),cl(0,t)},n}function pl(e,t,n){(n=co(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return cl(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function gl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function hl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Qa(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Wr(t.stateNode.containerInfo))}throw Error(i(163))}function bl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var a=e;r=a.next,0!=(4&(a=a.tag))&&0!=(1&a)&&(Fs(n,e),Ms(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Qa(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&go(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}go(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Zr(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&kt(n)))))}throw Error(i(163))}function vl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var a=n.memoizedProps.style;a=null!=a&&a.hasOwnProperty("display")?a.display:null,r.style.display=Ee("display",a)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(Sa&&"function"==typeof Sa.onCommitFiberUnmount)try{Sa.onCommitFiberUnmount(_a,t)}catch(o){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,a=r.destroy;if(r=r.tag,void 0!==a)if(0!=(4&r))Fs(t,n);else{r=t;try{a()}catch(o){zs(r,o)}}n=n.next}while(n!==e)}break;case 1:if(gl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){zs(t,o)}break;case 5:gl(t);break;case 4:xl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function El(e){return 5===e.tag||3===e.tag||4===e.tag}function kl(e){e:{for(var t=e.return;null!==t;){if(El(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ve(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||El(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?_l(e,n,t):Sl(e,n,t)}function _l(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=zr));else if(4!==r&&null!==(e=e.child))for(_l(e,t,n),e=e.sibling;null!==e;)_l(e,t,n),e=e.sibling}function Sl(e,t,n){var r=e.tag,a=5===r||6===r;if(a)e=a?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(Sl(e,t,n),e=e.sibling;null!==e;)Sl(e,t,n),e=e.sibling}function xl(e,t){for(var n,r,a=t,o=!1;;){if(!o){o=a.return;e:for(;;){if(null===o)throw Error(i(160));switch(n=o.stateNode,o.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}o=o.return}o=!0}if(5===a.tag||6===a.tag){e:for(var l=e,s=a,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=a.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(a.stateNode)}else if(4===a.tag){if(null!==a.child){n=a.stateNode.containerInfo,r=!0,a.child.return=a,a=a.child;continue}}else if(yl(e,a),null!==a.child){a.child.return=a,a=a.child;continue}if(a===t)break;for(;null===a.sibling;){if(null===a.return||a.return===t)return;4===(a=a.return).tag&&(o=!1)}a.sibling.return=a.return,a=a.sibling}}function Cl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var a=null!==e?e.memoizedProps:r;e=t.type;var o=t.updateQueue;if(t.updateQueue=null,null!==o){for(n[Jr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),xe(e,a),t=xe(e,r),a=0;a<o.length;a+=2){var l=o[a],s=o[a+1];"style"===l?ke(n,s):"dangerouslySetInnerHTML"===l?be(n,s):"children"===l?ve(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(o=r.value)?ie(n,!!r.multiple,o,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,kt(n.containerInfo)));case 13:return null!==t.memoizedState&&(Vl=Za(),vl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void vl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=js.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Pl(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Al=Math.ceil,Ll=E.ReactCurrentDispatcher,Ol=E.ReactCurrentOwner,Nl=0,Il=null,Rl=null,Dl=0,Ml=0,Fl=ua(0),Bl=0,Ul=null,zl=0,$l=0,jl=0,Zl=0,Hl=null,Vl=0,Gl=1/0;function Wl(){Gl=Za()+500}var ql,Yl=null,Kl=!1,Ql=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],as=null,os=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Nl)?Za():-1!==ls?ls:ls=Za()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Ha()?1:2;if(0===ss&&(ss=zl),0!==Ka.transition){0!==us&&(us=null!==Hl?Hl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Ha(),0!=(4&Nl)&&98===e?e=zt(12,ss):e=zt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function ms(e,t,n){if(50<os)throw os=0,is=null,Error(i(185));if(null===(e=gs(e,t)))return null;Zt(e,t,n),e===Il&&(jl|=t,4===Bl&&vs(e,Dl));var r=Ha();1===t?0!=(8&Nl)&&0==(48&Nl)?ys(e):(hs(e,n),0===Nl&&(Wl(),qa())):(0==(4&Nl)||98!==r&&99!==r||(null===as?as=new Set([e]):as.add(e)),hs(e,n)),Hl=e}function gs(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function hs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Ht(l),u=1<<s,c=o[s];if(-1===c){if(0==(u&r)||0!=(u&a)){c=t,Ft(u);var d=Mt;o[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Bt(e,e===Il?Dl:0),t=Mt,0===r)null!==n&&(n!==Fa&&Ta(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fa&&Ta(n)}15===t?(n=ys.bind(null,e),null===Ua?(Ua=[n],za=Ca(Na,Ya)):Ua.push(n),n=Fa):14===t?n=Wa(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Wa(n,bs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function bs(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Ds()&&e.callbackNode!==t)return null;var n=Bt(e,e===Il?Dl:0);if(0===n)return null;var r=n,a=Nl;Nl|=16;var o=Cs();for(Il===e&&Dl===r||(Wl(),Ss(e,r));;)try{As();break}catch(s){xs(e,s)}if(no(),Ll.current=o,Nl=a,null!==Rl?r=0:(Il=null,Dl=0,r=Bl),0!=(zl&jl))Ss(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Wr(e.containerInfo)),0!==(n=Ut(e))&&(r=Ts(e,n))),1===r)throw t=Ul,Ss(e,0),vs(e,n),hs(e,Za()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(vs(e,n),(62914560&n)===n&&10<(r=Vl+500-Za())){if(0!==Bt(e,0))break;if(((a=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Vr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(vs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var l=31-Ht(n);o=1<<l,(l=r[l])>a&&(a=l),n&=~o}if(n=a,10<(n=(120>(n=Za()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Al(n/1960))-n)){e.timeoutHandle=Vr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return hs(e,Za()),e.callbackNode===t?bs.bind(null,e):null}function vs(e,t){for(t&=~Zl,t&=~jl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Ht(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Nl))throw Error(i(327));if(Ds(),e===Il&&0!=(e.expiredLanes&Dl)){var t=Dl,n=Ts(e,t);0!=(zl&jl)&&(n=Ts(e,t=Bt(e,t)))}else n=Ts(e,t=Bt(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Wr(e.containerInfo)),0!==(t=Ut(e))&&(n=Ts(e,t))),1===n)throw n=Ul,Ss(e,0),vs(e,t),hs(e,Za()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),hs(e,Za()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qa())}}function Es(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qa())}}function ks(e,t){da(Fl,Ml),Ml|=t,zl|=t}function _s(){Ml=Fl.current,ca(Fl)}function Ss(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Gr(n)),null!==Rl)for(n=Rl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&va();break;case 3:Do(),ca(ma),ca(pa),Ko();break;case 5:Fo(r);break;case 4:Do();break;case 13:case 19:ca(Bo);break;case 10:ro(r);break;case 23:case 24:_s()}n=n.return}Il=e,Rl=Gs(e.current,null),Dl=Ml=zl=t,Bl=0,Ul=null,Zl=jl=$l=0}function xs(e,t){for(;;){var n=Rl;try{if(no(),Qo.current=Ni,ri){for(var r=ei.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ri=!1}if(Jo=0,ni=ti=ei=null,ai=!1,Ol.current=null,null===n||null===n.return){Bl=1,Ul=t,Rl=null;break}e:{var o=e,i=n.return,l=n,s=t;if(t=Dl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Bo.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var g=f.memoizedProps;p=void 0!==g.fallback&&(!0!==g.unstable_avoidThisFallback||!d)}}if(p){var h=f.updateQueue;if(null===h){var b=new Set;b.add(u),f.updateQueue=b}else h.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var v=co(-1,1);v.tag=2,fo(l,v)}l.lanes|=1;break e}s=void 0,l=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,o,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Bl&&(Bl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:o=s,f.flags|=4096,t&=-t,f.lanes|=t,po(f,fl(0,o,t));break e;case 1:o=s;var E=f.type,k=f.stateNode;if(0==(64&f.flags)&&("function"==typeof E.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===Xl||!Xl.has(k)))){f.flags|=4096,t&=-t,f.lanes|=t,po(f,pl(f,o,t));break e}}f=f.return}while(null!==f)}Os(n)}catch(_){t=_,Rl===n&&null!==n&&(Rl=n=n.return);continue}break}}function Cs(){var e=Ll.current;return Ll.current=Ni,null===e?Ni:e}function Ts(e,t){var n=Nl;Nl|=16;var r=Cs();for(Il===e&&Dl===t||Ss(e,t);;)try{Ps();break}catch(a){xs(e,a)}if(no(),Nl=n,Ll.current=r,null!==Rl)throw Error(i(261));return Il=null,Dl=0,Bl}function Ps(){for(;null!==Rl;)Ls(Rl)}function As(){for(;null!==Rl&&!Pa();)Ls(Rl)}function Ls(e){var t=ql(e.alternate,e,Ml);e.memoizedProps=e.pendingProps,null===t?Os(e):Rl=t,Ol.current=null}function Os(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Ml)))return void(Rl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ml)||0==(4&n.mode)){for(var r=0,a=n.child;null!==a;)r|=a.lanes|a.childLanes,a=a.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Rl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Rl=t);Rl=t=e}while(null!==t);0===Bl&&(Bl=5)}function Ns(e){var t=Ha();return Ga(99,Is.bind(null,e,t)),null}function Is(e,t){do{Ds()}while(null!==es);if(0!=(48&Nl))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,a=r,o=e.pendingLanes&~a;e.pendingLanes=a,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=a,e.mutableReadLanes&=a,e.entangledLanes&=a,a=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<o;){var u=31-Ht(o),c=1<<u;a[u]=0,l[u]=-1,s[u]=-1,o&=~c}if(null!==as&&0==(24&r)&&as.has(e)&&as.delete(e),e===Il&&(Rl=Il=null,Dl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Nl,Nl|=32,Ol.current=null,$r=Yt,br(l=hr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,o=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(C){s=null;break e}var d=0,f=-1,p=-1,m=0,g=0,h=l,b=null;t:for(;;){for(var v;h!==s||0!==o&&3!==h.nodeType||(f=d+o),h!==u||0!==c&&3!==h.nodeType||(p=d+c),3===h.nodeType&&(d+=h.nodeValue.length),null!==(v=h.firstChild);)b=h,h=v;for(;;){if(h===l)break t;if(b===s&&++m===o&&(f=d),b===u&&++g===c&&(p=d),null!==(v=h.nextSibling))break;b=(h=b).parentNode}h=v}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;jr={focusedElem:l,selectionRange:s},Yt=!1,cs=null,ds=!1,Yl=r;do{try{Rs()}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);cs=null,Yl=r;do{try{for(l=e;null!==Yl;){var y=Yl.flags;if(16&y&&ve(Yl.stateNode,""),128&y){var w=Yl.alternate;if(null!==w){var E=w.ref;null!==E&&("function"==typeof E?E(null):E.current=null)}}switch(1038&y){case 2:kl(Yl),Yl.flags&=-3;break;case 6:kl(Yl),Yl.flags&=-3,Cl(Yl.alternate,Yl);break;case 1024:Yl.flags&=-1025;break;case 1028:Yl.flags&=-1025,Cl(Yl.alternate,Yl);break;case 4:Cl(Yl.alternate,Yl);break;case 8:xl(l,s=Yl);var k=s.alternate;wl(s),null!==k&&wl(k)}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);if(E=jr,w=hr(),y=E.focusedElem,l=E.selectionRange,w!==y&&y&&y.ownerDocument&&gr(y.ownerDocument.documentElement,y)){null!==l&&br(y)&&(w=l.start,void 0===(E=l.end)&&(E=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(E,y.value.length)):(E=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),s=y.textContent.length,k=Math.min(l.start,s),l=void 0===l.end?k:Math.min(l.end,s),!E.extend&&k>l&&(s=l,l=k,k=s),s=mr(y,k),o=mr(y,l),s&&o&&(1!==E.rangeCount||E.anchorNode!==s.node||E.anchorOffset!==s.offset||E.focusNode!==o.node||E.focusOffset!==o.offset)&&((w=w.createRange()).setStart(s.node,s.offset),E.removeAllRanges(),k>l?(E.addRange(w),E.extend(o.node,o.offset)):(w.setEnd(o.node,o.offset),E.addRange(w))))),w=[];for(E=y;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(E=w[y]).element.scrollLeft=E.left,E.element.scrollTop=E.top}Yt=!!$r,jr=$r=null,e.current=n,Yl=r;do{try{for(y=e;null!==Yl;){var _=Yl.flags;if(36&_&&bl(y,Yl.alternate,Yl),128&_){w=void 0;var S=Yl.ref;if(null!==S){var x=Yl.stateNode;Yl.tag,w=x,"function"==typeof S?S(w):S.current=w}}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);Yl=null,Ba(),Nl=a}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Yl=r;null!==Yl;)t=Yl.nextEffect,Yl.nextEffect=null,8&Yl.flags&&((_=Yl).sibling=null,_.stateNode=null),Yl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?os++:(os=0,is=e):os=0,n=n.stateNode,Sa&&"function"==typeof Sa.onCommitFiberRoot)try{Sa.onCommitFiberRoot(_a,n,void 0,64==(64&n.current.flags))}catch(C){}if(hs(e,Za()),Kl)throw Kl=!1,e=Ql,Ql=null,e;return 0!=(8&Nl)||qa(),null}function Rs(){for(;null!==Yl;){var e=Yl.alternate;ds||null===cs||(0!=(8&Yl.flags)?et(Yl,cs)&&(ds=!0):13===Yl.tag&&Pl(e,Yl)&&et(Yl,cs)&&(ds=!0));var t=Yl.flags;0!=(256&t)&&hl(e,Yl),0==(512&t)||Jl||(Jl=!0,Wa(97,(function(){return Ds(),null}))),Yl=Yl.nextEffect}}function Ds(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Ga(e,Bs)}return!1}function Ms(e,t){ns.push(t,e),Jl||(Jl=!0,Wa(97,(function(){return Ds(),null})))}function Fs(e,t){rs.push(t,e),Jl||(Jl=!0,Wa(97,(function(){return Ds(),null})))}function Bs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],l=a.destroy;if(a.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var s=a.create;a.destroy=s()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,qa(),!0}function Us(e,t,n){fo(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=gs(e,1))&&(Zt(e,1,t),hs(e,t))}function zs(e,t){if(3===e.tag)Us(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Us(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var a=pl(n,e=ul(t,e),1);if(fo(n,a),a=fs(),null!==(n=gs(n,1)))Zt(n,1,a),hs(n,a);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Il===e&&(Dl&n)===n&&(4===Bl||3===Bl&&(62914560&Dl)===Dl&&500>Za()-Vl?Ss(e,0):Zl|=n),hs(e,t)}function js(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Ha()?1:2:(0===ss&&(ss=zl),0===(t=$t(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=gs(e,t))&&(Zt(e,t,n),hs(e,n))}function Zs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hs(e,t,n,r){return new Zs(e,t,n,r)}function Vs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Gs(e,t){var n=e.alternate;return null===n?((n=Hs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,a,o){var l=2;if(r=e,"function"==typeof e)Vs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case S:return qs(n.children,a,o,t);case M:l=8,a|=16;break;case x:l=8,a|=1;break;case C:return(e=Hs(12,n,t,8|a)).elementType=C,e.type=C,e.lanes=o,e;case L:return(e=Hs(13,n,t,a)).type=L,e.elementType=L,e.lanes=o,e;case O:return(e=Hs(19,n,t,a)).elementType=O,e.lanes=o,e;case F:return Ys(n,a,o,t);case B:return(e=Hs(24,n,t,a)).elementType=B,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case P:l=9;break e;case A:l=11;break e;case N:l=14;break e;case I:l=16,r=null;break e;case R:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hs(l,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function qs(e,t,n,r){return(e=Hs(7,e,r,t)).lanes=n,e}function Ys(e,t,n,r){return(e=Hs(23,e,r,t)).elementType=F,e.lanes=n,e}function Ks(e,t,n){return(e=Hs(6,e,null,t)).lanes=n,e}function Qs(e,t,n){return(t=Hs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=jt(0),this.expirationTimes=jt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=jt(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:_,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function eu(e,t,n,r){var a=t.current,o=fs(),l=ps(a);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(ba(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(ba(u)){n=wa(n,u,s);break e}}n=s}else n=fa;return null===t.context?t.context=n:t.pendingContext=n,(t=co(o,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),fo(a,t),ms(a,l,o),l}function tu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function nu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ru(e,t){nu(e,t),(e=e.alternate)&&nu(e,t)}function au(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=Hs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,so(t),e[ea]=n.current,Nr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var a=(t=r[e])._getVersion;a=a(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,a]:n.mutableSourceEagerHydrationData.push(t,a)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function iu(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var l=a;a=function(){var e=tu(i);l.call(e)}}eu(t,i,e,a)}else{if(o=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new au(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var s=a;a=function(){var e=tu(i);s.call(e)}}Es((function(){eu(t,i,e,a)}))}return tu(i)}function lu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return Js(e,t,null,n)}ql=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||ma.current)Fi=!0;else{if(0==(n&r)){switch(Fi=!1,t.tag){case 3:Wi(t),qo();break;case 5:Mo(t);break;case 1:ba(t.type)&&Ea(t);break;case 4:Ro(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;da(Xa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(da(Bo,1&Bo.current),null!==(t=ol(e,t,n))?t.sibling:null);da(Bo,1&Bo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return al(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),da(Bo,Bo.current),r)break;return null;case 23:case 24:return t.lanes=0,ji(e,t,n)}return ol(e,t,n)}Fi=0!=(16384&e.flags)}else Fi=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=ha(t,pa.current),oo(t,n),a=li(null,t,r,e,a,n),t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,ba(r)){var o=!0;Ea(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,so(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&bo(t,r,l,e),a.updater=vo,t.stateNode=a,a._reactInternals=t,ko(t,r,e,n),t=Gi(null,t,r,!0,o,n)}else t.tag=0,Bi(null,t,a,n),t=t.child;return t;case 16:a=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,a=(o=a._init)(a._payload),t.type=a,o=t.tag=function(e){if("function"==typeof e)return Vs(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===N)return 14}return 2}(a),e=Qa(a,e),o){case 0:t=Hi(null,t,a,e,n);break e;case 1:t=Vi(null,t,a,e,n);break e;case 11:t=Ui(null,t,a,e,n);break e;case 14:t=zi(null,t,a,Qa(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,Hi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 1:return r=t.type,a=t.pendingProps,Vi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 3:if(Wi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,uo(e,t),mo(t,r,null,n),(r=t.memoizedState.element)===a)qo(),t=ol(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&($o=qr(t.stateNode.containerInfo.firstChild),zo=t,o=jo=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],Yo.push(o);for(n=Po(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Bi(e,t,r,n),qo();t=t.child}return t;case 5:return Mo(t),null===e&&Vo(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,l=a.children,Hr(r,a)?l=null:null!==o&&Hr(r,o)&&(t.flags|=16),Zi(e,t),Bi(e,t,l,n),t.child;case 6:return null===e&&Vo(t),null;case 13:return Xi(e,t,n);case 4:return Ro(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=To(t,null,r,n):Bi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,Ui(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 7:return Bi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Bi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,l=t.memoizedProps,o=a.value;var s=t.type._context;if(da(Xa,s._currentValue),s._currentValue=o,null!==l)if(s=l.value,0===(o=cr(s,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,o):1073741823))){if(l.children===a.children&&!ma.current){t=ol(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&o)){1===s.tag&&((c=co(-1,n&-n)).tag=2,fo(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),ao(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Bi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,oo(t,n),r=r(a=io(a,o.unstable_observedBits)),t.flags|=1,Bi(e,t,r,n),t.child;case 14:return o=Qa(a=t.type,t.pendingProps),zi(e,t,a,o=Qa(a.type,o),r,n);case 15:return $i(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Qa(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,ba(r)?(e=!0,Ea(t)):e=!1,oo(t,n),wo(t,r,a),ko(t,r,a,n),Gi(null,t,r,!0,e,n);case 19:return al(e,t,n);case 23:case 24:return ji(e,t,n)}throw Error(i(156,t.tag))},au.prototype.render=function(e){eu(e,this._internalRoot,null,null)},au.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;eu(null,e,null,(function(){t[ea]=null}))},tt=function(e){13===e.tag&&(ms(e,4,fs()),ru(e,4))},nt=function(e){13===e.tag&&(ms(e,67108864,fs()),ru(e,67108864))},rt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),ru(e,n)}},at=function(e,t){return t()},Te=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=oa(r);if(!a)throw Error(i(90));Q(r),ne(r,a)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ie=ws,Re=function(e,t,n,r,a){var o=Nl;Nl|=4;try{return Ga(98,e.bind(null,t,n,r,a))}finally{0===(Nl=o)&&(Wl(),qa())}},De=function(){0==(49&Nl)&&(function(){if(null!==as){var e=as;as=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,hs(e,Za())}))}qa()}(),Ds())},Me=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Wl(),qa())}};var su={Events:[ra,aa,oa,Oe,Ne,Ds,{current:!1}]},uu={findFiberByHostInstance:na,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cu={bundleType:uu.bundleType,version:uu.version,rendererPackageName:uu.rendererPackageName,rendererConfig:uu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:uu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var du=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!du.isDisabled&&du.supportsFiber)try{_a=du.inject(cu),Sa=du}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return iu(null,e,t,!0,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!o(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!o(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!o(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var h={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(h).map((function(e){return h[e]})),E={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(E).reduce((function(e,t){return e[E[t]]=t,e}),{}),_=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},S=function(e){var t=_(e,h.TITLE),n=_(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=_(e,"defaultTitle");return t||r||void 0},x=function(e){return _(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[h.BASE]})).map((function(e){return e[h.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},P=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var l=o[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][u]&&(a[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var l=o[i],s=f({},r[l],a[l]);r[l]=s}return e}),[]).reverse()},A=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},L=function(e){return Array.isArray(e)?e.join(""):e},O=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},I=[h.NOSCRIPT,h.SCRIPT,h.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},M=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[E[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=E[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},B=function(e,t,n){switch(e){case h.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=M(n,a),[r.createElement(h.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=D(n),o=L(t);return a?"<"+e+' data-rh="true" '+a+">"+R(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return M(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===I.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},U=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=O(e.metaTags,y),o=O(t,b),i=O(n,v);return{priorityMethods:{toComponent:function(){return[].concat(F(h.META,a.priority),F(h.LINK,o.priority),F(h.SCRIPT,i.priority))},toString:function(){return B(h.META,a.priority,r)+" "+B(h.LINK,o.priority,r)+" "+B(h.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:B(h.BASE,t,r),bodyAttributes:B("bodyAttributes",n,r),htmlAttributes:B("htmlAttributes",a,r),link:B(h.LINK,c,r),meta:B(h.META,d,r),noscript:B(h.NOSCRIPT,o,r),script:B(h.SCRIPT,f,r),style:B(h.STYLE,i,r),title:B(h.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=U({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},j=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(j.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=H,V.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(h.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===a.indexOf(s)&&a.push(s);var c=o.indexOf(s);-1!==c&&o.splice(c,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(h.BODY,e.bodyAttributes),W(h.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=L(e)),W(h.TITLE,t)}(c,d);var f={baseTag:G(h.BASE,n),linkTags:G(h.LINK,a),metaTags:G(h.META,o),noscriptTags:G(h.NOSCRIPT,i),scriptTags:G(h.SCRIPT,s),styleTags:G(h.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,m)},Y=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:_(e,"defer"),encode:_(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:P(h.LINK,["rel","href"],e),metaTags:P(h.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:P(h.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:P(h.SCRIPT,["src","innerHTML"],e),styleTags:P(h.STYLE,["cssText"],e),title:S(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:A(e,"prioritizeSeoTags")});V.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){q(t,(function(){Y=null}))})):(q(t),Y=null)):U&&(a=U(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:Z.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case h.SCRIPT:case h.NOSCRIPT:return{innerHTML:t};case h.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case h.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case h.BODY:return f({},a,{bodyAttributes:f({},o)});case h.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,Q),l=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,o),s){case h.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case h.LINK:case h.META:case h.NOSCRIPT:case h.SCRIPT:case h.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:l,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),a=f({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof $||(o=new $(o.context,o.instances)),o?r.createElement(K,f({},a,{context:o.value,helmetData:void 0})):r.createElement(j.Consumer,null,(function(e){return r.createElement(K,f({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function E(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case o:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case h:case g:case s:return e;default:return t}}case a:return t}}}function k(e){return E(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=h,t.Memo=g,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return k(e)||E(e)===c},t.isConcurrentMode=k,t.isContextConsumer=function(e){return E(e)===u},t.isContextProvider=function(e){return E(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return E(e)===f},t.isFragment=function(e){return E(e)===o},t.isLazy=function(e){return E(e)===h},t.isMemo=function(e){return E(e)===g},t.isPortal=function(e){return E(e)===a},t.isProfiler=function(e){return E(e)===l},t.isStrictMode=function(e){return E(e)===i},t.isSuspense=function(e){return E(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=E},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(7294),s=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),g=null;function h(){return g||(g=e(m.loader)),g.promise}return u.push(h),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return h()})),f=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(m.loader),r._loadModule()})),h(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return h()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),g.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(l.Component),o(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function g(e){return m(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var h=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(h,"propTypes",{report:s.func.isRequired}),o(h,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),g.Capture=h,g.preloadAll=function(){return new Promise((function(e,t){b(u).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){b(c).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(6775),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>h});var r=n(6775),a=n(5068),o=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(2177),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=o.forwardRef;void 0===m&&(m=p);var g=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,o.createElement("a",c)}));var h=m((function(e,t){var n=e.component,a=void 0===n?g:n,c=e.replace,h=e.to,b=e.innerRef,v=(0,s.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(h,e.location),e.location),s=r?n.createHref(r):"",g=(0,l.Z)({},v,{href:s,navigate:function(){var t=d(h,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?g.ref=t||b:g.innerRef=b,o.createElement(a,g)}))})),b=function(e){return e},v=o.forwardRef;void 0===v&&(v=b);var y=v((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,g=e.exact,y=e.isActive,w=e.location,E=e.sensitive,k=e.strict,_=e.style,S=e.to,x=e.innerRef,C=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(S,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),P=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:E,strict:k}):null,A=!!(y?y(P,n):P),L="function"==typeof m?m(A):m,O="function"==typeof _?_(A):_;A&&(L=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(L,c),O=(0,l.Z)({},O,p));var N=(0,l.Z)({"aria-current":A&&a||null,className:L,style:O,to:i},C);return b!==v?N.ref=t||x:N.innerRef=x,o.createElement(h,N)}))}))},6775:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>E,rs:()=>O,s6:()=>w,LX:()=>S,k6:()=>I,TH:()=>R});var r=n(5068),a=n(7294),o=n(9318),i=n(5697),l=n.n(i),s=1073741823,u="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function c(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var d=a.createContext||function(e,t){var n,o,i="__create-react-context-"+function(){var e="__global_unique_id__";return u[e]=(u[e]||0)+1}()+"__",d=function(e){function n(){var t;return(t=e.apply(this,arguments)||this).emitter=c(t.props.value),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[i]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):s,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);d.childContextTypes=((n={})[i]=l().object.isRequired,n);var f=function(t){function n(){var e;return(e=t.apply(this,arguments)||this).state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?s:t},a.componentDidMount=function(){this.context[i]&&this.context[i].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?s:e},a.componentWillUnmount=function(){this.context[i]&&this.context[i].off(this.onUpdate)},a.getValue=function(){return this.context[i]?this.context[i].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return f.contextTypes=((o={})[i]=l().object,o),{Provider:d,Consumer:f}};const f=d;var p=n(2177),m=n(7462),g=n(4779),h=n.n(g),b=(n(9864),n(3366)),v=(n(8679),function(e){var t=f();return t.displayName=e,t}),y=v("Router-History"),w=v("Router"),E=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(w.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var k={},_=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=k[n]||(k[n]={});if(r[e])return r[e];var a=[],o={regexp:h()(e,a,t),keys:a};return _<1e4&&(r[e]=o,_++),o}(n,{end:o,strict:l,sensitive:u}),a=r.regexp,i=r.keys,s=a.exec(e);if(!s)return null;var c=s[0],d=s.slice(1),f=e===c;return o&&!f?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=d[n],e}),{})}}),null)}var x=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(w.Consumer,null,(function(t){t||(0,p.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,m.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,s=i.component,u=i.render;return Array.isArray(l)&&function(e){return 0===a.Children.count(e)}(l)&&(l=null),a.createElement(w.Provider,{value:o},o.match?l?"function"==typeof l?l(o):l:s?a.createElement(s,o):u?u(o):null:"function"==typeof l?l(o):null)}))},t}(a.Component);function C(e){return"/"===e.charAt(0)?e:"/"+e}function T(e,t){if(!e)return t;var n=C(e);return 0!==t.pathname.indexOf(n)?t:(0,m.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,o.Ep)(e)}function A(e){return function(){(0,p.Z)(!1)}}function L(){}a.Component;var O=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(w.Consumer,null,(function(t){t||(0,p.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,m.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var N=a.useContext;function I(){return N(y)}function R(){return N(w).location}},2408:(e,t,n)=>{"use strict";var r=n(7418),a=60103,o=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;a=d("react.element"),o=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g={};function h(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function b(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}h.prototype.isReactComponent={},h.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},h.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},b.prototype=h.prototype;var y=v.prototype=new b;y.constructor=v,r(y,h.prototype),y.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,k={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,n){var r,o={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)E.call(t,r)&&!k.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:a,type:e,key:i,ref:l,props:o,_owner:w.current}}function S(e){return"object"==typeof e&&null!==e&&e.$$typeof===a}var x=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case a:case o:s=!0}}if(s)return i=i(s=e),e=""===r?"."+C(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(S(i)&&(i=function(e,t){return{$$typeof:a,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+C(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+C(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function P(e,t,n){if(null==e)return e;var r=[],a=0;return T(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function A(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var L={current:null};function O(){var e=L.current;if(null===e)throw Error(p(321));return e}var N={ReactCurrentDispatcher:L,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:P,forEach:function(e,t,n){P(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return P(e,(function(){t++})),t},toArray:function(e){return P(e,(function(e){return e}))||[]},only:function(e){if(!S(e))throw Error(p(143));return e}},t.Component=h,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var o=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)E.call(t,c)&&!k.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];o.children=u}return{$$typeof:a,type:e.type,key:i,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=S,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:A}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return O().useCallback(e,t)},t.useContext=function(e,t){return O().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return O().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return O().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return O().useLayoutEffect(e,t)},t.useMemo=function(e,t){return O().useMemo(e,t)},t.useReducer=function(e,t,n){return O().useReducer(e,t,n)},t.useRef=function(e){return O().useRef(e)},t.useState=function(e){return O().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,a,o;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},a=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var g=!1,h=null,b=-1,v=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},o=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==h){var e=t.unstable_now();y=e+v;try{h(!0,e)?E.postMessage(null):(g=!1,h=null)}catch(n){throw E.postMessage(null),n}}else g=!1},n=function(e){h=e,g||(g=!0,E.postMessage(null))},r=function(e,n){b=f((function(){e(t.unstable_now())}),n)},a=function(){p(b),b=-1}}function k(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,a=e[r];if(!(void 0!==a&&0<x(a,t)))break e;e[r]=t,e[n]=a,n=r}}function _(e){return void 0===(e=e[0])?null:e}function S(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length;r<a;){var o=2*(r+1)-1,i=e[o],l=o+1,s=e[l];if(void 0!==i&&0>x(i,n))void 0!==s&&0>x(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==s&&0>x(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],P=1,A=null,L=3,O=!1,N=!1,I=!1;function R(e){for(var t=_(T);null!==t;){if(null===t.callback)S(T);else{if(!(t.startTime<=e))break;S(T),t.sortIndex=t.expirationTime,k(C,t)}t=_(T)}}function D(e){if(I=!1,R(e),!N)if(null!==_(C))N=!0,n(M);else{var t=_(T);null!==t&&r(D,t.startTime-e)}}function M(e,n){N=!1,I&&(I=!1,a()),O=!0;var o=L;try{for(R(n),A=_(C);null!==A&&(!(A.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=A.callback;if("function"==typeof i){A.callback=null,L=A.priorityLevel;var l=i(A.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?A.callback=l:A===_(C)&&S(C),R(n)}else S(C);A=_(C)}if(null!==A)var s=!0;else{var u=_(T);null!==u&&r(D,u.startTime-n),s=!1}return s}finally{A=null,L=o,O=!1}}var F=o;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||O||(N=!0,n(M))},t.unstable_getCurrentPriorityLevel=function(){return L},t.unstable_getFirstCallbackNode=function(){return _(C)},t.unstable_next=function(e){switch(L){case 1:case 2:case 3:var t=3;break;default:t=L}var n=L;L=t;try{return e()}finally{L=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=L;L=e;try{return t()}finally{L=n}},t.unstable_scheduleCallback=function(e,o,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:P++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,k(T,e),null===_(C)&&e===_(T)&&(I?a():I=!0,r(D,i-l))):(e.sortIndex=s,k(C,e),N||O||(N=!0,n(M))),e},t.unstable_wrapCallback=function(e){var t=L;return function(){var n=L;L=t;try{return e.apply(this,arguments)}finally{L=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<o.length;s++){var u=o[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(a=n?n.call(r,c,d,u):void 0)||void 0===a&&c!==d)return!1}return!0}},2177:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="Invariant failed";function a(e,t){if(!e)throw new Error(r)}},6809:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={title:"Gephi Documentation",tagline:"The Open Graph Viz Platform",url:"https://docs.gephi.org",baseUrl:"/",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",favicon:"img/favicon.ico",organizationName:"gephi",projectName:"gephi",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["@docusaurus/preset-classic",{blog:!1,docs:{routeBasePath:"/",sidebarPath:"/home/runner/work/gephi-documentation/gephi-documentation/sidebars.js",editUrl:"https://github.com/gephi/gephi-documentation/docs"},theme:{customCss:"/home/runner/work/gephi-documentation/gephi-documentation/src/css/custom.css"}}]],themeConfig:{navbar:{title:"Gephi Documentation",logo:{alt:"Gephi logo",src:"img/logo.svg"},items:[{to:"/",activeBasePath:"docs",label:"User Manual",position:"left"},{to:"Developer_Documentation",label:"Developer Documentation",position:"left"},{to:"Plugins",label:"Plugin Development",position:"left"},{href:"https://github.com/gephi/gephi",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Community",items:[{label:"Facebook",href:"https://www.facebook.com/groups/gephi"},{label:"Twitter",href:"https://twitter.com/gephi"}]},{title:"More",items:[{label:"Official Website",to:"https://gephi.org/"},{label:"Blog",to:"https://gephi.wordpress.com/"},{label:"GitHub",href:"https://github.com/gephi/gephi"}]}],copyright:"Copyright \xa9 2022 Gephi. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["java"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},plugins:[],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/tags-df9":{"__comp":"3720c009","__context":{"plugin":"c4686e34"},"tags":"55960ee5"},"/tags/cluster-90b":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"cfc8f0db"},"/tags/code-style-23c":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"028f1327"},"/tags/development-544":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"582be2f7"},"/tags/gui-fb5":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"ad1d6189"},"/tags/layout-db8":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"aa559eb0"},"/tags/startup-a5c":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"eb0053ed"},"/tags/troubleshooting-1b0":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"c67f2107"},"/tags/video-912":{"__comp":"df203c0f","__context":{"plugin":"c4686e34"},"tag":"6db9f2c2"},"/-711":{"__comp":"1be78505","__context":{"plugin":"c4686e34"},"versionMetadata":"935f2afb"},"/-510":{"__comp":"17896441","content":"3cbef51b"},"/Developer_Documentation/-24b":{"__comp":"17896441","content":"582f342d"},"/Developer_Documentation/code_style-da9":{"__comp":"17896441","content":"39879d55"},"/Developer_Documentation/developer_handbook-b76":{"__comp":"17896441","content":"96c922fe"},"/Developer_Documentation/how_to_build_gephi-e74":{"__comp":"17896441","content":"c9a13e5f"},"/Developer_Documentation/localization-fd7":{"__comp":"17896441","content":"1d809187"},"/Plugins/-25f":{"__comp":"17896441","content":"05038888"},"/Plugins/Add_a_module_panel-680":{"__comp":"17896441","content":"373d7df1"},"/Plugins/Add_a_submenu-f5b":{"__comp":"17896441","content":"129a2cfd"},"/Plugins/Build_a_plugin_without_Gephi_source_code-dff":{"__comp":"17896441","content":"831ba68a"},"/Plugins/code_sharing_strategy-7a8":{"__comp":"17896441","content":"089ea586"},"/Plugins/de\u0301marrage-rapide-fr-3ad":{"__comp":"17896441","content":"dc64227d"},"/Plugins/export-c17":{"__comp":"17896441","content":"94004172"},"/Plugins/Extend_Data_Laboratory-6fd":{"__comp":"17896441","content":"36190045"},"/Plugins/filter-802":{"__comp":"17896441","content":"389c429d"},"/Plugins/generator-943":{"__comp":"17896441","content":"96cd1949"},"/Plugins/graphstreaming-2a0":{"__comp":"17896441","content":"0f8eeba2"},"/Plugins/import-250":{"__comp":"17896441","content":"45312050"},"/Plugins/layout-018":{"__comp":"17896441","content":"633ac33c"},"/Plugins/Plugin_Quick_Start-ccc":{"__comp":"17896441","content":"53310853"},"/Plugins/preview-renderer-98b":{"__comp":"17896441","content":"2413df23"},"/Plugins/Spigot_importer_with_Wizard-999":{"__comp":"17896441","content":"bc6c5bae"},"/Plugins/statistics-644":{"__comp":"17896441","content":"5a82e0e9"},"/Plugins/update-a-plugin-fce":{"__comp":"17896441","content":"e659bfc7"},"/User_Manual/datasets-dda":{"__comp":"17896441","content":"5ab79cae"},"/User_Manual/gui-8b5":{"__comp":"17896441","content":"41b1d610"},"/User_Manual/Import_CSV_Data-5ba":{"__comp":"17896441","content":"67449e3e"},"/User_Manual/Import_Dynamic_Data-7e7":{"__comp":"17896441","content":"6154b2f8"},"/User_Manual/Official_Videos/01-first-contact-with-gephi-074":{"__comp":"17896441","content":"88dc0e52"},"/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-them-11b":{"__comp":"17896441","content":"f8dc70c6"},"/User_Manual/troubleshooting-a18":{"__comp":"17896441","content":"a69ec8a7"},"/User_Manual/vocabulary-b89":{"__comp":"17896441","content":"b1b9faeb"}}')}},e=>{e.O(0,[532],(()=>{return t=9383,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.b0525baa.js.LICENSE.txt b/assets/js/main.b0525baa.js.LICENSE.txt new file mode 100644 index 0000000..6e08db2 --- /dev/null +++ b/assets/js/main.b0525baa.js.LICENSE.txt @@ -0,0 +1,53 @@ +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ + +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + */ + +/** @license React v0.20.2 + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v16.13.1 + * react-is.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** @license React v17.0.2 + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.2b5fa3f3.js b/assets/js/runtime~main.2b5fa3f3.js new file mode 100644 index 0000000..66e3c84 --- /dev/null +++ b/assets/js/runtime~main.2b5fa3f3.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,t,r,c,f={},d={};function o(e){var a=d[e];if(void 0!==a)return a.exports;var t=d[e]={exports:{}};return f[e].call(t.exports,t,t.exports,o),t.exports}o.m=f,e=[],o.O=(a,t,r,c)=>{if(!t){var f=1/0;for(i=0;i<e.length;i++){t=e[i][0],r=e[i][1],c=e[i][2];for(var d=!0,n=0;n<t.length;n++)(!1&c||f>=c)&&Object.keys(o.O).every((e=>o.O[e](t[n])))?t.splice(n--,1):(d=!1,c<f&&(f=c));if(d){e.splice(i--,1);var b=r();void 0!==b&&(a=b)}}return a}c=c||0;for(var i=e.length;i>0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[t,r,c]},o.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return o.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var c=Object.create(null);o.r(c);var f={};a=a||[null,t({}),t([]),t(t)];for(var d=2&r&&e;"object"==typeof d&&!~a.indexOf(d);d=t(d))Object.getOwnPropertyNames(d).forEach((a=>f[a]=()=>e[a]));return f.default=()=>e,o.d(c,f),c},o.d=(e,a)=>{for(var t in a)o.o(a,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((a,t)=>(o.f[t](e,a),a)),[])),o.u=e=>"assets/js/"+({53:"935f2afb",688:"582f342d",706:"c9a13e5f",956:"2413df23",1089:"ad1d6189",1545:"41b1d610",1579:"5a82e0e9",1970:"6db9f2c2",2118:"53310853",2153:"cfc8f0db",2830:"dc64227d",3031:"94004172",3040:"05038888",3252:"5ab79cae",3372:"c67f2107",3431:"389c429d",3445:"633ac33c",3480:"831ba68a",3642:"373d7df1",3751:"3720c009",4121:"55960ee5",4140:"f8dc70c6",4525:"36190045",4879:"582be2f7",5120:"129a2cfd",5333:"1d809187",5399:"a69ec8a7",5440:"96cd1949",5545:"089ea586",5551:"67449e3e",5612:"88dc0e52",6077:"b1b9faeb",6993:"e659bfc7",7210:"028f1327",7327:"6154b2f8",7363:"eb0053ed",7398:"bc6c5bae",7918:"17896441",7977:"45312050",8126:"0f8eeba2",8294:"96c922fe",8749:"39879d55",9041:"3cbef51b",9514:"1be78505",9583:"c4686e34",9664:"aa559eb0",9924:"df203c0f"}[e]||e)+"."+{53:"22f7e023",688:"1a0254c2",706:"4559cba2",956:"edfd05c8",1089:"aecf1310",1545:"68de9936",1579:"93901e12",1970:"42bea0a0",2118:"815cc124",2153:"a7fff369",2830:"5a3657c1",3031:"1b88be2b",3040:"bc9c1149",3252:"1fbc8df0",3372:"47c5ca50",3431:"2637aac6",3445:"e32c12fb",3480:"7f1af64f",3642:"c7fdc40d",3751:"120ceeca",4121:"a544b15a",4140:"3cf13a72",4525:"9e829738",4879:"8ecd7469",4972:"1da030a1",5120:"d644b46f",5333:"f3a197c7",5399:"30214ac2",5440:"37cf6e26",5545:"33921fcb",5551:"c88ec4bd",5612:"3c703d0e",6077:"c2a5f77e",6993:"8acd85bd",7210:"ce2f5183",7327:"1456f3bf",7363:"818559a9",7398:"7ec6ddf8",7918:"55977ba0",7977:"53d530fb",8126:"98825d49",8294:"338182c2",8749:"f1166193",9041:"4703d362",9514:"adfebf8d",9583:"88697520",9664:"faf806e3",9924:"3806fe1c"}[e]+".js",o.miniCssF=e=>{},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},c="gephi-documentation:",o.l=(e,a,t,f)=>{if(r[e])r[e].push(a);else{var d,n;if(void 0!==t)for(var b=document.getElementsByTagName("script"),i=0;i<b.length;i++){var u=b[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==c+t){d=u;break}}d||(n=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,o.nc&&d.setAttribute("nonce",o.nc),d.setAttribute("data-webpack",c+t),d.src=e),r[e]=[a];var l=(a,t)=>{d.onerror=d.onload=null,clearTimeout(s);var c=r[e];if(delete r[e],d.parentNode&&d.parentNode.removeChild(d),c&&c.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),n&&document.head.appendChild(d)}},o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.p="/",o.gca=function(e){return e={17896441:"7918",36190045:"4525",45312050:"7977",53310853:"2118",94004172:"3031","935f2afb":"53","582f342d":"688",c9a13e5f:"706","2413df23":"956",ad1d6189:"1089","41b1d610":"1545","5a82e0e9":"1579","6db9f2c2":"1970",cfc8f0db:"2153",dc64227d:"2830","05038888":"3040","5ab79cae":"3252",c67f2107:"3372","389c429d":"3431","633ac33c":"3445","831ba68a":"3480","373d7df1":"3642","3720c009":"3751","55960ee5":"4121",f8dc70c6:"4140","582be2f7":"4879","129a2cfd":"5120","1d809187":"5333",a69ec8a7:"5399","96cd1949":"5440","089ea586":"5545","67449e3e":"5551","88dc0e52":"5612",b1b9faeb:"6077",e659bfc7:"6993","028f1327":"7210","6154b2f8":"7327",eb0053ed:"7363",bc6c5bae:"7398","0f8eeba2":"8126","96c922fe":"8294","39879d55":"8749","3cbef51b":"9041","1be78505":"9514",c4686e34:"9583",aa559eb0:"9664",df203c0f:"9924"}[e]||e,o.p+o.u(e)},(()=>{var e={1303:0,532:0};o.f.j=(a,t)=>{var r=o.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((t,c)=>r=e[a]=[t,c]));t.push(r[2]=c);var f=o.p+o.u(a),d=new Error;o.l(f,(t=>{if(o.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var c=t&&("load"===t.type?"missing":t.type),f=t&&t.target&&t.target.src;d.message="Loading chunk "+a+" failed.\n("+c+": "+f+")",d.name="ChunkLoadError",d.type=c,d.request=f,r[1](d)}}),"chunk-"+a,a)}},o.O.j=a=>0===e[a];var a=(a,t)=>{var r,c,f=t[0],d=t[1],n=t[2],b=0;if(f.some((a=>0!==e[a]))){for(r in d)o.o(d,r)&&(o.m[r]=d[r]);if(n)var i=n(o)}for(a&&a(t);b<f.length;b++)c=f[b],o.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return o.O(i)},t=self.webpackChunkgephi_documentation=self.webpackChunkgephi_documentation||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))})()})(); \ No newline at end of file diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index e00595d..0000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], -}; diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/00_image.png b/docs/Developer_Documentation/How-to-build-Gephi/00_image.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/00_image.png rename to docs/Developer_Documentation/How-to-build-Gephi/00_image.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/01_Opening_Gephi.png b/docs/Developer_Documentation/How-to-build-Gephi/01_Opening Gephi.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/01_Opening_Gephi.png rename to docs/Developer_Documentation/How-to-build-Gephi/01_Opening Gephi.png diff --git a/docs/Developer_Documentation/How-to-build-Gephi/02_Build.png b/docs/Developer_Documentation/How-to-build-Gephi/02_Build.png new file mode 100644 index 0000000..0fb21dd Binary files /dev/null and b/docs/Developer_Documentation/How-to-build-Gephi/02_Build.png differ diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png b/docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png rename to docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png diff --git a/docs/Developer_Documentation/How-to-build-Gephi/04_Run.png b/docs/Developer_Documentation/How-to-build-Gephi/04_Run.png new file mode 100644 index 0000000..8fbd027 Binary files /dev/null and b/docs/Developer_Documentation/How-to-build-Gephi/04_Run.png differ diff --git a/docs/Developer_Documentation/How-to-build-Gephi/05_Trust Maven.png b/docs/Developer_Documentation/How-to-build-Gephi/05_Trust Maven.png new file mode 100644 index 0000000..0397902 Binary files /dev/null and b/docs/Developer_Documentation/How-to-build-Gephi/05_Trust Maven.png differ diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/06_Project_loaded.png b/docs/Developer_Documentation/How-to-build-Gephi/06_Project loaded.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/06_Project_loaded.png rename to docs/Developer_Documentation/How-to-build-Gephi/06_Project loaded.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/07_Maven_delegate_config.png b/docs/Developer_Documentation/How-to-build-Gephi/07_Maven delegate config.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/07_Maven_delegate_config.png rename to docs/Developer_Documentation/How-to-build-Gephi/07_Maven delegate config.png diff --git a/docs/Developer_Documentation/How-to-build-Gephi/08_Build.png b/docs/Developer_Documentation/How-to-build-Gephi/08_Build.png new file mode 100644 index 0000000..6dd6209 Binary files /dev/null and b/docs/Developer_Documentation/How-to-build-Gephi/08_Build.png differ diff --git a/docs/Developer_Documentation/How-to-build-Gephi/09_Build.png b/docs/Developer_Documentation/How-to-build-Gephi/09_Build.png new file mode 100644 index 0000000..b209f20 Binary files /dev/null and b/docs/Developer_Documentation/How-to-build-Gephi/09_Build.png differ diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/10_Add_Maven_Config.png b/docs/Developer_Documentation/How-to-build-Gephi/10_Add Maven Config.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/10_Add_Maven_Config.png rename to docs/Developer_Documentation/How-to-build-Gephi/10_Add Maven Config.png diff --git a/gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/11_Set_Maven_Config.png b/docs/Developer_Documentation/How-to-build-Gephi/11_Set Maven Config.png similarity index 100% rename from gephi-desktop/static/docs/Developer_Documentation/How-to-build-Gephi/11_Set_Maven_Config.png rename to docs/Developer_Documentation/How-to-build-Gephi/11_Set Maven Config.png diff --git a/docs/Developer_Documentation/How-to-build-Gephi/12_Run.png b/docs/Developer_Documentation/How-to-build-Gephi/12_Run.png new file mode 100644 index 0000000..75258b0 Binary files /dev/null and b/docs/Developer_Documentation/How-to-build-Gephi/12_Run.png differ diff --git a/docs/Plugins/Add_a_module_panel/00_800px-add-module-panel.png b/docs/Plugins/Add_a_module_panel/00_800px-add-module-panel.png new file mode 100644 index 0000000..b47310f Binary files /dev/null and b/docs/Plugins/Add_a_module_panel/00_800px-add-module-panel.png differ diff --git a/docs/Plugins/Add_a_module_panel/01_add-module-panel1.png b/docs/Plugins/Add_a_module_panel/01_add-module-panel1.png new file mode 100644 index 0000000..88fcf85 Binary files /dev/null and b/docs/Plugins/Add_a_module_panel/01_add-module-panel1.png differ diff --git a/docs/Plugins/Add_a_module_panel/02_add-module-panel2.png b/docs/Plugins/Add_a_module_panel/02_add-module-panel2.png new file mode 100644 index 0000000..4fd6600 Binary files /dev/null and b/docs/Plugins/Add_a_module_panel/02_add-module-panel2.png differ diff --git a/docs/Plugins/Add_a_module_panel/03_add-module-panel3.png b/docs/Plugins/Add_a_module_panel/03_add-module-panel3.png new file mode 100644 index 0000000..a5fb0cd Binary files /dev/null and b/docs/Plugins/Add_a_module_panel/03_add-module-panel3.png differ diff --git a/docs/Plugins/Add_a_module_panel/04_add-module-panel-design.png b/docs/Plugins/Add_a_module_panel/04_add-module-panel-design.png new file mode 100644 index 0000000..60bbe5e Binary files /dev/null and b/docs/Plugins/Add_a_module_panel/04_add-module-panel-design.png differ diff --git a/docs/Plugins/Add_a_submenu/00_addsubmenu-new-action.png b/docs/Plugins/Add_a_submenu/00_addsubmenu-new-action.png new file mode 100644 index 0000000..19b9128 Binary files /dev/null and b/docs/Plugins/Add_a_submenu/00_addsubmenu-new-action.png differ diff --git a/docs/Plugins/Add_a_submenu/01_addsubmenu-new-action-gui.png b/docs/Plugins/Add_a_submenu/01_addsubmenu-new-action-gui.png new file mode 100644 index 0000000..fc53d6c Binary files /dev/null and b/docs/Plugins/Add_a_submenu/01_addsubmenu-new-action-gui.png differ diff --git a/docs/Plugins/Add_a_submenu/02_addsubmenu-new-action-name.png b/docs/Plugins/Add_a_submenu/02_addsubmenu-new-action-name.png new file mode 100644 index 0000000..232ba42 Binary files /dev/null and b/docs/Plugins/Add_a_submenu/02_addsubmenu-new-action-name.png differ diff --git a/gephi-desktop/static/docs/Plugins/Add_a_submenu/03_addsubmenu-new-action-result.png b/docs/Plugins/Add_a_submenu/03_addsubmenu-new-action-result.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Add_a_submenu/03_addsubmenu-new-action-result.png rename to docs/Plugins/Add_a_submenu/03_addsubmenu-new-action-result.png diff --git a/docs/Plugins/Build_a_plugin_without_Gephi_source_code/00_addnetbeansplatform.png b/docs/Plugins/Build_a_plugin_without_Gephi_source_code/00_addnetbeansplatform.png new file mode 100644 index 0000000..5fccab8 Binary files /dev/null and b/docs/Plugins/Build_a_plugin_without_Gephi_source_code/00_addnetbeansplatform.png differ diff --git a/docs/Plugins/Build_a_plugin_without_Gephi_source_code/01_addnetbeansplatformdone.png b/docs/Plugins/Build_a_plugin_without_Gephi_source_code/01_addnetbeansplatformdone.png new file mode 100644 index 0000000..edff9f6 Binary files /dev/null and b/docs/Plugins/Build_a_plugin_without_Gephi_source_code/01_addnetbeansplatformdone.png differ diff --git a/docs/Plugins/Build_a_plugin_without_Gephi_source_code/02_gephimoduleend.png b/docs/Plugins/Build_a_plugin_without_Gephi_source_code/02_gephimoduleend.png new file mode 100644 index 0000000..7d42fb8 Binary files /dev/null and b/docs/Plugins/Build_a_plugin_without_Gephi_source_code/02_gephimoduleend.png differ diff --git a/docs/Plugins/Export/00_image.png b/docs/Plugins/Export/00_image.png new file mode 100644 index 0000000..6a31271 Binary files /dev/null and b/docs/Plugins/Export/00_image.png differ diff --git a/docs/Plugins/Extend_Data_Laboratory/00_800px-data-lab-overview.png b/docs/Plugins/Extend_Data_Laboratory/00_800px-data-lab-overview.png new file mode 100644 index 0000000..df089dc Binary files /dev/null and b/docs/Plugins/Extend_Data_Laboratory/00_800px-data-lab-overview.png differ diff --git a/docs/Plugins/Extend_Data_Laboratory/01_merge-strategies.png b/docs/Plugins/Extend_Data_Laboratory/01_merge-strategies.png new file mode 100644 index 0000000..8dc120f Binary files /dev/null and b/docs/Plugins/Extend_Data_Laboratory/01_merge-strategies.png differ diff --git a/gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/02_sub-items.png b/docs/Plugins/Extend_Data_Laboratory/02_sub-items.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Extend_Data_Laboratory/02_sub-items.png rename to docs/Plugins/Extend_Data_Laboratory/02_sub-items.png diff --git a/docs/Plugins/Extend_Data_Laboratory/03_manipulators.png b/docs/Plugins/Extend_Data_Laboratory/03_manipulators.png new file mode 100644 index 0000000..e8b7ed3 Binary files /dev/null and b/docs/Plugins/Extend_Data_Laboratory/03_manipulators.png differ diff --git a/docs/Plugins/Import/00_image.png b/docs/Plugins/Import/00_image.png new file mode 100644 index 0000000..2a664cc Binary files /dev/null and b/docs/Plugins/Import/00_image.png differ diff --git a/docs/Plugins/Plugin_Quick_Start/00_image.png b/docs/Plugins/Plugin_Quick_Start/00_image.png new file mode 100644 index 0000000..3aecdcd Binary files /dev/null and b/docs/Plugins/Plugin_Quick_Start/00_image.png differ diff --git a/docs/Plugins/Plugin_Quick_Start/01_image.png b/docs/Plugins/Plugin_Quick_Start/01_image.png new file mode 100644 index 0000000..9f08305 Binary files /dev/null and b/docs/Plugins/Plugin_Quick_Start/01_image.png differ diff --git a/gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/02_image.png b/docs/Plugins/Plugin_Quick_Start/02_image.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Plugin_Quick_Start/02_image.png rename to docs/Plugins/Plugin_Quick_Start/02_image.png diff --git a/docs/Plugins/Plugin_Quick_Start/03_image.png b/docs/Plugins/Plugin_Quick_Start/03_image.png new file mode 100644 index 0000000..726879c Binary files /dev/null and b/docs/Plugins/Plugin_Quick_Start/03_image.png differ diff --git a/docs/Plugins/Plugin_Quick_Start/04_image.png b/docs/Plugins/Plugin_Quick_Start/04_image.png new file mode 100644 index 0000000..f432635 Binary files /dev/null and b/docs/Plugins/Plugin_Quick_Start/04_image.png differ diff --git a/docs/Plugins/Spigot_importer_with_Wizard/00_spigot_menu.png b/docs/Plugins/Spigot_importer_with_Wizard/00_spigot_menu.png new file mode 100644 index 0000000..d870b5d Binary files /dev/null and b/docs/Plugins/Spigot_importer_with_Wizard/00_spigot_menu.png differ diff --git a/docs/Plugins/Spigot_importer_with_Wizard/01_spigot_howto1.png b/docs/Plugins/Spigot_importer_with_Wizard/01_spigot_howto1.png new file mode 100644 index 0000000..3e87b58 Binary files /dev/null and b/docs/Plugins/Spigot_importer_with_Wizard/01_spigot_howto1.png differ diff --git a/gephi-desktop/static/docs/Plugins/Spigot_importer_with_Wizard/02_spigot_howto_design.png b/docs/Plugins/Spigot_importer_with_Wizard/02_spigot_howto_design.png similarity index 100% rename from gephi-desktop/static/docs/Plugins/Spigot_importer_with_Wizard/02_spigot_howto_design.png rename to docs/Plugins/Spigot_importer_with_Wizard/02_spigot_howto_design.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/00_image.png b/docs/User_Manual/GUI/00_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/00_image.png rename to docs/User_Manual/GUI/00_image.png diff --git a/docs/User_Manual/GUI/01_image.png b/docs/User_Manual/GUI/01_image.png new file mode 100644 index 0000000..cb135fb Binary files /dev/null and b/docs/User_Manual/GUI/01_image.png differ diff --git a/docs/User_Manual/GUI/02_image.png b/docs/User_Manual/GUI/02_image.png new file mode 100644 index 0000000..038c95c Binary files /dev/null and b/docs/User_Manual/GUI/02_image.png differ diff --git a/docs/User_Manual/GUI/03_image.png b/docs/User_Manual/GUI/03_image.png new file mode 100644 index 0000000..c2b0a13 Binary files /dev/null and b/docs/User_Manual/GUI/03_image.png differ diff --git a/docs/User_Manual/GUI/04_image.png b/docs/User_Manual/GUI/04_image.png new file mode 100644 index 0000000..d1892b8 Binary files /dev/null and b/docs/User_Manual/GUI/04_image.png differ diff --git a/docs/User_Manual/GUI/05_image.png b/docs/User_Manual/GUI/05_image.png new file mode 100644 index 0000000..3c429ba Binary files /dev/null and b/docs/User_Manual/GUI/05_image.png differ diff --git a/gephi-desktop/static/docs/User_Manual/GUI/06_image.png b/docs/User_Manual/GUI/06_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/06_image.png rename to docs/User_Manual/GUI/06_image.png diff --git a/docs/User_Manual/GUI/07_image.png b/docs/User_Manual/GUI/07_image.png new file mode 100644 index 0000000..976947f Binary files /dev/null and b/docs/User_Manual/GUI/07_image.png differ diff --git a/docs/User_Manual/GUI/08_image.png b/docs/User_Manual/GUI/08_image.png new file mode 100644 index 0000000..86a3e85 Binary files /dev/null and b/docs/User_Manual/GUI/08_image.png differ diff --git a/gephi-desktop/static/docs/User_Manual/GUI/09_image.png b/docs/User_Manual/GUI/09_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/09_image.png rename to docs/User_Manual/GUI/09_image.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/10_image.png b/docs/User_Manual/GUI/10_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/10_image.png rename to docs/User_Manual/GUI/10_image.png diff --git a/docs/User_Manual/GUI/11_image.png b/docs/User_Manual/GUI/11_image.png new file mode 100644 index 0000000..2ead314 Binary files /dev/null and b/docs/User_Manual/GUI/11_image.png differ diff --git a/docs/User_Manual/GUI/12_image.png b/docs/User_Manual/GUI/12_image.png new file mode 100644 index 0000000..b601d29 Binary files /dev/null and b/docs/User_Manual/GUI/12_image.png differ diff --git a/docs/User_Manual/GUI/13_image.png b/docs/User_Manual/GUI/13_image.png new file mode 100644 index 0000000..4488738 Binary files /dev/null and b/docs/User_Manual/GUI/13_image.png differ diff --git a/gephi-desktop/static/docs/User_Manual/GUI/14_image.png b/docs/User_Manual/GUI/14_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/14_image.png rename to docs/User_Manual/GUI/14_image.png diff --git a/docs/User_Manual/GUI/15_image.png b/docs/User_Manual/GUI/15_image.png new file mode 100644 index 0000000..5d79950 Binary files /dev/null and b/docs/User_Manual/GUI/15_image.png differ diff --git a/gephi-desktop/static/docs/User_Manual/GUI/16_image.png b/docs/User_Manual/GUI/16_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/16_image.png rename to docs/User_Manual/GUI/16_image.png diff --git a/gephi-desktop/static/docs/User_Manual/GUI/17_image.png b/docs/User_Manual/GUI/17_image.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/GUI/17_image.png rename to docs/User_Manual/GUI/17_image.png diff --git a/docs/User_Manual/GUI/18_image.png b/docs/User_Manual/GUI/18_image.png new file mode 100644 index 0000000..0bb2d88 Binary files /dev/null and b/docs/User_Manual/GUI/18_image.png differ diff --git a/docs/User_Manual/GUI/19_image.png b/docs/User_Manual/GUI/19_image.png new file mode 100644 index 0000000..75b9c2d Binary files /dev/null and b/docs/User_Manual/GUI/19_image.png differ diff --git a/docs/User_Manual/GUI/20_image.png b/docs/User_Manual/GUI/20_image.png new file mode 100644 index 0000000..671403d Binary files /dev/null and b/docs/User_Manual/GUI/20_image.png differ diff --git a/docs/User_Manual/GUI/21_image.png b/docs/User_Manual/GUI/21_image.png new file mode 100644 index 0000000..d2c949a Binary files /dev/null and b/docs/User_Manual/GUI/21_image.png differ diff --git a/docs/User_Manual/Import_CSV_Data/00_launch-import-csv-wizard.png b/docs/User_Manual/Import_CSV_Data/00_launch-import-csv-wizard.png new file mode 100644 index 0000000..42ccd96 Binary files /dev/null and b/docs/User_Manual/Import_CSV_Data/00_launch-import-csv-wizard.png differ diff --git a/docs/User_Manual/Import_CSV_Data/01_import-csv-step1.png b/docs/User_Manual/Import_CSV_Data/01_import-csv-step1.png new file mode 100644 index 0000000..066eddc Binary files /dev/null and b/docs/User_Manual/Import_CSV_Data/01_import-csv-step1.png differ diff --git a/docs/User_Manual/Import_CSV_Data/02_import-csv-step2-nodes.png b/docs/User_Manual/Import_CSV_Data/02_import-csv-step2-nodes.png new file mode 100644 index 0000000..8fb93d0 Binary files /dev/null and b/docs/User_Manual/Import_CSV_Data/02_import-csv-step2-nodes.png differ diff --git a/docs/User_Manual/Import_CSV_Data/03_import-csv-step2-edges.png b/docs/User_Manual/Import_CSV_Data/03_import-csv-step2-edges.png new file mode 100644 index 0000000..ec57040 Binary files /dev/null and b/docs/User_Manual/Import_CSV_Data/03_import-csv-step2-edges.png differ diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/00_intro-longitudinal.png b/docs/User_Manual/Import_Dynamic_Data/00_intro-longitudinal.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/00_intro-longitudinal.png rename to docs/User_Manual/Import_Dynamic_Data/00_intro-longitudinal.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/01_importdynamics-intervals.png b/docs/User_Manual/Import_Dynamic_Data/01_importdynamics-intervals.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/01_importdynamics-intervals.png rename to docs/User_Manual/Import_Dynamic_Data/01_importdynamics-intervals.png diff --git a/gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/02_transformlongitudinal-datalab1.png b/docs/User_Manual/Import_Dynamic_Data/02_transformlongitudinal-datalab1.png similarity index 100% rename from gephi-desktop/static/docs/User_Manual/Import_Dynamic_Data/02_transformlongitudinal-datalab1.png rename to docs/User_Manual/Import_Dynamic_Data/02_transformlongitudinal-datalab1.png diff --git a/docs/User_Manual/Import_Dynamic_Data/03_transformlongitudinal-datalab2.png b/docs/User_Manual/Import_Dynamic_Data/03_transformlongitudinal-datalab2.png new file mode 100644 index 0000000..17b2f0d Binary files /dev/null and b/docs/User_Manual/Import_Dynamic_Data/03_transformlongitudinal-datalab2.png differ diff --git a/docs/User_Manual/Import_Dynamic_Data/04_transformlongitudinal-datalab3.png b/docs/User_Manual/Import_Dynamic_Data/04_transformlongitudinal-datalab3.png new file mode 100644 index 0000000..bd054ec Binary files /dev/null and b/docs/User_Manual/Import_Dynamic_Data/04_transformlongitudinal-datalab3.png differ diff --git a/docs/User_Manual/Import_Dynamic_Data/05_importtimeframe1.png b/docs/User_Manual/Import_Dynamic_Data/05_importtimeframe1.png new file mode 100644 index 0000000..0312f23 Binary files /dev/null and b/docs/User_Manual/Import_Dynamic_Data/05_importtimeframe1.png differ diff --git a/docs/User_Manual/Import_Dynamic_Data/06_importtimeframe2.png b/docs/User_Manual/Import_Dynamic_Data/06_importtimeframe2.png new file mode 100644 index 0000000..82604aa Binary files /dev/null and b/docs/User_Manual/Import_Dynamic_Data/06_importtimeframe2.png differ diff --git a/docs/User_Manual/Import_Dynamic_Data/07_importtimeframe3.png b/docs/User_Manual/Import_Dynamic_Data/07_importtimeframe3.png new file mode 100644 index 0000000..6466660 Binary files /dev/null and b/docs/User_Manual/Import_Dynamic_Data/07_importtimeframe3.png differ diff --git a/docs/User_Manual/Troubleshooting/Graphical_Card_Information.png b/docs/User_Manual/Troubleshooting/Graphical_Card_Information.png new file mode 100644 index 0000000..89415a7 Binary files /dev/null and b/docs/User_Manual/Troubleshooting/Graphical_Card_Information.png differ diff --git a/docs/User_Manual/Troubleshooting/Nvidia_3D_Panel.png b/docs/User_Manual/Troubleshooting/Nvidia_3D_Panel.png new file mode 100644 index 0000000..d7d2466 Binary files /dev/null and b/docs/User_Manual/Troubleshooting/Nvidia_3D_Panel.png differ diff --git a/docusaurus.common.ts b/docusaurus.common.ts deleted file mode 100644 index 09f56d6..0000000 --- a/docusaurus.common.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { themes } from "prism-react-renderer"; - -import type { Config } from "@docusaurus/types"; - -const lightCodeTheme = themes.github; -const darkCodeTheme = themes.dracula; - -const config: Config = { - title: "Gephi Documentation", - tagline: "The Open Graph Viz Platform", - url: "https://docs.gephi.org", - baseUrl: "/", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", - favicon: "img/logo.svg", - - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: "gephi", // Usually your GitHub org/user name. - projectName: "gephi", // Usually your repo name. - - // Even if you don't use internalization, you can use this field to set useful - // metadata like html lang. For example, if your site is Chinese, you may want - // to replace "en" with "zh-Hans". - i18n: { - defaultLocale: "en", - locales: ["en"], - }, - themeConfig: { - matomo: { - matomoUrl: "https://matomo.ouestware.com/", - siteId: "34", - phpLoader: "matomo.php", - jsLoader: "matomo.js", - }, - navbar: {}, - footer: { - style: "dark", - links: [ - { - title: "Project", - items: [ - { - label: "Gephi.org", - href: "https://gephi.org", - }, - { - label: "About", - href: "https://gephi.org/about", - }, - { - label: "FAQ", - href: "https://gephi.org/faq", - }, - { - label: "Documentation", - href: "https://docs.gephi.org", - }, - { - label: "Blog", - href: "https://gephi.wordpress.com/", - }, - { - label: "Donate", - href: "https://opencollective.com/gephi/donate?interval=oneTime&amount=5&name=&legalName=&email=", - }, - ], - }, - { - title: "Applications", - items: [ - { - label: "Gephi", - href: "https://gephi.org/desktop", - }, - { - label: "Gephi plugins", - href: "https://gephi.org/desktop/plugins", - }, - { - label: "Gephi Lite", - href: "https://gephi.org/lite", - }, - { - label: "Gephisto", - href: "https://jacomyma.github.io/gephisto", - }, - ], - }, - { - title: "Community", - items: [ - { - label: "Open Collective", - to: "https://opencollective.com/gephi", - }, - { - label: "GitHub", - to: "https://github.com/gephi", - }, - { - label: "Mastodon", - href: "https://vis.social/@Gephi", - }, - { - label: "Reddit", - href: "https://reddit.com/r/gephi", - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} Gephi. Built with Docusaurus.`, - }, - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - additionalLanguages: ["java"], - }, - }, - plugins: ["docusaurus-plugin-matomo"], -}; - -export default config; diff --git a/gephi-desktop/docs/Developer_Documentation/Code_Style.md b/gephi-desktop/docs/Developer_Documentation/Code_Style.md deleted file mode 100644 index c3effba..0000000 --- a/gephi-desktop/docs/Developer_Documentation/Code_Style.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -id: code_style -title: Code Style -sidebar_position: 3 -tags: - - Code Style - - Development ---- -The source code uses the [CheckStyle](https://checkstyle.sourceforge.io/) tool to keep the code style consistent. - -In addition, we check for code style when building the project using the [Maven CheckStyle Plugin](http://maven.apache.org/plugins/maven-checkstyle-plugin/). A pull request without proper code style would fail to build. - -### IntelliJ Setup - -On IntelliJ follow these steps to configure CheckStyle: - -1. Install the [CheckStyle plugin](https://plugins.jetbrains.com/plugin/1065-checkstyle-idea) -2. Open `Preferences/Settings` and go to `Editor > Code Style`. -3. Select `Project` as `Scheme` and click the settings icon next to it. -4. Select `Import Scheme > CheckStyle Configuration` and locate the `checkstyle.xml` file at the root of Gephi's repository. - -You're done. You can now use the built-in **Code > Reformat Code** tool. The resulting code style will match what is on the Gephi repository. \ No newline at end of file diff --git a/gephi-desktop/docs/Developer_Documentation/How_to_build_Gephi.md b/gephi-desktop/docs/Developer_Documentation/How_to_build_Gephi.md deleted file mode 100644 index 8374d8a..0000000 --- a/gephi-desktop/docs/Developer_Documentation/How_to_build_Gephi.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -id: how_to_build_gephi -title: How to build Gephi -sidebar_position: 2 ---- - -Follow this guide to start developing the Gephi source code and test your changes. - -## Introduction - -### Netbeans Platform - -The NetBeans Platform is a generic framework for Swing applications. It provides the "plumbing" and "windowing system" for large, modular Java Swing applications. The project is still maintained by the Apache Software Foundation. -* [Description](https://netbeans.apache.org/kb/docs/platform/) -* [Netbeans API Index](https://bits.netbeans.org/dev/javadoc/) -* [FAQ](https://netbeans.apache.org/wiki/main/netbeansdevelopperfaq/DevFaqIndex/) - -Netbeans Platform dependencies are all available on Maven Central. It also depends on [FlatLaf](https://www.formdev.com/flatlaf/) for the look and feel. - -### Gephi Architecture - -Gephi software architecture is modular and therefore each feature is split into modules. Modules depend on each other, and Gephi modules can either depend on other Gephi modules or Netbeans Platform modules. Plugins developers simply create new modules that contains their code, add dependencies to Gephi modules, and distribute their plugins by creating an NBM package. See Gephi APIs documentation to learn more about the API plugins that can be used by modules. - -* [Gephi APIs documentation](https://javadoc.io/doc/org.gephi/gephi/latest/index.html) - -![image](/docs/Developer_Documentation/How-to-build-Gephi/00_image.png) - -## Build Gephi - -### Requirements - -* Java JDK 17 or later -* Apache Maven version 3.6.3 or later - -### Checkout and Build the sources - -Navigate to the desired directory you wish to place the project via terminal, then clone the repository: - -``` -git clone https://github.com/gephi/gephi -cd gephi -``` - -Gephi uses Maven for building. Each module has its `pom.xml` file and there is a `gephi-parent` POM file that lists all the modules required to build. - -Run this command to build all modules. - -``` -mvn -T 4 clean install -``` - -By default, unit tests are turned off to speed up the build. To enable them, use: - -``` -mvn -T 4 package -P enableTests -``` - -### Run it - -Once built, Gephi can be run from the `modules/application` folder using a special Maven goal: - -**Mac/Linux:** - -``` ->> cd modules/application ->> mvn nbm:cluster-app nbm:run-platform -``` - -**Windows:** - -``` ->> cd modules\application ->> mvn nbm:cluster-app nbm:run-platform -``` - -## Building Gephi in NetBeans - -[Apache Netbeans](https://netbeans.apache.org/) is a great choice to develop Gephi as it natively integrates with the Netbeans Platform. Loading the project is straightforward. - -Open Netbeans and go to **File > Open Project** to look for the Gephi folder. Then, **Open Project**. Ensure the checkbox "Open Required Projects" is not selected. - -![Opening Gephi](/docs/Developer_Documentation/How-to-build-Gephi/01_Opening_Gephi.png) - -Right-click on the project and select **Clean and Build**. - -![Build](/docs/Developer_Documentation/How-to-build-Gephi/02_Build.png) - -Next, in the **Projects** tab of the file navigator, select **Gephi > Modules > gephi-app** and open the application module. - -![Open gephi-app](/docs/Developer_Documentation/How-to-build-Gephi/03_Open gephi-app.png) - -Finally, select **Run** from this module. - -![Run](/docs/Developer_Documentation/How-to-build-Gephi/04_Run.png) - -### Troubleshooting - -#### Code changes not taken in account - -When you make code changes in a module, make sure to **Clean and Build** this module before Running Gephi again as otherwise your changes won't be taken in account. - -## Building Gephi in IntelliJ IDEA - -As Gephi is a Maven project it is supported by IntelliJ but requires some tweaks to work properly. - -Open IntelliJ and open the Gephi folder. You'll be asked whether you want to Trust this Maven repository. Select **Trust Project**. - -IntelliJ then takes some time to scan the project and resolve dependencies. Once completed, you should see Gephi properly listed as a project in the Project pane. - -![Project loaded](/docs/Developer_Documentation/How-to-build-Gephi/06_Project_loaded.png) - -Then, navigate to IntelliJ's preferences panel **Build, Execution, Deployment > Build Tools > Maven > Runner** and select the option **Delegate IDE build/run actions to Maven**. This is a critical step. - -![Maven delegate config](/docs/Developer_Documentation/How-to-build-Gephi/07_Maven_delegate_config.png) - -Next in the top-level menu select **Build > Build Project**. - -If it fails with and error like `javac flag not found --release`, you would need to fo back to **Build, Execution, Deployment > Build Tools > Maven > Runner** and add an **Environment Variables** with `JAVA_HOME=<path of the selected JDK>` - -![Build](/docs/Developer_Documentation/How-to-build-Gephi/08_Build.png) - -Once completed, create a run configuration by following **Run > Edit Configurations...** in the top-level menu. - -![Build](/docs/Developer_Documentation/How-to-build-Gephi/09_Build.png) - -Here, select **Add new configuration** and search for **Maven**. - -![Add Maven Config](/docs/Developer_Documentation/How-to-build-Gephi/10_Add_Maven_Config.png) - -Next, we'll configure two things here. Enter `nbm:cluster-app nbm:run-platform` into the **Command line** field and select the `modules/application` sub-directory into the **Working directory** chooser. Give Gephi as name for the configuration. - -![Set Maven Config](/docs/Developer_Documentation/How-to-build-Gephi/11_Set_Maven_Config.png) - -Finally, you can run Gephi by selecting **Run > Run 'Gephi'** from the top-level menu. - -![Run](/docs/Developer_Documentation/How-to-build-Gephi/12_Run.png) - -### Troubleshooting - -#### Debugging - -At this point (IntelliJ 2021.1) debugging doesn't work out of the box. To enable debugging in IntelliJ follow these steps: - -1. Alter your Run configuration and add ` -Dnetbeans.run.params.debug=-J-agentlib:jdwp=transport=dt_socket,suspend=n,server=n,address=8000` to the command line, after `nbm:cluster-app nbm:run-platform`. - -2. Create a new **Remote JVM Debug** Run configuration and select **Listen to Remote JVM**. Make sure to configure 8000 as the port as well. You can name this configuration **Gephi Debug**. - -Now, start the **Gephi Debug** by selecting the Debug button. The debugger starts and waits for Gephi to start as well. Then, start Gephi in Debug mode. The debugger should now log `Connected to the target VM, address: 'localhost:8000', transport: 'socket'` and properly stop at your breakpoints. \ No newline at end of file diff --git a/gephi-desktop/docs/Developer_Documentation/Localization.md b/gephi-desktop/docs/Developer_Documentation/Localization.md deleted file mode 100644 index 1ce7e25..0000000 --- a/gephi-desktop/docs/Developer_Documentation/Localization.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -id: localization -title: Localization -sidebar_position: 5 ---- - -Gephi has a localization program to provide the software in your language: this page describes how to contribute! We use the [Weblate](https://hosted.weblate.org/projects/gephi/). - -## Short and long term team goal - -Lots of people are not comfortable with English. Our goal is to distribute Gephi in French, Spanish and other languages the community requests. - -## Translation guide - -### Get started! - -1. Create an account on [Weblate](https://hosted.weblate.org/projects/gephi/). -- Best is to login with your GitHub account so your contributions will be directly linked to your GitHub profile - -2. Take a look at the [latest guidelines](https://hosted.weblate.org/projects/gephi/#information) - -3. Browse the components and start translating! - -**Important Note: only English texts should be written directly in the source code .properties files. All translations should be made on Weblate platform, otherwise there will be conflicts.** \ No newline at end of file diff --git a/gephi-desktop/docs/Developer_Documentation/Test_development_versions.md b/gephi-desktop/docs/Developer_Documentation/Test_development_versions.md deleted file mode 100644 index 6b76b97..0000000 --- a/gephi-desktop/docs/Developer_Documentation/Test_development_versions.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -id: test_development_versions -title: Test Development Versions -sidebar_position: 6 ---- - -Development versions of Gephi can be installed and tested without affecting your stable Gephi installation. This is useful for trying out new features, before they are released in a stable version. It's also a way to benefit from bugfixes that are not yet available in the stable release. - -## Download Development Builds - -Development builds are located [here](https://github.com/gephi/gephi?tab=readme-ov-file#latest-releases). Download and install the version that matches your operating system. - -Note that development builds are not fully tested and may be unstable. They are provided for testing purposes only. Plugins also need to be installed manually (by downloading the NBM files from the plugin portal) as the automatic update center is not available in development builds. \ No newline at end of file diff --git a/gephi-desktop/docs/Developer_Documentation/_category_.json b/gephi-desktop/docs/Developer_Documentation/_category_.json deleted file mode 100644 index 731f58f..0000000 --- a/gephi-desktop/docs/Developer_Documentation/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Developer Documentation", - "position": 2 -} diff --git a/gephi-desktop/docs/Developer_Documentation/index.mdx b/gephi-desktop/docs/Developer_Documentation/index.mdx deleted file mode 100644 index 4fbd138..0000000 --- a/gephi-desktop/docs/Developer_Documentation/index.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -id: index -title: Introduction -sidebar_position: 1 ---- - -Welcome, if you’re new to the codebase or want a fast, practical overview of Gephi’s architecture and how the project is organized, watch the short video and review the **[slides](https://gephi.wordpress.com/wp-content/uploads/2023/01/introduction-to-gephi-codebase-and-development.pdf)**. The video walks through Gephi’s core concepts, common workflows and the high‑level architecture (modules, APIs/SPIs, and extension points), - -Both resources are up‑to‑date and are an excellent first step. - -<div style={{ position: 'relative', paddingBottom: '56.25%', height: 0 }}> - <iframe - src="https://www.youtube.com/embed/0OVQQACjLck" - title="Introduction to Gephi Codebase and Development" - style={{ position: 'absolute', top: 0, left: 0, width: '80%', height: '80%', border: 0 }} - allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" - allowFullScreen - /> -</div> \ No newline at end of file diff --git "a/gephi-desktop/docs/Plugins/De\314\201marrage_rapide_(FR).md" "b/gephi-desktop/docs/Plugins/De\314\201marrage_rapide_(FR).md" deleted file mode 100644 index 26fcda0..0000000 --- "a/gephi-desktop/docs/Plugins/De\314\201marrage_rapide_(FR).md" +++ /dev/null @@ -1,312 +0,0 @@ ---- -id: démarrage-rapide-fr -title: Démarrage rapide (FR) -sidebar_position: 2 ---- - -# Tutoriel Gephi <br/> Démarrage rapide -Bienvenue sur ce tutoriel. Vous apprendrez ici les étapes fondamentales pour visualiser et manipuler un réseau dans Gephi. - -Ce tutoriel se base sur la version 0.7alpha2 de Gephi. -[Télécharger Gephi](https://gephi.org/users/download/) - -# Import de fichiers -## Ouverture d’un fichier graphe -* Téléchargez le fichier [LesMiserables.gexf](https://gephi.org/datasets/LesMiserables.gexf) -* Dans la barre de menu, allez dans le menu **Fichier** et **Ouvrir...** - -~~ Image : tutorial_quickstart1_FR ~~ - -**Format des graphes** -- GEXF -- GraphML -- Pajek NET -- GDF -- GML -- Tulip TLP -- CSV -- ZIP compressé - -## Rapport d’import -<ul> -<li>Lorsque votre fichier s’ouvre, le rapport récapitule les données trouvées et les problèmes rencontrés.</li> -<ul> -<li>Nombre de noeuds</li> -<li>Nombre de liens</li> -<li>Type de graphe</li> -</ul> -</ul> -* Cliquez sur **OK** pour valider et visualiser le graphe. - -~~ Image : tutorial_quickstart2_FR ~~ - -## Affichage du graphe -Nous avons importé le fichier de données LesMiserables.gexf<sup>1</sup>. Il s’agit du réseau pondéré des apparitions simultanées des personnages du roman _Les Misérables_ de Victor Hugo. -~~ Image : ? ~~ - -Les noeuds sont d’abord placés de manière aléatoire, la présentation que vous voyez peut donc différer légèrement. - -<cite><sup>1</sup>D. E. Knuth, The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley, Reading, MA (1993)</cite> - -# Visualisation -## Visualisation du graphe -<ul> -<li>Utilisez votre souris pour vous déplacer dans la visualisation et modifier son échelle.</li> -<ul> -<li>Zoom : Molette de la souris</li> -~~ Image : ? ~~ -<li>Panoramique : Glisser à droite</li> -~~ Image : ? ~~ -</ul> -</ul> -* L’**échelle du poids des liens** se trouve en bas de la fenêtre. - -~~ Image : gephi_configure_labels__bisFR ~~ -* Si vous ne voyez plus votre graphe, réinitialisez l’échelle. - -~~ Image : ? ~~ - -# Spatialisation -## Spatialisation du graphe -La fonction principale des algorithmes de spatialisation est de définir la forme du graphe. -* Repérez le module **Spatialisation** dans le volet à gauche de l’écran. -* Sélectionnez **Force Atlas**. -Vous pouvez voir les propriétés de la spatialisation sous son nom. Conservez les valeurs. -* Pour lancer l’algorithme, cliquez sur **Exécuter**. - -**Algorithmes de spatialisation** -La spatialisation des graphes est généralement réalisée à partir d’algorithmes basés sur les forces. Ils suivent un principe simple : les noeuds reliés s’attirent et les noeuds non reliés se repoussent. - -## Contrôle de la spatialisation -Les propriétés de spatialisation vous permettent de contrôler l’algorithme afin de générer une représentation esthétique. -~~ Image : tutorial_quickstart9_FR ~~ -* Pour agrandir le graphe, réglez la **Force de répulsion** sur 10 000. -* Pour valider la valeur modifiée, appuyez sur la touche **Entrée** de votre clavier. -* Vous pouvez maintenant **Arrêter** l’algorithme. - -## Affichage du graphe spatialisé -~~ Image : ? ~~ - -# Classement (par couleur) -## Classement (par couleur) -Le module **Classement** vous permet de configurer la couleur et la taille d’un noeud. -* Cliquez sur le module **Classement** en haut à gauche de l’écran. -* Sélectionnez **Degré** comme paramètre de classement. - -~~ Image : tutorial_quickstart12_FR ~~ - -Le panneau de configuration suivant s’affiche : -~~ Image : tutorial_quickstart13_FR ~~ -* Cliquez sur **Appliquer** pour afficher le résultat. - -## Configuration des couleurs -~~ Image : tutorial_quickstart13_FR ~~ -* Déplacez la souris sur le curseur de dégradé. -~~ Image : ? ~~ -* Pour configurer la couleur, double-cliquez sur les triangles. -~~ Image : ? ~~ - -**Palette** -Pour utiliser la palette, double-cliquez sur le volet. -~~ Image : tutorial_quickstart17_FR + ? ~~ - -## Tableau des résultats du classement -Vous pouvez voir les valeurs du classement en affichant le tableau des résultats. Le noeud Valjean possède 36 liens et est le plus connecté du réseau. -* Activez l’affichage des résultats sous forme de tableau. -* Cliquez à nouveau sur le bouton **Appliquer**. - -~~ Image : tutorial_quickstart18_FR ~~ - -# Métriques -## Métriques -Nous allons calculer la longueur de chemin moyenne pour le réseau. Cela permet de calculer la longueur du chemin entre toutes les paires de noeuds et de fournir des informations sur la distance entre les noeuds. -* Dans le volet droit, cliquez sur le module **Statistiques**. -* Cliquez sur **Exécuter** en face de **Plus courts chemins**. - -~~ Image : tutorial_quickstart19_FR ~~ - -**Métriques disponibles** -- Diamètre -- Plus courts chemins -- Coefficient de Clustering -- PageRank -- HITS -- Betweeness Centrality -- Closeness Centrality -- Excentricité -- Détection de communauté (Modularité) - -## Configuration des métriques -Le panneau de configuration s’affiche. -~~ Image : tutorial_quickstart20_FR ~~ -Pour calculer la métrique, sélectionnez **Dirigé**, puis cliquez sur **OK**. - -## Résultat des métriques -À la fin du traitement, le résultat de la métrique est affiché dans un rapport. -~~ Image : tutorial_quickstart21 ~~ - -# Classement (par taille) -## Classement (par taille) -Les métriques génèrent des rapports généraux ainsi que les résultats pour chaque noeud. -Ainsi, trois nouvelles valeurs ont été créées par l’algorithme **Plus courts chemins**. -<ul> -<li>**Betweeness Centrality**</li> -<li>**Closeness Centrality**</li> -<li>**Excentricité**</li> -</ul> - -* Retournez sur l’onglet **Classement**. -* Sélectionnez **Betweeness Centrality** dans la liste déroulante. -~~ Image : tutorial_quickstart22_FR ~~ -Cette métrique fait ressortir les noeuds les plus importants dont la fréquence est la plus élevée. - -À présent, paramétrez la taille des noeuds. L’indicateur de **Degree** (Degré) est toujours représenté par des couleurs. -* Pour définir la taille, sélectionnez l’icône en forme de diamant dans la barre d’outils. -* Définissez la taille minimale sur 10 et la taille maximale sur 50. -~~ Image : tutorial_quickstart23_FR ~~ -* Pour voir le résultat, cliquez sur **Appliquer**. - -## Graphe avec différenciation de couleurs et de tailles -~~ Image : ? ~~ -Couleur : Degree (Degré) -Taille : Métrique **Betweeness Centrality** - -# Nouvelle spatialisation -## Nouvelle spatialisation -La spatialisation n’est pas totalement satisfaisante. En effet, des noeuds de grande taille chevauchent parfois des noeuds plus petits. -L’algorithme **Force Atlas** dispose d’une option qui permet de prendre la taille des noeuds en considération lors de la spatialisation. -* Retournez sur le volet **Spatialisation**. -* Cochez l’option **Ajustement par taille**, puis exécutez à nouveau l’algorithme pendant quelques instants. -* Les noeuds ne se chevauchent plus désormais. - -~~ Image : tutorial_quickstart26_FR ~~ - -# Affichage des labels -## Affichage des labels -Explorons le réseau plus en détails maintenant que les couleurs et la taille mettent en valeur les noeuds importants. -~~ Image : tutorial_quickstart27_FR ~~ -* Affichez les labels des noeuds. -~~ Image : tutorial_quickstart ~~ -* Paramétrez l’affichage des labels afin que leur taille soit proportionnelle à celle des noeuds. -~~ Image : gephi_configure_labels__bisbisFR ~~ -* Pour régler la taille des labels, faites glisser le curseur de l’échelle. -~~ Image : gephi_configure_labels__bisbisbisFR ~~ - -# Détection de communauté -## Détection de communauté -La capacité à détecter et à étudier les communautés est essentielle à l’analyse du réseau. Dans notre exemple, nous souhaitons colorer les groupes de noeuds. -Gephi utilise la méthode Louvain<sup>1</sup>, disponible dans le volet **Statistiques**. -Cliquez sur **Exécuter** en regard de la ligne **Modularité**. -~~ Image : tutorial_quickstart28_FR ~~ - -* Sélectionnez **Aléatoire** dans le volet. -* Pour lancer la détection, cliquez sur **OK**. -~~ Image : tutorial_quickstart29_FR ~~ - -<cite><sup>1</sup>Blondel V, Guillaume J, Lambiotte R, Mech E (2008) Fast unfolding of communities in large networks. J Stat Mech : Theory Exp 2008:P10008. (http://findcommunities.googlepages.com)</cite> - -# Partition -## Partition -L’algorithme de détection de communauté a créé une valeur de **Modularity Class** (classe de modularité) pour chaque noeud. -Le module **Partition** peut utiliser ces nouvelles données pour colorer les communautés. -* Dans le volet gauche, cliquez sur le module **Partition**. -* Pour remplir la liste de partitions, cliquez sur le bouton **Rafraîchir**. -~~ Image : tutorial_quickstart30_FR ~~ - -**Comment visualiser les colonnes affichant les noeuds et les liens ?** -Pour afficher les colonnes et les valeurs des noeuds et des liens, consultez le **Tableau de données**. -Pour actualiser le tableau, cliquez sur l’onglet **Laboratoire des données**, puis cliquez sur **Noeuds**. - -<br /> -* Dans la liste de partitions, sélectionnez **Modularity Class** (classe de modularité). -Dans l’exemple ci-dessous, neuf communautés ont été trouvées. Le nombre de communautés est variable. Une couleur a été définie au hasard pour chaque identifiant de communauté. -~~ Image : tutorial_quickstart31_FR ~~ -* Pour afficher les noeuds en couleur, cliquez sur **Appliquer**. -Pour accéder à la fonction **Générer les couleurs aléatoirement**, cliquez sur le volet à l’aide du bouton droit de la souris. -~~ Image : tutorial_quickstart33_FR ~~ - -## Nouvelle apparence du réseau -~~ Image : ? ~~ - -# Filtrage -## Filtrage -Le filtrage constitue la dernière manipulation. Il est possible de créer des filtres permettant de masquer certains noeuds et liens du réseau. Dans cet exemple, nous allons créer un filtre afin de supprimer les feuilles, c’est-à-dire les noeuds à lien unique. -~~ Image : tutorial_quickstart34_FR ~~ -* Dans le volet droit, cliquez sur le module **Filtres**. -* Dans la catégorie **Topologie**, sélectionnez **Plage de degrés**. -~~ Image : tutorial_quickstart35_FR ~~ -* Sous **Requêtes**, faites glisser l’option sur **Glissez** le filtre ici. -~~ Image : tutorial_quickstart36_FR ~~ -* Pour activer le filtre, cliquez sur **Plage de degrés**. Le volet des paramètres s’affiche. -~~ Image : tutorial_quickstart37_FR ~~ -Ce volet comprend un curseur de réglage de la plage de degrés ainsi qu’un graphique représentant les données, ici la répartition par degrés. -~~ Image : tutorial_quickstart39_FR ~~ -* Déplacez le curseur de gauche afin de régler le degré minimum sur 2. -* Pour appliquer le filtre, cliquez sur le bouton **Filtrer**. -Les noeuds dont le degré est inférieur à 2 sont désormais masqués. - -**Astuce** -Pour modifier les limites des degrés, double-cliquez sur les valeurs correspondantes. -~~ Image : ? ~~ - -## Réseau filtré -~~ Image : ? ~~ -La manipulation est terminée. Nous allons à présent prévisualiser la modélisation et préparer l’export. - -# Prévisualisation -## Prévisualisation -<ul> -<li>Avant d’exporter le graphe au format SVG ou PDF, allez sur la **Prévisualisation** pour :</li> -<ul> -<li>obtenir un aperçu exact du graphe ;</li> -<li>y apporter la touche finale.</li> -</ul> -</ul> -* Dans le ruban, sélectionnez l’onglet **Prévisualisation** : -~~ Image : tutorial_quickstart41_FR ~~ -* Pour afficher la prévisualisation, cliquez sur **Rafraîchir**. -~~ Image : tutorial_quickstart_preview_FR ~~ - -**Astuce** -Si le graphe est trop grand, vous pouvez afficher un graphe partiel en déplaçant le curseur du **Ratio** à 50 % ou à 25 %. - -* Dans la catégorie **Labels de noeud**, activez la case à cocher **Afficher les labels**. -* Cliquez sur **Prévisualiser**. -~~ Image : tutorial_quickstart44_FR ~~ -Dans les **Paramètres d’aperçu**, cliquez sur la liste de **Réglages** prédéfinis et essayez différentes configurations. - -## Prévisualisation du graphe -~~ Image : ~~ - -# Export -## Export au format SVG -À partir de la **Prévisualisation**, cliquez sur **SVG** en face de **Export**. -~~ Image : tutorial_quickstart43_FR ~~ - -Tout comme les PDF, les fichiers SVG sont des graphiques vectoriels. Les images peuvent facilement être redimensionnées. Il est donc possible de les imprimer ou de les intégrer à des présentations en haute résolution. - -Les fichiers SVG peuvent être modifiés à l’aide du logiciel Inkscape ou Adobe Illustrator. -~~ Image : ~~ - -**Captures d’écran en haute résolution ** -Si vous préférez uniquement les captures d’écran au format PNG en haute résolution, cliquez sur l’icône ~~ Image : ? ~~ située sous l’aperçu, dans la barre des paramètres d’aperçu. - -# Enregistrement -## Enregistrement du projet -L’enregistrement de votre projet regroupe l’ensemble des données et des résultats dans un fichier de session unique. -~~ Image : tutorial_quickstart48_FR ~~ -~~ Image : ? ~~ -Si vous n’avez pas suivi toutes les étapes, vous pouvez télécharger la session : -[https://gephi.org/datasets/lesmiserables.gml.zip](https://gephi.org/datasets/lesmiserables.gml.zip) - -# Conclusion -Ce tutoriel vous a présenté les manipulations de base permettant d’ouvrir, de visualiser, de manipuler et de générer un fichier de réseau avec Gephi. -~~ Images : ??? ~~ -Pour en savoir plus : -* [Site Web Gephi](http://gephi.org/) -* [Wiki Gephi](http://wiki.gephi.org/) -* [Forum Gephi](http://wiki.gephi.org/) - -Ces pages sont disponibles uniquement en anglais. - -Dernière mise à jour le 5 mars 2010 \ No newline at end of file diff --git a/gephi-desktop/docs/Plugins/Export.md b/gephi-desktop/docs/Plugins/Export.md deleted file mode 100644 index 7a2014b..0000000 --- a/gephi-desktop/docs/Plugins/Export.md +++ /dev/null @@ -1,193 +0,0 @@ ---- -id: Export -title: Export -sidebar_position: 7 ---- - -Exporters export data from Gephi to various targets, like files or streams. - -One can find file exporter examples in Gephi's `ExportPlugin` and `PreviewExport` [modules](https://github.com/gephi/gephi/tree/master/modules). - -## Create a new Exporter - -### Set Dependencies - -Add `export-api`, `project-api`, and `org-openide-util-lookup` modules as dependencies for your plugin module *MyExport*. - -### Create Exporter Builder - -`ExporterBuilder` is a factory class for building the important instance, all Exporters should have their own builder. -Create a new builder *MyExporterBuilder* class, which implements one of the following interface: - -* [`GraphFileExporterBuilder`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/exporter/spi/GraphFileExporterBuilder.html) - For graph export (like GEXF, GraphML, CSV...) -* [`VectorFileExporterBuilder`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/exporter/spi/VectorFileExporterBuilder.html) - Vector graphics (like SVG, PDF, ...) -* [`ExportBuilder`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/exporter/spi/ExporterBuilder.html) - Anything else - -Let's say we create a exporter for a custom graph format with *.foo* extension, so we choose `GraphFileExporterBuilder`. - -Fill the `getFileTypes()` and `getName()` methods like below, for a single file format supported named *foo*. - -```java -public String getName() { - return "foo"; -} - -public FileType[] getFileTypes() { - return new FileType[]{new FileType(".foo", "Foo files")}; -} -``` - -Add `@ServiceProvider` annotation to your builder class to declare you are implementing an `Exporter` service. Add the following line before *MyExporterBuilder* class definition, as shown below: - -```java -@ServiceProvider(service = GraphFileExporterBuilder.class) -public class MyExporterBuilder implements GraphFileExporterBuilder{ -... -``` - -This annotation registers your implementation in the system, in order it can be discovered at runtime. - -Put `GraphFileExporterBuilder.class` as the annotation service parameter for graph files, `VectorFileExporterBuilder.class` for vector graphics and `ExportBuilder.class` for the rest. - -### Create Exporter - -Create a new exporter class, which implements `GraphExporter`, `VectorExporter` or simply `Exporter`, depending on what you set for the builder. - -The exporter is where the job is done, in its `execute()` method. The main input object the export needs is the Workspace. In Gephi, data are stored within workspaces. It is the place the exporter will find what to export. Before being executed by the export controller, the exporter will receive the workspace and other parameters through setters methods. - -Implement also [`ByteExporter`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/exporter/spi/ByteExporter.html) interface for byte streams or [`CharacterExporter`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/exporter/spi/CharacterExporter.html) for texts. These are the two ways you can output data in a exporter, either text (`java.io.Writer`) or byte (`java.io.OutputStream`). Note that XML is text-based. So exporters are not specifically exporting to a file or a stream, they export to a Writer or an `OutputStream`. The controller later decides what to do with it. - -Add also `LongTask` interface to your class, in order you will be able to use progress and cancel management. Add `utils-longtask` as a dependency to profit from LongTask. - -Your exporter should now look like below: - -```java -public class MyExporter implements GraphExporter, CharacterExporter { - - private boolean exportVisible = false; - private Workspace workspace; - private Writer writer; - - @Override - public boolean execute() { - //Do the job - } - - @Override - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; - } - - @Override - public Workspace getWorkspace() { - return workspace; - } - - @Override - public void setWriter(Writer writer) { - this.writer = writer; - } - - @Override - public void setExportVisible(boolean exportVisible) { - this.exportVisible = exportVisible; - } - - @Override - public boolean isExportVisible() { - return exportVisible; - } -} -``` - -The `GraphExporter` interface has an additional parameter: `exportVisible`. It indicates if either the complete or only the visible graph should be exported. At any time the system keeps the complete graph in memory. When users use filtering, the visible graph is different, as some nodes/edges have been removed. Below is the way to retrieve the good graph with this parameter. - -```java -public boolean execute() { - GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } - //Do the job -} -``` - -### Finish the builder - -In the builder, return a new instance of your exporter in the `buildExporter()` method. - -```java -@Override -public GraphExporter buildExporter() { - return new MyExporter(); -} -``` - -## With settings UI - -You can create an `ExporterUI` class for your exporter. It is not mandatory and the exporter will work normally with default settings. - -### Create MyExporterUI - -Create a new exporter UI class, for instance *MyExporterUI* that implements `ExporterUI`. - -Your UI class is responsible for providing the JPanel associated to your exporter and set settings value to your *MyExporter* instance. The system will ask for a JPanel, show a setting dialog and then call `unsetup()`. If users validate the settings panel by hitting OK, the `unsetup()` method is called with update set as true and ask the UI to write the setting values. -The sample below will help you: - -```java -public class MyExporterUI implements ExporterUI { - - private JPanel panel; - private MyExporter exporter; - - public void setup(Exporter exporter) { - this.exporter= (MyExporter)exporter; - } - - public JPanel getPanel() { - panel = new JPanel(); - return panel; - } - - public void unsetup(boolean update) { - if(update) { - //The user clicked OK when closing settings - } else { - //Cancel was hit - } - panel = null; - exporter = null; - } - - public String getDisplayName() { - return "Exporter Foo"; - } - - public boolean isUIForExporter(Exporter exporter) { - return exporter instanceof MyExporter; - } -} -``` - -### Register the UI - -Add `@ServiceProvider` annotation to your UI class. Add the following line before *MyexporterUI* class definition, as shown below: - -```java -@ServiceProvider(service = ExporterUI.class) -public class MyExporterUI implements ExporterUI{ -... -``` - -Note that by doing this your class becomes a singleton. - -### Remember settings - -How to remember last settings set to the exporter, as each time a new export is made, a new instance of Exporter is created. - -It is the `ExporterUI`'s role to remember settings. The only thing to do is load settings at `setup()` and save settings at unsetup. Look at existing classes in the `ExporterPluginUI` module to have an example. - -![image](/docs/Plugins/Export/00_image.png) diff --git a/gephi-desktop/docs/Plugins/Extend_Data_Laboratory.md b/gephi-desktop/docs/Plugins/Extend_Data_Laboratory.md deleted file mode 100644 index 4b1b36f..0000000 --- a/gephi-desktop/docs/Plugins/Extend_Data_Laboratory.md +++ /dev/null @@ -1,375 +0,0 @@ ---- -id: Extend_Data_Laboratory -title: Extend Data Laboratory -sidebar_position: 10 ---- - -## Introduction - -Data Laboratory section of Gephi provides a good amount of basic and common features to manipulate the graph. But data laboratory can be extended with new features as plugins easily through Data Laboratory API/SPI. All Gephi's default data laboratory features are in **Data Laboratory Plugin**. **Simple and complex examples can be found in this module**. - -For this tutorial, the **SPI** packages (`org.gephi.datalab.spi`) are the most interesting, while `org.gephi.datalab.api` only contains several controllers that expose general features to be used by plugins or other parts of gephi. - -Data Laboratory SPI may seem big, but all interfaces to implement are mostly the same with small changes necessary to define different types of features. **Once you know how to create some kind of feature, it is simple to create others**. - -**From now on, we will call data laboratory features 'manipulators' since they manipulate graph data/elements.** - -### Where each type of manipulator appears in Gephi desktop application - -![800px-data-lab-overview](/docs/Plugins/Extend_Data_Laboratory/00_800px-data-lab-overview.png) - -![merge-strategies](/docs/Plugins/Extend_Data_Laboratory/01_merge-strategies.png) - -### The Manipulator interface - -The [Manipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/Manipulator.html) interface is the part that most of the interfaces that you will implement share in common. Also, all kinds of manipulators can provide an optional GUI just by returning an implementation of the [ManipulatorUI](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/ManipulatorUI.html) interface. - -The interfaces that extend Manipulator to provide specific types of manipulators are: - -- [NodesManipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/nodes/NodesManipulator.html) - Defines a context menu action to manipulate one or more selected nodes. -- [EdgesManipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/edges/EdgesManipulator.html) - Defines a context menu action to manipulate one or more selected edges. -- [GeneralActionsManipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/general/GeneralActionsManipulator.html) - Defines a general action not related to any specific graph element. [PluginGeneralActionsManipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/general/PluginGeneralActionsManipulator.html) is the same but appears in a plugin button that displays a list of general actions (use this when the tool bar does not have enough space for more general actions). -- [AttributeValueManipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/values/AttributeValueManipulator.html) - Defines a context menu action that manipulates a single cell data (pair of AttributeRow and AttributeColumn). -- [AttributeColumnsMergeStrategy](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategy.html) - Defines an strategy --- [AttributeRowsMergeStrategy](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategy.html) - A very special type of manipulator that defines strategies for merging rows to be used by a nodes/edges manipulator or other parts (does not have a place in Data Laboratory GUI by itself but it is currently used by MergeNodes manipulator). - -Only [AttributeColumnsManipulator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/columns/AttributeColumnsManipulator.html) is a bit different from `Manipulator` because its workflow is not the same as all the previous manipulators, and therefore provides its unique interface plus a [AttributeColumnsManipulatorUI](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/columns/AttributeColumnsManipulatorUI.html). - -## Create a new Manipulator - -Once we understand the interfaces that define our manipulators, we can create some sample features. - -### Setting up our data - -Here is where manipulators that need some **initial data** (like nodes, edges or columns) get it. This method **varies for each type of manipulator** but is always called before any other method. - -Code example for a nodes manipulator: - -```java -public void setup(Node[] nodes, Node clickedNode) { - this.nodes=nodes;//Keep the needed data for future operations. -} -``` - -In this case, setup receives an array of nodes (selected nodes at right click) and the specific clicked node. - -### Name and description - -Simply define a name an a description (optional) of what our manipulator does. - -```java -public String getName() { - return NbBundle.getMessage(Group.class, "Group.name");//Localized name for nodes grouping action -} - -public String getDescription() { - return null;//No description -} -``` - -### Determining if our manipulator should be eligible to execute - -In determinate conditions we would not like our manipulator to be executed, so we declare it with a boolean. **The moment this is called, setup has already been called**. - -```java -public boolean canExecute() { - return nodes.length == 1;//This manipulator will only be executed with a single node selection -} -``` - -### Provide an UI - -Here we can return our GUI if desired. We will talk about ManipulatorUIs later. - -```java -public ManipulatorUI getUI(){ - return new MyUI();//It is not necessary to pass this class to the UI now because ManipulatorUI will be set up later. - //return null if no GUI -} -``` - -### Ordering and classifying manipulators - -In order to declare the position in a group of manipulators that our manipulator has to appear, we have to provide a number identifying the category(type) and position. - -Order of appearance is determined first by the type number and then by position number. Often consecutive elements are given numbers with considerable separation to be able to insert new categories between them. - -```java -public int getType() { - return 300;//Will appear in the same category as other manipulators that also return 300 -} - -public int getPosition() { - return 0;//Will appear in its category before manipulators with a position of 1 or more -} -``` - -**These are the only methods that could be called before setup and therefore should not depend on context data**. - -### Optional icon - -Just return an icon for the feature or null. - -```java -public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true); -} -``` - -### Executing the final action - -**This is where our feature does the work** once it has been chosen and preferences (if any) have been chosen with or without a GUI. - -``` -public void execute() { - for(Node node:nodes){ - //Do something with the nodes - } -} -``` - -### Complete code for Group nodes manipulator - -```java -public class Group extends BasicNodesManipulator { - private Node[] nodes; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes=nodes; - } - - public void execute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.groupNodes(nodes); - } - - public String getName() { - return NbBundle.getMessage(Group.class, "Group.name"); - } - - public String getDescription() { - return ""; - } - - public boolean canExecute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - return gec.canGroupNodes(nodes); - } - - public ManipulatorUI getUI() { - return null; - } - - public int getType() { - return 300; - } - - public int getPosition() { - return 0; - } - - public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true); - } -} -``` - -## Nodes and edges manipulators - -Both of these types of manipulators are shown as context menu actions in a popup menu, and benefit from some special settings defined in the `ContextMenuItemManipulator` interface. Their principal extra feature is the possibility to have subitems, as can be observed in the next image. - -![sub-items](/docs/Plugins/Extend_Data_Laboratory/02_sub-items.png) - -It defines 3 methods: - -```java -public ContextMenuItemManipulator[] getSubItems() { - return null;//Return subitems -} -``` - -Note that: - -- Most nodes/edges manipulators won't need to have subitems. -- Subitems can also return more subitems. -- Subitems will be set up with the proper data like their parents. -- If a item/subitem returns subitems, it will never be executed, their subitems will. -- `execute` method of the specific clicked subitem will be called. - -```java -public boolean isAvailable() { - return true;//Indicates if a subitem has to appear in the menu at all (enabled or not) -} - -public Integer getMnemonicKey() { - return null;//Shorcut associated key for this item -} -``` - -Most manipulators won't need this, so a simple class like the following can be extended by all your manipulators to avoid repeating code: - -```java -public abstract class BasicNodesManipulator implements NodesManipulator{ - - public boolean isAvailable() { - return true; - } - - public ContextMenuItemManipulator[] getSubItems() { - return null; - } - - public Integer getMnemonicKey() { - return null; - } -} -``` - -*Visualization API has an SPI for adding context menu actions (GraphContextMenuItem) to nodes like DataLaboratory does with NodesManipulator. Note that they share the interface ContextMenuItemManipulator from Data Laboratory API, so they are compatible, being possible to reuse actions on nodes for Overview and Data Laboratory.* - -## AttributeColumnsManipulators - -What makes different these manipulators is that, instead oh having data set up and then `canExecute` being called, eligibility is tested for every column and is later executed for the selected column (showing first the UI if necessary). - -Here is a complete example of a real feature (columns duplication): - -```java -public class DuplicateColumn implements AttributeColumnsManipulator { - private String title; - private AttributeType columnType; - - public void execute(Table table, Column column) { - Lookup.getDefault().lookup(AttributeColumnsController.class).duplicateColumn(table, column, title, columnType); - } - - public String getName() { - return NbBundle.getMessage(DuplicateColumn.class, "DuplicateColumn.name"); - } - - public String getDescription() { - return ""; - } - - public boolean canManipulateColumn(Table table, Column column) { - return true; - } - - public AttributeColumnsManipulatorUI getUI(Table table,Column column) { - return new DuplicateColumnUI(); - } - - public int getType() { - return 0; - } - - public int getPosition() { - return 400; - } - - public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png"); - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Class getColumnType() { - return columnType; - } - - public void setColumnType(Class columnType) { - this.columnType = columnType; - } -} -``` - -Column type and title are set through `DuplicateColumnUI`. - -## Builders (how to get our plugins to appear in data laboratory perspective) - -Like in other parts of Gephi, api/spi implementations are exposed with Netbeans Lookup API. - -This is done with the `@ServiceProvider` annotation. Since this annotation returns a singleton of the service, in order to help the programmer avoid problems with previously set up data, some of the manipulators require a builder that returns instances of the manipulator as the service. - -But other manipulators are directly exposed as the service with the annotation. - -For example, to declare a `GeneralActionsManipulator`, it is sufficient with: - -```java -@ServiceProvider(service = GeneralActionsManipulator.class) -public class AddEdgeToGraph implements GeneralActionsManipulator { -... -``` - -But for a `NodesManipulator` you need to create a builder and give it the annotation (not to the manipulator): - -```java -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class SetNodesSizeBuilder implements NodesManipulatorBuilder { - public NodesManipulator getNodesManipulator() { - return new SetNodesSize(); - } -} -``` - -Manipulator type | Needs a builder ------------------| ---------------- -AttributeColumnsManipulator | -GeneralActionsManipulator | -AttributeColumnsMergeStrategy | ✓ -EdgesManipulator | ✓ -NodesManipulator | ✓ -AttributeRowsMergeStrategy | ✓ -AttributeValueManipulator | ✓ - -## Providing a GUI - -When your feature needs a GUI you only need to return a [ManipulatorUI](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/datalab/spi/ManipulatorUI.html) implementation capable of configuring your feature extra data. Let's see what each method should do with an example: - -```java -public class MyManipulatorUI extends JPanel implements ManipulatorUI { - private MyManipulator manipulator; - private DialogControls dialogControls; - - void setup(Manipulator m, DialogControls dialogControls){ - //Receive our manipulator instance: - manipulator = (MyManipulator) m; //We know the type of manipulator we are going to receive so cast is safe - //And an object to control the dialog if necessary - //(for now it only is able to enable/disable the Ok button of the dialog for validation purposes) - this.dialogControls = dialogControls; - } - - void unSetup(){ - //Called when the dialog is closed, canceled or accepted. Pass necessary data to the manipulator: - manipulator.setSomeOption(someValue); - ... - } - - String getDisplayName(){ - //Provide title for the dialog: - return manipulator.getName();//For example, the manipulator name - } - - public JPanel getSettingsPanel(){ - //Provide the JPanel to create the UI dialog - //A good practice is to extend JPanel and just return this object - return this; - } - - /** - * Indicates if the created dialog has to be modal - */ - public boolean isModal(){ - return true; - } -} -``` - -## Manipulators Summary - -![manipulators](/docs/Plugins/Extend_Data_Laboratory/03_manipulators.png) \ No newline at end of file diff --git a/gephi-desktop/docs/Plugins/Filter.md b/gephi-desktop/docs/Plugins/Filter.md deleted file mode 100644 index 2bdff9e..0000000 --- a/gephi-desktop/docs/Plugins/Filter.md +++ /dev/null @@ -1,284 +0,0 @@ ---- -id: Filter -title: Filter -sidebar_position: 9 ---- - -Filters are pruning the graph by keeping only nodes and edges that satisfies filters conditions. They are either predicates or functions that reduce the graph, predicates are easy and return only true or false, whereas functions input a graph and output a graph. - -Create a new plugin module, that we will call *MyFilter*. - -One can find filters examples in the [FiltersPlugin module](https://github.com/gephi/gephi/tree/master/modules/FiltersPlugin/src/main). - -## How filtering works in Gephi - -Gephi has a filter pipeline working with graph copies, where each filter can remove nodes and edges with settings. The Graph API in Gephi has the concept of View, a copy of the complete graph structure identified by an ID and where filters can work on it without disturbing other views. So, when a filter is removing nodes, it is removing them on a copy of the graph structure, the complete graph (named the main view) remains the same. This copy is eventually set as the visible view, the graph shown in the graph window. That is how users visualize a filtered graph. When filtering is disabled, the main view is simply set again as the visible view. - -The filter pipeline is executed on a separate Thread and therefore doesn't block the rest of the application. -Filters are wrapped into queries, which can be chained and combined. Similar as SQL nested queries concept, filter queries can have sub-queries and be represented as a tree, where the last executed query is the root. For example, the query **INDEGREE(3, EDGE_WEIGHT(2))** would be executed like below: - -* A complete copy of the graph structure is created in a new view -* It is passed to the **EDGE_WEIGHT** filter, which removes edges under weight 2 -* The sub-graph is passed to the **INDEGREE** filter, which removes nodes with in-degree less than 3 here -* The graph view is set as *visible view*, the graph windows automatically refreshes - -When a property is changed in the user interface, for instance the weight threshold, the complete process above is just re-executed and the former graph view is destroyed. - -## Create a new Filter - -### Set Dependencies - -Add `filters-api`, `graph-api`, and `org-openide-util-lookup` modules as dependencies for your plugin module. - -### Create FilterBuilder - -* `FilterBuilder` is a factory class for building the Filters. The builder is registered in the `FilterLibrary`. The library is the upper panel where users choose the filters they want to use. Another type of builders, named `CategoryBuilder` can create several builders at once and will be detailed later. -* Create a new builder *MyFilterBuilder* class, which implements [`FilterBuilder`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/filters/spi/FilterBuilder.html). -* Add `@ServiceProvider` annotation to your builder class, in order it is detected by the filter library. -Here is how it should look like: - -```java -@ServiceProvider(service = FilterBuilder.class) -public class MyFilterBuilder implements FilterBuilder { - - public Category getCategory() { - return FilterLibrary.NODE; - } - - public String getName() { - return "My Filter"; - } - - public Icon getIcon() { - return null; - } - - public String getDescription() { - return "A filter example"; - } - - public Filter getFilter() { - //TODO - } - - public JPanel getPanel(Filter filter) { - return null; - } - - public void destroy(Filter filter) { - } -} -``` - -Notice the `getCategory()` method. As the `FilterLibrary` is a tree, this builder needs a parent. That is the category. Use default categories defined in `FilterLibrary` like above or simply return your own: - -```java -public Category getCategory() { - return new Category("Samples Filters"); -} -``` - -### Create Filter - -Before creating the filter class, you should decide which filter interface to implement: - -* [`NodeFilter`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/filters/spi/NodeFilter.html): Basic filters for nodes, that works as predicates. For a given node the filter's role is to return true if the node is kept or false if it is removed. -* [`EdgeFilter`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/filters/spi/EdgeFilter.html): Basic filters for edges, that works as predicates. For a given edge the filter's role is to return true if the edge is kept or false if it is removed. -* [`ComplexFilter`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/filters/spi/ComplexFilter.html): Filter working with full graphs and returning a subgraph. - -The `ComplexFilter` interface is useful when both nodes and edges have to be filtered. -For instance, in the case of an edge weight filter (a filter that keeps edges only in a particular weight threshold) we only need `EdgeFilter`. But if I want to design a filter that prunes the graph until it's average degree is 5.5 I need to have control on both nodes and edges. The complex filter is a black box, where nodes and edges can be filtered (e.g. removed) with tricky or complex processes. - -#### NodeFilter - -Create a new *MyFilter* class, which implements `NodeFilter` interface. The main filter method is `evaluate()`. The `init()` asks if the filter is valid for the given graph. Only valid filters are executed by the system. -The example below removes isolated nodes (e.g. with degree equal to 0). The filter is said valid only if the graph have nodes. - -```java -public class MyFilter implements NodeFilter { - - public boolean init(Graph graph) { - return graph.getNodeCount() > 0; - } - - public boolean evaluate(Graph graph, Node node) { - return graph.getDegree(node) > 0; - } - - public void finish() { - } - - public String getName() { - return "My Filter"; - } - - public FilterProperty[] getProperties() { - return new FilterProperty[0]; //Will be explained later - } -} -``` - -#### ComplexFilter - -The complex filter interface is very simple, the `filter()` method directly gives the [`Graph`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/graph/api/Graph.html). - -``public Graph filter(Graph graph);`` - -Here is a example of a complex filter. It removes the 50% edges with the lowest weight. - -```java -public Graph filter(Graph graph) { - int edgeCount = graph.getEdgeCount(); - edgeCount /= 2; - - Edge[] edges = graph.getEdges().toArray(); - Arrays.sort(edges, new Comparator<Edge>() { - public int compare(Edge o1, Edge o2) { - return Float.compare(o1.getWeight(), o2.getWeight()); - } - }); - - for (int i = 0; i < edgeCount; i++) { - Edge edge = edges[i]; - graph.removeEdge(edge); - } - return graph; -} -``` - -It uses the `removeEdge()` method from the `Graph` API and returns the graph it received. - -**Can a filter also add elements?** -Yes, as far as they are part of the main view as well. -As an example, here is how the NOT operator works: - -```java -Graph mainGraph = graph.getView().getGraphModel().getGraph(); -for (Node n : mainGraph.getNodes().toArray()) { - if (!graph.contains(n)) { - //The node n is not in graph - graph.addNode(n); - } else { - //The node n is in graph - graph.removeNode(n); - } -} -``` - -### Finish the builder - -In the builder, return a new instance of your filter in the `getFilter()` method. - -```java -@Override -public Filter getFilter() { - return new MyFilter(); -} -``` - -### Properties - -It's very likely your filter will need to define properties, for instance a threshold or a pattern. In the case your filter has a user interface, the Filters API implementation has a system to automatically refresh the filter when a property value is changed. But for that it needs to be aware of these properties. That's why `Filter` interface has a `getProperties()` method. - -If your filter doesn't have any user interface, it is therefore not necessary to return properties. Otherwise, it is mandatory. -Below is how to define a simple `useRegex` boolean property: - -``FilterProperty p = FilterProperty.createProperty(this, Boolean.class, "useRegex");`` - -As it uses introspection to get and set the value, your class simply needs proper getters and setters. As a result that is how the method id filled: - -```java -public FilterProperty[] getProperties() { - return new FilterProperty[]{ - FilterProperty.createProperty(this, Boolean.class, "useRegex") - }; - } - - public boolean isUseRegex() { - return useRegex; - } - - public void setUseRegex(boolean useRegex) { - this.useRegex = useRegex; - } -``` - -When the `useRegex` value will be changed (through a checkbox for example), the system will be notified and re-execute the filter. - -### Provide a UI - -The `getPanel()` method in *MyFilterBuilder* can return a user interface for the filter. -One can find existing filters user interface code in the `FiltersPluginUI` module. -The panel is needed to configure a `Filter` instance, already created. That's why the `getPanel()` method gives the `Filter`. Cast this filter to *MyFilter*, it cannot be anything else and configure settings. -When settings are modified, use properties to set the new value. Below is an example of a simple panel, with a checkbox to set the `useRegex` property which we defined earlier. - -```java -public class MyFilterPanel extends javax.swing.JPanel implements ItemListener { - - private MyFilter filter; - private javax.swing.JCheckBox regexCheckbox; - - public MyFilterPanel(MyFilter filter) { - this.filter = filter; - - regexCheckbox = new javax.swing.JCheckBox("Use Regex"); - add(regexCheckbox); - - regexCheckbox.addItemListener(this); - } - - public void itemStateChanged(ItemEvent e) { - FilterProperty useRegex = filter.getProperties()[0]; - useRegex.setValue(regexCheckbox.isSelected()); - } -} -``` - -It is important to set the value to the `FilterProperty`, not to *MyFilter* directly. - -## Appendix - -### Create a CategoryBuilder - -Category builders are typically designed to build a filter that work on Attributes. For example, the `AttributeRangeFilter` works with all attribute columns. That means a `FilterBuilder` has to be created for each column, under a category (e.g. a folder). -The following example shows how several `AttributeRangeFilterBuilder` (which implements `FilterBuilder`) are created, one per attribute column. - -```java -@ServiceProvider(service = CategoryBuilder.class) -public class AttributeRangeBuilder implements CategoryBuilder { - - public Category getCategory() { - return new Category("Range", null, FilterLibrary.ATTRIBUTES); //The 'Range' folder will be in the 'Attributes' folder - } - - public FilterBuilder[] getBuilders(Workspace workspace) { - List<FilterBuilder> builders = new ArrayList<>(); - GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); - List<Column> columns = new ArrayList<>(); - columns.addAll(am.getNodeTable().toList()); - columns.addAll(am.getEdgeTable().toList()); - for (Column c : columns) { - if (!c.isProperty() && !c.isArray()) { - if (AttributeUtils.isNumberType(c.getTypeClass())) { - AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c); - builders.add(b); - } - } - } - return builders.toArray(new FilterBuilder[0]); - } -} -``` - -### Provide an icon - -Simply return an icon in the `FilterBuilder` implementation. - -### Custom Properties - -Properties natively supports all Java types, as well as Range and `Column`. For other types you may have to register a property editor to guarantee serialization to work. -Serialization is used to write and read properties values, when a Gephi project is saved. -Implement a property editor class and register it: - -* Create a new class that extends `java.beans.PropertyEditorSupport` and fill `getAstext()` and `setAsText()` methods. -* Register this editor by doing `java.beans.PropertyEditorManager.registerEditor()` method. \ No newline at end of file diff --git a/gephi-desktop/docs/Plugins/Generator.md b/gephi-desktop/docs/Plugins/Generator.md deleted file mode 100644 index 99d984a..0000000 --- a/gephi-desktop/docs/Plugins/Generator.md +++ /dev/null @@ -1,102 +0,0 @@ ---- -id: Generator -title: Generator -sidebar_position: 8 ---- - -Create a new plugin module, that we will call *MyGenerator*. - -## Create a new Generator - -### Set Dependencies - -Add `org-openide-util-lookup`, `graph-api` and `utils-longtask` modules as dependencies for your plugin module *MyGenerator*. - -### Create Generator - -* Create a new class that implements [Generator](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/generator/spi/Generator.html). This is the place the code belongs. -* Fill getName() method by returning a display name like "My Generator". Fill `getUI()` method by returning `null`. Leaves other methods untouched for the moment. -* Add `@ServiceProvider` annotation to your builder class. Add the following line before *MyGenerator* class definition, as shown below: - -```java -@ServiceProvider(service = Generator.class) -public class MyGenerator implements Generator { -... -``` - -### Generate the graph - -Fill `generate()` method by creating `NodeDraft` and `EdgeDraft` elements to add to the `ContainerLoader`. - -### Set LongTask - -To let your graph creation task be canceled and its progress watched, implement `LongTask` interface on *MyGenerator*. -Add two fields: - -```java -private boolean cancel = false; -private ProgressTicket progressTicket; -``` - -and implement new methods: - -```java -public boolean cancel() { - cancel = true; - return true; -} - -public void setProgressTicket(ProgressTicket progressTicket) { - this.progressTicket = progressTicket; -} -``` - -Use the `cancel` field to terminate your algorithm execution properly and return from `generate()`. - -### Sample - -```java -@ServiceProvider(service = Generator.class) -public class HelloWorld implements Generator { - - protected ProgressTicket progress; - protected boolean cancel = false; - - public void generate(ContainerLoader container) { - // create nodes - NodeDraft n1 = container.factory().newNodeDraft(); - NodeDraft n2 = container.factory().newNodeDraft(); - - // set node labels - n1.setLabel("Hello"); - n2.setLabel("World"); - - // create edge - EdgeDraft e = container.factory().newEdgeDraft(); - e.setSource(n1); - e.setTarget(n2); - - // fill in the graph - container.addNode(n1); - container.addNode(n2); - container.addEdge(e); - } - - public String getName() { - return "Hello World"; - } - - public GeneratorUI getUI() { - return null; - } - - public boolean cancel() { - cancel = true; - return true; - } - - public void setProgressTicket(ProgressTicket progressTicket) { - this.progress = progressTicket; - } -} -``` \ No newline at end of file diff --git a/gephi-desktop/docs/Plugins/Import.md b/gephi-desktop/docs/Plugins/Import.md deleted file mode 100644 index a5c988b..0000000 --- a/gephi-desktop/docs/Plugins/Import.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -id: Import -title: Import -sidebar_position: 5 ---- - -Importers push data from files, databases or external datasources to a `Container`. The role of the container is to host all data collected by importers (i.e. nodes, edges and attributes). This documentation is focused on file importers, but the procedure is similar for databases. - -Create a new plugin module, that we will call *MyImporter*. - -One can find file importer examples in the Gephi [source code](https://github.com/gephi/gephi/tree/master/modules/ImportPlugin/src/main). - -## Create a new Importer - -### Set Dependencies - -Add `io-importer-api`, `utils-longtask`, `org-openide-filesystems` and `org-openide-util-lookup` modules as dependencies for your plugin module *MyImport*. - -### Create FileImporterBuilder - -* `ImporterBuilder` is a factory class for building the important instance, all Importers should have their own builder. -* Create a new builder class, for instance *MyImporterBuilder* that implements `FileImporterBuilder`. -* Fill the `getFileTypes()` and `getName()` methods like below, for a single file format supported named *foo*. - -```java -public String getName() { - return "foo"; -} - -public FileType[] getFileTypes() { - return new FileType[]{new FileType(".foo", "Foo files")}; -} -``` - -Add `@ServiceProvider` annotation to your builder class. Add the following line before *MyImporterBuilder* class definition, as shown below: - -```java -@ServiceProvider(service = FileImporterBuilder.class) -public class MyImporterBuilder implements FileImporterBuilder { -... -``` - -### Create FileImporter - -The importer is where the job will be done. Create a new importer class, for instance *MyImporter* that implements `FileImporter`. - -Notice the `setReader()` method. That means you will work with a reader instead directly with files. The system is responsible for setting the reader before the importer you're developing will be executed. - -Add also `LongTask` interface to your class, in order you will be able to use progress and cancel management. -Your *MyImporter* would look like this: - -```java -public class MyImporter implements FileImporter, LongTask { - - private Reader reader; - private ContainerLoader container; - private Report report; - private ProgressTicket progressTicket; - private boolean cancel = false; - - public void setReader(Reader reader) { - this.reader = reader; - } - - public boolean execute(ContainerLoader loader) { - this.container = loader; - this.report = new Report(); - //Import - return !cancel; - } - - public ContainerLoader getContainer() { - return container; - } - - public Report getReport() { - return report; - } - - public boolean cancel() { - cancel = true; - return true; - } - - public void setProgressTicket(ProgressTicket progressTicket) { - this.progressTicket = progressTicket; - } -} -``` - -The infrastructure is set, the container for pushing data, the report for pushing logs and errors, and the progress management. - -### Finish the builder - -Go back to the *MyImporterBuilder* and complete `buildImporter()` and `isMatchingImporter()` methods: - -```java -public FileImporter buildImporter() { - return new MyImporter(); -} - -public boolean isMatchingImporter(FileObject fileObject) { - return fileObject.getExt().equalsIgnoreCase("foo"); -} -``` - -## With settings UI - -You can create an `ImporterUI` class for your importer. It is not mandatory and the importer will work normally with default settings. - -### Create MyImporterUI - -Create a new `ImporterUI` class, for instance *MyImporterUI* that implements [`ImporterUI`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/io/importer/spi/ImporterUI.html). - -Your UI class is responsible for providing the JPanel associated to your importer and set settings value to your *MyImporter* instance. The system will ask for a JPanel, show a setting dialog and then call `unsetup()`. If users validate the settings panel by hitting OK, the `unsetup()` method is called with update set as true and ask the UI to write the setting values. -The sample below will help you: - -```java -public class MyImporterUI implements ImporterUI { - - private JPanel panel; - private JCheckBox option; - private MyImporter importer; - - public void setup(Importer importer) { - this.importer = (MyImporter)importer; - } - - public JPanel getPanel() { - panel = new JPanel(); - option = new JCheckBox("Option"); - panel.add(option); - return panel; - } - - public void unsetup(boolean update) { - if(update) { - importer.setOption(option.isSelected()); - } - panel = null; - importer = null; - option = null; - } - - public String getDisplayName() { - return "Importer Foo"; - } - - public boolean isUIForImporter(Importer importer) { - return importer instanceof MyImporter; - } -} -``` - -In the example below, notice the `importer.setOption(option.isSelected())` line. The `setOption()` method doesn't exist in *MyImporter* but it shows how to configure it easily. - -### Register the UI - -Add `@ServiceProvider` annotation to your UI class. Add the following line before *MyImporterUI* class definition, as shown below: - -```java -@ServiceProvider(service = ImporterUI.class) -public class MyImporterUIimplements ImporterUI{ -... -``` - -## Advices - -### How to write a text file importer - -The best way for text files is to use a `LineNumberReader`. -One can get it from the `ImportUtils` class: - -``LineNumberReader lineReader = ImportUtils.getTextReader(reader);`` - -### How to write an XML file importer - -XML files can be read with different methods (DOM, SAX, StAX) in Java. -[StAX](http://www.wikiwand.com/en/StAX) is combining simplicity and efficiency and should be favored to read XML files: - -``XMLStreamReader xmLReader = ImportUtils.getXMLReader(reader);`` - -Thought it is not recommended to use DOM as it's too much memory consuming, here is how to get a Document from the reader: - -``Document document = ImportUtils.getXMLDocument(reader);`` - -### How to handle errors and exceptions - -Warnings and errors are generated by importers to let users get feedback about the import process. Data is rarely clean and perfectly formated, thus it's necessary to give a specific error message for each problem. The report present in your importer class is here for that. - -Similar as classical logging framework, that is how to log a information message: - -``report.logIssue(new Issue("The attribute label has been found", Issue.Level.INFO));`` - -There are four levels: **INFO**, **WARNING**, **SEVERE**, **CRITICAL**. Note that the critical level will stop the import process and throw an exception, so it is reserved if the file cannot be read or the XML is not valid for instance. -About exceptions, it is recommended that you throw `RuntimeException` from your execute method. They will be properly catched and displayed to users in a message box. - -![image](/docs/Plugins/Import/00_image.png) diff --git a/gephi-desktop/docs/Plugins/Layout.md b/gephi-desktop/docs/Plugins/Layout.md deleted file mode 100644 index f728071..0000000 --- a/gephi-desktop/docs/Plugins/Layout.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -id: Layout -title: Layout -sidebar_position: 3 ---- - -## Create a new Layout - -This HowTo shows how to create a new layout algorithm in Gephi. - -Please look at [How to add a new module](https://github.com/gephi/gephi-plugins?tab=readme-ov-file#how-to-add-a-new-module) first. When you have your plugin module, that we will call *MyLayout*, you can start this tutorial. - -### Set Dependencies - -Add `layout-api`, `graph-api` and `org-openide-util-lookup` modules as dependencies for your plugin module *MyLayout*. See [How to configure module dependencies](https://github.com/gephi/gephi-plugins?tab=readme-ov-file#where-are-dependencies-configured). - -### Create LayoutBuilder - -* Layout Builder provides information about the layout algorithm and is responsible for creating your Layout algorithm instances. All Layout algorithms should have their own builder. -* Create a new builder class, for instance *MyLayoutBuilder* that implements [`LayoutBuilder`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/layout/spi/LayoutBuilder.html). -* The builder interface is requesting a [`LayoutUI`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/layout/spi/LayoutUI.html) object. Create an inner or anonymous class that implements `LayoutUI`. -* Add `@ServiceProvider` annotation to your builder class. Add the following line before *MyLayoutBuilder* class definition, as shown below: - -```java -import org.openide.util.lookup.ServiceProvider; - -@ServiceProvider(service = LayoutBuilder.class) -public class MyLayoutBuilder implements LayoutBuilder { -... -``` - -### Create Layout - -Create a new class that implements [`Layout`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/layout/spi/Layout.html). This is the place the algorithm belongs. - -Methods `canAlgo()`, `initAlgo()`, `goAlgo()` and `endAlgo()` are the logic of the algorithm. But the algorithm is manipulating a graph, so where is this graph? The graph can be get from the `GraphModel`, which is injected through the `setGraphModel()` method (fill `setGraphModel()` with `this.graphModel = graphModel;`). The system always sets this graph model before `initAlgo()` is called. - -Add the graph model as a new private field of your class. -In your `goAlgo()` method, add the following code to get the current visible graph: - -```java -graph = graphModel.getGraphVisible(); -``` - -### Properties - -Your algorithm may have settings and properties that users may control. To be visible and editable in the Layout UI, properties need to be properly defined. - -Let's say you have a float speed parameter that you want to expose. That is how to create the appropriate LayoutPropery: - -```java -LayoutProperty mySpeedProperty = LayoutProperty.createProperty( - this, - Float.class, - "Speed" - "Category", - "A short description what is this propery doing and how users may modify it", - "getSpeed", - "setSpeed"); -``` - -Note that you need to create proper getter and setter for each property you want to expose. - -## Advanced concepts - -### Layout Data - -A special mechanism is available if you need to store temporary objects in nodes. In the following example, we will create a new type of layout data which stores a dx and dy value. - -Create a new *MyLayoutData* class that implements [`LayoutData`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/graph/spi/LayoutData.html) and add two floats dx and dy. -How to init? Place the following code at the beginning of `goAlgo()`: - -```java -for (Node n : nodes) { - MyLayoutData layoutData = n.getLayoutData(); - n.setLayoutData(layoutData); -} -``` - -That ensure you have a layout data object for each of your nodes. - -### Custom properties - -Properties can be basic types like Boolean, Float etc. If you want to expose custom types, for instance date, you can provide a `PropertyEditor` class when building the property. \ No newline at end of file diff --git a/gephi-desktop/docs/Plugins/Preview_renderer.md b/gephi-desktop/docs/Plugins/Preview_renderer.md deleted file mode 100644 index 26bd1fc..0000000 --- a/gephi-desktop/docs/Plugins/Preview_renderer.md +++ /dev/null @@ -1,289 +0,0 @@ ---- -id: Preview_renderer -title: Preview renderer -sidebar_position: 11 ---- - -## Introduction - -Preview is a highly customizable module and plug-ins can implement new renderers to display additional elements on screen, for instance hulls for groups. It's also possible to overwrite existing renderers and replace node or edge aspect. - -Create a new plugin module, that we will call **MyRenderer**, you can start this tutorial. - -**One can find renderers examples in the [PreviewPlugin](https://github.com/gephi/gephi/tree/master/modules/PreviewPlugin) module.** - -### How renderers work - -Renderers describe how a particular item is rendered and has the code to dray on a rendering target (Java2D, SVG or PDF). Items are for example the node or edges of the graph and are given to renderers to be drawn. Each item (e.g. node, edge) should have its renderer. - -Rendering is a four-steps process: - -1. First the `preProcess()` method is called on all renderers to let them initialize additional attributes for their items. The best example is the edge renderer which will initialize the source and target position in the `EdgeItem` object during this phase. In general the `preProcess()` method is the best for complex algorithms or gathering data from other items. Note that the `preProcess()` method is called only once per refresh, unlike `render()` which is called many times. -2. The `isRendererForitem()` is then used to determine which renderer should be used to render an item. The method provides access to the preview properties. For instance, if the properties says the edge display is disabled, the edge renderer should return false for every item. Note that nothing avoids several renderer to returns true for the same item. -3. The `render()` method is finally called for every item which the renderer returned `true` at `isRendererForitem()`. It receives the properties and the render target. It uses the item attributes and properties to determine item aspects and the render target to obtain the canvas. -4. Finally, the `postProcess()` method is called once for each renderer. It can be used to finalize the rendering, for instance to add legends or other global elements. - -If you want to create your own `Item` look at [[HowTo add a preview item]] - -## Create a new Renderer - -### Set Dependencies - -Add `preview-api` and `org-openide-util-lookup` modules as dependencies for your plugin module. See [[How To Set Module Dependencies]]. - -### Create new Renderer - -Create a new renderer **`MyRenderer`** class, which implements `Renderer`. - -Add `@ServiceProvider` annotation to your renderer class, so it is detected by the system. - -Here is how it should look like: - -```java -@ServiceProvider(service = Renderer.class) -public class MyRenderer implements Renderer { - - public String getDisplayName(){ - //return user friendly name for the renderer - } - - public void preProcess(PreviewModel previewModel) { - //TODO - } - - public void render(Item item, RenderTarget target, PreviewProperties properties) { - //TODO - } - - public void postProcess(PreviewModel previewModel, RenderTarget target, PreviewProperties properties) { - //TODO - } - - public PreviewProperty[] getProperties() { - //TODO - } - - public boolean isRendererForitem(Item item, PreviewProperties properties) { - //TODO - } - - public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { - //TODO - } - - public CanvasSize getCanvasSize(Item item, PreviewProperties properties) { - //TODO - } - -} -``` - -### Implement the `isRendererForItem` - -Each item returns a different value for its `getType()` method so it's easy to know if the item is a node, an edge or a label. - -The method also receives the current properties and can query values. - -Here is the code from the edge arrow renderer that only works when items are non-directed edges: - -```java -public boolean isRendererForitem(Item item, PreviewProperties properties) { - return item.getType().equals(Item.EDGE) && properties.getBooleanValue(PreviewProperty.DIRECTED) - && (Boolean) item.getData(EdgeItem.DIRECTED); -} -``` - -### Implement `getProperties` - -You can add your own properties attached to the renderer. Typically each renderer has its own properties. For instance the node renderer has border size or color as properties. Once defined a property will be shawn to the user who can change its value. - -Properties have a identifier, a display name, a description and a type. It's important to have a unique identifier to each property. Be sure to choose something not already taken. - -Properties are displayed in categories. You can either set an existing category or define a new one. Existing categories are `PreviewProperty.CATEGORY_NODES`, `PreviewProperty.CATEGORY_EDGES`, `PreviewProperty.CATEGORY_NODE_LABELS`, `PreviewProperty.CATEGORY_EDGE_LABELS` and `PreviewProperty.CATEGORY_EDGE_ARROWS`. - -Here is how to create a property `"Border width"`: - -```java -public PreviewProperty[] getProperties() { - return new PreviewProperty[]{ - PreviewProperty.createProperty(this, "border_width", Float.class, - "Border width", - "", - PreviewProperty.CATEGORY_NODES).setValue(1f)}; -} -``` - -Properties should have a default value. It is set at the creation of the property simply by calling `setValue()`. - -### Implement render - -The render method receives an item and draw it to a render target. There is three possible render targets: - --- [Processing](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/preview/api/G2DTarget.html) --- [SVG](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/preview/api/SVGTarget.html) --- [PDF](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/preview/api/PDFTarget.html) - -Renderers should implement the drawing routines for the three targets. One might ask why the same code has to be duplicated in three different ways. Unfortunately there is no unified drawing toolkit flexible and efficient enough to support this task at this point. The good news is that renderers have total control on what is drawn. It's verbose but flexible. - -When the target is Java2D, renderers obtain the `G2DTarget` object. For the SVG target, renderers obtain Batik's [Document](http://xmlgraphics.apache.org/batik/using/dom-api.html) instance. As the PDF target rely on the PDFBox library renderers obtain the [PDPageContentStream](https://pdfbox.apache.org/docs/2.0.8/javadocs/org/apache/pdfbox/pdmodel/PDPageContentStream.html) object. - -Example how to handle the three targets in render: - -```java -public void render(Item item, RenderTarget target, PreviewProperties properties) { - if (target instanceof G2DTarget) { - renderG2D(item, (G2DTarget) target, properties); - } else if (target instanceof SVGTarget) { - renderSVG(item, (SVGTarget) target, properties); - } else if (target instanceof PDFTarget) { - renderPDF(item, (PDFTarget) target, properties); - } -} - -public void renderG2D(Item item, G2DTarget target, PreviewProperties properties) { - Graphics2D graphics = target.getGraphics(); - ... -} - -public void renderPDF(Item item, PDFTarget target, PreviewProperties properties) { - PDPageContentStream cb = target.getContentStream(); - ... -} - -public void renderSVG(Item item, SVGTarget target, PreviewProperties properties) { - Element elem = target.createElement("circle"); - ... - target.getTopElement("nodes").appendChild(elem); -} -``` - -Look at renderers examples in the [PreviewPlugin](https://github.com/gephi/gephi/tree/master/modules/PreviewPlugin) module. - -## Overwrite an existing renderer - -The default renderers can be overridden or extended. -Extend or replace an existing renderer - -To extend or completely replace a default Renderer by your own implementation, create a new Renderer and set the annotation like below. In addition, add `preview-plugin` module as a dependency. - -`@ServiceProvider(service=Renderer.class, position=XXX) public class MyRenderer extends NodeRenderer` - -Being XXX the new position of the renderer Then you can reuse parts of the base class or just override them. - -Default renderers are: - -- `org.gephi.preview.plugin.renderers.NodeRenderer` -- `org.gephi.preview.plugin.renderers.EdgeRenderer` -- `org.gephi.preview.plugin.renderers.NodeLabelRenderer` -- `org.gephi.preview.plugin.renderers.EdgeLabelRenderer` -- `org.gephi.preview.plugin.renderers.ArrowRenderer` - -## Appendix - -### Custom properties - -Properties are usually default Java primitives like `Float` or `Color`. Custom property types can be used if a valid property editor is defined. Property editors define how a property value should be serialized and provide a custom UI to let the user modify the value. For instance to define a new property type `NumberRange` one could create a UI with two text fields to enter number ranges. - -Create the new type class and then create a new property editor: - -```java -public class NumberRangePropertyEditor extends java.beans.PropertyEditorSupport { - @Override - public Component getCustomEditor() { - //TODO returns custom JPanel - } - - @Override - public String getAsText() { - //TODO returns the value as string - } - - @Override - public void setAsText(String text) { - //TODO set value from the text - } - - @Override - public boolean supportsCustomEditor() { - return true; - } -} -``` - -One can find property editors examples in the [DesktopPreview](https://github.com/gephi/gephi/tree/master/modules/DesktopPreview) module. - -### Complex pre-process - -In each renderer the `preProcess()` method allows to access all preview data and execute complex algorithms. - -### How to read all items of a particular type - -Simply by querying the preview model: - -```java -Item[] edgeItems = previewModel.getItems(Item.EDGE); -``` - -### How to use constants and data generated in pre-process - -Renderers should remain **stateless**. That means one shouldn't define any variable or fields in the renderer class itself. Instead all data can be put in the property system. - -Here is an example how to calculate the min and max edge weight in the `preProcess()` and use it in `render()`: - -```java -public void preProcess(PreviewModel previewModel) { - PreviewProperties properties = previewModel.getProperties(); - Item[] edgeItems = previewModel.getItems(Item.EDGE); - - for (Item edge : edgeItems) { - minWeight = Math.min(minWeight, (Float) edge.getData(EdgeItem.WEIGHT)); - maxWeight = Math.max(maxWeight, (Float) edge.getData(EdgeItem.WEIGHT)); - } - properties.putValue("weight.min", minWeight); - properties.putValue("weight.max", maxWeight); -} - -public void render(Item item, RenderTarget target, PreviewProperties properties) { - float minWeight = properties.getFloatValue("weight.min"); - float maxWeight = properties.getFloatValue("weight.max"); - ... -} -``` - -For additional data generated per item, simply call `item.setData()`. - -### Default item data - -**Node** -- x (float) -- y (float) -- size (float) -- color (color) - -**Edge** -- weight (float) -- directed (boolean) -- mutual (boolean) -- self_loop (boolean) -- meta_edge (boolean) -- color (color) - -**Node Label** -- label (string) -- color (color) -- size (float) -- width (float) -- height (float) -- visible (boolean) - -**Edge Labels** -- label (string) -- color (color) -- size (float) -- width (float) -- height (float) -- visible (boolean) - -**Edges have additional data set by the default edge renderer:** -- source (nodeitem) -- target (nodeitem) diff --git a/gephi-desktop/docs/Plugins/Statistics.md b/gephi-desktop/docs/Plugins/Statistics.md deleted file mode 100644 index 09dbe78..0000000 --- a/gephi-desktop/docs/Plugins/Statistics.md +++ /dev/null @@ -1,204 +0,0 @@ ---- -id: Statistics -title: Statistics -sidebar_position: 4 ---- - -## Create a new Metric - -This HowTo shows how to create a new statistic/metric algorithm in Gephi. - -Create a new plugin module, that we will call *MyMetric*. - -### Set Dependencies - -Add `statistics-api`, `graph-api` modules as dependencies for your plugin module *MyMetric*. See [[How To Set Module Dependencies]]. Also add `utils-longtask` and `org-openide-util-lookup`, which will be used. - -### Create StatisticsBuilder - -* Statistics Builder provides information about the metric algorithm and is responsible for creating your Statistics algorithm instances. All metric algorithms should have their own builder. -* Create a new builder class, for instance `MyMetricBuilder` that implements [`StatisticsBuilder`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/statistics/spi/StatisticsBuilder.html). -* Fill `getName()` method by returning a display name like *My Metric*. Leaves other methods untouched for the moment. -* Add `@ServiceProvider` annotation to your builder class. Add the following line before *MyMetricBuilder* class definition, as shown below: - -```java -@ServiceProvider(service = StatisticsBuilder.class) -public class MyMetricBuilder implements StatisticsBuilder { -... -``` - -### Create Statistics - -Create a new class that implements [`Statistics`](https://javadoc.io/doc/org.gephi/gephi/latest/org/gephi/statistics/spi/Statistics.html) and name it *MyMetric*. This is the place the algorithm belongs. -Locate the `execute()` method, you will add your code here. The `getReport()` method should return plain text or HTML text that describe the algorithm execution. Create a new field - -`` private String report = "";`` - -and return report in `getReport()`. That done, go back to `StatisticsBuilder` and fill remaining methods like above: - -```java -public Statistics getStatistics() { - return new MyMetric(); -} - -public Class<? extends Statistics> getStatisticsClass() { - return MyMetric.class; -} -``` - -Details about how to use `GraphModel` in the next section. - -### Set LongTask - -To let your algorithm task be cancelled and its progress watched, implement `LongTask` interface on *MyMetric*. -Add two fields: - -```java -private boolean cancel = false; -private ProgressTicket progressTicket; -``` - -and implement new methods: - -```java -public boolean cancel() { - cancel = true; - return true; -} - -public void setProgressTicket(ProgressTicket progressTicket) { - this.progressTicket = progressTicket; -} -``` - -Use the cancel field to terminate your algorithm execution properly and return from `execute()`. -### Create StatisticsUI - -Create a new class that implements `StatisticsUI` and name it *MyMetricUI*. The user interfaces is defined here and allows to be automatically added to the `Statistics` module in Gephi. -Add `@ServiceProvider` annotation to your UI class. Add the following line before *MyMetricUI* class definition, as shown below: - -```java -@ServiceProvider(service = StatisticsUI.class) -public class MyMetricUI implements StatisticsUI{ -... -``` - -First implement description method: - -```java -public String getDisplayName() { - return "My Metric"; -} - -public String getCategory() { - return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; -} - -public int getPosition() { - return 800; -} - - public Class<? extends Statistics> getStatisticsClass() { - return MyMetric.class; - } -``` - -The category is just where you want your metric to be displayed: **NODE**, **EDGE** or **NETWORK**. The position control the order the metric front-end are displayed. Returns a value between 1 and 1000, that indicates the position. Less means upper. - -Now create a new JPanel for your metric settings panel. Name it *MyMetricPanel*. Add setters and getters for all properties users can edit. Let's say the panel gives the choice on the graph type and has `isDirected()` and `setDirected()` methods. - -Now the `setup()` and `unsetup()` are filled. It follow the injection pattern, an instance of *MyMetric* is pushed to let the UI control it. - -First add fields to store the current metric: - -```java -private MyMetricPanel panel; -private MyMetric myMetric; -``` - -and fill `getSettingsPanel()`, `setup()` and `unsetup()`: - -```java -public JPanel getSettingsPanel() { - panel = new MyMetricPanel(); - return panel; -} - -public void setup(Statistics statistics) { - this.myMetric = (MyMetric) statistics; - if(panel!=null) { - panel.setDirected(myMetric.isDirected()); - } -} - -public void unsetup() { - if(panel!=null) { - myMetric.setDirected(panel.isDirected()); - } - panel = null; -} -``` - -The final step is the `getValue()`, which returns the result value on the front-end. If your metric doesn't have a single result value, return `null`. - -## Implementation help - -The `execute()` method gives both `GraphModel` for getting graph structure and AttributeModel to write results in new attribute columns. - -### Use Progress - -If you know how many steps your algorithm is doing, for instance if your algorithm just reads nodes: - -``Progress.start(progressTicket, graph.getNodeCount());`` - -and `Progress.progress(progressTicket)` within the loop. - -### Lock your algorithm - -It's preferable to execute your algorithm in a read lock, in order no other thread can modify the graph while execution. Never return `execute()` with a lock open. - -```java -graph.readLock(); -try{ - //Your algorithm - graph.readUnlock(); -} finally { - graph.readUnlock(); -} -``` - -### Write results for each node/edge - -It's easy, you create a new column and set row's value for each node. If you want to write an in-degree column, in `execute()`: - -```java -Table nodeTable = graphModel.getNodeTable(); -Column col = nodeTable.addColumn("my_column", "My Column", Integer.class); - -for (Node n : graph.getNodes()) { - n.setAttribute(col, ...); //Your value here -} -``` - -### Sample - -```java -public void execute(GraphModel graphModel, AttributeModel attributeModel) { - report += "Algorithm started "; - Graph graph = graphModel.getGraphVisible(); - graph.readLock(); - - try { - Progress.start(progressTicket, graph.getNodeCount()); - - for (Node n : graph.getNodes()) { - //do something - Progress.progress(progressTicket); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - graph.readUnlock(); - } -} -``` \ No newline at end of file diff --git a/gephi-desktop/docs/Plugins/_category_.json b/gephi-desktop/docs/Plugins/_category_.json deleted file mode 100644 index f9232b6..0000000 --- a/gephi-desktop/docs/Plugins/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Plugin Development", - "position": 4 -} diff --git a/gephi-desktop/docs/Plugins/index.md b/gephi-desktop/docs/Plugins/index.md deleted file mode 100644 index 6299172..0000000 --- a/gephi-desktop/docs/Plugins/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -id: index -title: Introduction -sidebar_position: 1 ---- - -This section is designed to help developers write [Gephi Plugins](https://gephi.org/plugins/). - -Gephi can be extended in many ways and the major categories are Layout, Export, Import, Data Laboratory, Filter, Generator, Metric, Preview, Tool, and Appearance. - -A good way to start is to look at examples with the [bootcamp](https://github.com/gephi/gephi-plugins-bootcamp). Another way is to look at existing plugins source code, which is publicly available on GitHub: [Gephi Plugins on GitHub](https://github.com/gephi/gephi-plugins/tree/master-forge/modules). - -![image](https://camo.githubusercontent.com/9cb37e90a1eff225eaabe50a80adece6dad749798b8a1c7cfbe55d597c9adc0b/687474703a2f2f67657068692e6f72672f696d616765732f706c7567696e735f726962626f6e2e706e67) - -Official documentation about plugin development can be found directly on Github: [Gephi Plugin Development](https://github.com/gephi/gephi-plugins). We've also made a custom [Maven plugin](https://github.com/gephi/gephi-maven-plugin) to help get started and validate your plugin faster. \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Contributing.md b/gephi-desktop/docs/User_Manual/Contributing.md deleted file mode 100644 index a1f03c1..0000000 --- a/gephi-desktop/docs/User_Manual/Contributing.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -id: Contributing -title: How To Contribute -sidebar_position: 10 ---- - -We welcome contributors to enhance this documentation. - -Contributing to the documentation requires to write markdown documents and posting them on this github repository. - -To fix/edit existing page you can use the **edit this page** button which appears on all pages footers. - -To propose new pages, feel free to open a Github Pull Request. - -If you're interested but need help please contact us on the [Gephi community matrix chatroom](https://matrix.to/#/!XKyOZNGdXvoRWJbPCL:matrix.org). Actually before any consistent contribution (such as creating new pages), it would be better to get in touch with the Gephi Team. - -Thank you in advance for your help! - diff --git a/gephi-desktop/docs/User_Manual/Datasets.md b/gephi-desktop/docs/User_Manual/Datasets.md deleted file mode 100644 index f2a0a17..0000000 --- a/gephi-desktop/docs/User_Manual/Datasets.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -id: Datasets -title: Datasets -sidebar_position: 4 ---- - -The Gephi sample datasets below are available in various formats (GEXF, GDF, GML, NET, GraphML, DL, DOT). Feel free to add new datasets, but be sure to cite the original authors. - -**Supported graph formats are described [here](/desktop/User_Manual/Import).** - -Gephi can open zipped files directly. - -## Web and Internet - -- [GEXF file](/datasets/eurosis.gexf.zip). **EuroSiS web mapping study**: Mapping interactions between Science in Society actors on the Web of 12 European countries. Original report and data can be found [here](http://www.webatlas.fr/exhibition/eurosis/). -- [GML file](/datasets/internet_routers-22july06.gml.zip). **Internet**: a symmetrized snapshot of the structure of the Internet at the level of autonomous systems, reconstructed from BGP tables posted by the [University of Oregon Route Views Project](http://routeviews.org/). This snapshot was created by Mark Newman on July 22, 2006 and was not previously published. - -## Social networks - -- [GML file](/datasets/lesmiserables.gml.zip). **Les Miserables**: coappearance weighted network of characters in the novel Les Miserables. D. E. Knuth, The Stanford GraphBase: A Platform for Combinatorial Computing, Addison-Wesley, Reading, MA (1993). -- [GEXF file](/datasets/ht2009_15min.gexf.gz). **Hypertext 2009 dynamic contact network**: contact network during the Hypertext 2009 conference. Source: [Sociopatterns.org](http://www.sociopatterns.org/datasets/hypertext-2009-dynamic-contact-network/). -- [GEXF file](https://zenodo.org/record/4612153#.YFIuQi1Xaw4). **CLASS OF 1880/81**: friendship network of a German boys' school class from 1880/1881. It's based on the probably first ever primarily collected social network dataset, assembled by the primary school teacher Johannes Delitsch. The data was reanalyzed and compiled for the article: [Heidler, R., Gamper, M., Herz, A., Eßer, F. (2014): Relationship patterns in the 19th century: The friendship network in a German boys' school class from 1880 to 1881 revisited. Social Networks 13: 1--13.](http://www.sciencedirect.com/science/article/pii/S0378873313000865). -- [GML file](/datasets/karate.gml.zip). **Zachary's karate club**: social network of friendships between 34 members of a karate club at a US university in the 1970s. W. W. Zachary, An information flow model for conflict and fission in small groups, Journal of Anthropological Research 33, 452-473 (1977). -- [GML file](/datasets/netscience.gml.zip). **Coauthorships in network science**: coauthorship network of scientists working on network theory and experiment, as compiled by M. Newman in May 2006. A figure depicting the largest component of this network can be found here. M. E. J. Newman, Phys. Rev. E 74, 036104 (2006). -- [GEXF file](/datasets/cpan-authors.gexf.zip). **CPAN authors**: CPAN Explorer is a visualization project aiming at analyzing the relationships between the developers and the packages of the Perl language, known as the CPAN community. This snapshot was created by Linkfluence in July 2009. This file contains the network of developers, linked when they use the same Perl module. Original data can be found [here](http://cpan-explorer.org/). -- [GEXF file](/datasets/cpan-distributions.gexf.zip). **CPAN distributions**: CPAN Explorer is a visualization project aiming at analyzing the relationships between the developers and the packages of the Perl language, known as the CPAN community. This snapshot was created by Linkfluence in July 2009. This file contains the network of Perl modules dependencies. Orginal data can be found [here](http://cpan-explorer.org/). -- [NET file](/datasets/jazz.net.zip). **Jazz musicians network**: List of edges of the network of Jazz musicians. P.Gleiser and L. Danon , Adv. Complex Syst.6, 565 (2003). -- [DL file](/datasets/OClinks_w.dl.zip). **Online Social Network** 1899 nodes - Opsahl, T., Panzarasa, P., 2009. Clustering in weighted networks. Social Networks 31 (2), 155-163 -- [GEPHI file](/datasets/hero-social-network.gephi). **The Marvel Social Network** Networks of super heroes, constructed by Cesc Rosselló, Ricardo Alberich, and Joe Miro from the University of the Balearic Islands. Collected by [Infochimps](http://www.infochimps.com/datasets/marvel-universe-social-graph) and transformed & enhanced by Kai Chang. -- [GDF file](/datasets/comic-hero-network.gdf.zip). **Comic and Hero Network** Same data as above, but this includes the comics the heroes appear in. -- [GEXF file](http://www.sociopatterns.org/datasets/primary-school-cumulative-networks/). **Contact networks** in a primary school, SocioPatterns team, 2011. -- [GEXF file](https://github.com/mbingenheimer/ChineseBuddhism_SNA). **Historical Social Network of Chinese Buddhism 漢傳佛教歷史社會網絡** 17,000+ persons, 25,000+ connections. - -## Biological networks - -- [GEXF](/datasets/diseasome.gexf.zip). **Diseasome**: A network of disorders and disease genes linked by known disorder–gene associations, indicating the common genetic origin of many diseases. Genes associated with similar disorders show both higher likelihood of physical interactions between their products and higher expression profiling similarity for their transcripts, supporting the existence of distinct disease-specific functional modules. The original dataset can be found here: The Human Disease Network, Goh K-I, Cusick ME, Valle D, Childs B, Vidal M, Barabási A-L (2007), Proc Natl Acad Sci USA 104:8685-8690 -- [GEXF](/datasets/celegans.gexf.zip). **C. Elegans neural network**: A directed, weighted network representing the neural network of C. Elegans. Data compiled by D. Watts and S. Strogatz and made available on the web here. Please cite D. J. Watts and S. H. Strogatz, Nature 393, 440-442 (1998). Original experimental data taken from J. G. White, E. Southgate, J. N. Thompson, and S. Brenner, Phil. Trans. R. Soc. London 314, 1-340 (1986). -- [GEXF](/datasets/yeast.gexf.zip). **Yeast**: Protein-Protein interaction network in yeast. Original data can be found [here](http://vlado.fmf.uni-lj.si/pub/networks/data/bio/Yeast/Yeast.htm). - -## Infrastructure networks - -- [GML](/datasets/power.gml.zip). **Power grid**: An undirected, unweighted network representing the topology of the Western States Power Grid of the United States. Data compiled by D. Watts and S. Strogatz and made available on the web here. Please cite D. J. Watts and S. H. Strogatz, Nature 393, 440-442 (1998). -- [GRAPHML](/datasets/airlines.graphml.zip). **Airlines**: unknown source. -- [NET](/datasets/us-air97.net.zip). **US Air97**: North American Transportation Atlas Data (NORTAD). Original data can be found [here](http://vlado.fmf.uni-lj.si/pub/networks/pajek/data/gphs.htm). - -## Other networks - -- [GEXF](/datasets/codeminer.gexf.zip). **Java code**: Source code structure of a Java program, by S.Heymann & J.Palmier, 2008. -- [GEXF](/datasets/photoviz-dynamic.gexf.zip). **Dynamic Java code**: Dynamic source code structure of a Java program by evolution of commits on the SVN, by S.Heymann & J.Bilcke, 2008. -- [GML](/datasets/word_adjacencies.gml.zip). **Word adjacencies**: adjacency network of common adjectives and nouns in the novel David Copperfield by Charles Dickens. Please cite M. E. J. Newman, Phys. Rev. E 74, 036104 (2006). -- [NET](/datasets/wordnet3.net.zip). **Wordnet English dictionary**: unknown source. -- [DOT](/datasets/hex.dot.zip). **Abstract mesh**: 331 nodes. - -## Sources - -Some of the above datasets are from: -- [Mark Newman](http://www-personal.umich.edu/~mejn/netdata/) -- Alexandre Arenas -- Albert-László Barabási -- Vladimir Batagelj and Andrej Mrvar -- [Tore Opsahl](http://toreopsahl.com/datasets/) - -## Other network data repositories -- [SNAP data](http://snap.stanford.edu/data) -- [UC Irvine Network Data Repository](http://networkdata.ics.uci.edu/) -- [GephiDatasets](https://github.com/Ifeanyi55/GephiDatasets) diff --git a/gephi-desktop/docs/User_Manual/Glossary.md b/gephi-desktop/docs/User_Manual/Glossary.md deleted file mode 100644 index a5b61fa..0000000 --- a/gephi-desktop/docs/User_Manual/Glossary.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: Glossary -title: Glossary -sidebar_position: 2 ---- - -**Appearance** -The way to change the visual aspect of nodes and edges. - -**AutoUpdate** -The application can update itself. - -**Attribute** -Data associated to a node or an edge. Could be text, numbers, booleans and more. - -**Exporter** -Module that exports in a particular file format. - -**Generator** -Algorithm that generates a network. - -**Graph file** -File format that describes a graph structure: list of nodes, list of edges and attributes. Example: GEXF. - -**Importer** -Module that imports a particular file format. - -**Ranking** -Sorting nodes or edges by an attribute's value. - -**Partition** -Visual clustering. Give colors to categories. - -**Preview** -Display the graph exactly as it is exported. - -**Project** -A Gephi session, which contains all workspaces and data. - -**Tool** -Way to interact with the displayed graph. - -**Workspace** -A whole environment for exploring one graph. diff --git a/gephi-desktop/docs/User_Manual/Import/CSV_Format.md b/gephi-desktop/docs/User_Manual/Import/CSV_Format.md deleted file mode 100644 index d2c089a..0000000 --- a/gephi-desktop/docs/User_Manual/Import/CSV_Format.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -id: CSV_Format -title: CSV -sidebar_position: 5 ---- - -## Introduction - -This manual shows what steps are necessary to import CSV files into Gephi with data laboratory, which will expect that each row of the file is a node or an edge. - -Note that the import can be done at any moment, the workspace does not need to be empty. You should know some general aspects of the import process: - - -- You may choose which columns to import. The only exceptions are 'Source' and 'Target' for edges tables, which are mandatory and can't be deselected -- If a column title already exists in the workspace you will be able to use it but the data type of the column can't be changed, and imported data will be parsed to fit the existing column type -- Data for each row and column will be parsed to the given/existing column data type when possible. If this is not possible for a given cell, then it will be set to a null value -- You can choose what table to import the rows to (nodes or edges), but the behaviour and requirements are different. Be aware of what options you have selected before executing the import process - -Next we'll learn how to use the import wizard to customize the data to our needs based on the options available. - -## Launching the import CSV wizard and first step - -Start by clicking 'Import CSV' button in Data Laboratory as shown in the picture - -![launch-import-csv-wizard](/docs/User_Manual/Import_CSV_Data/00_launch-import-csv-wizard.png) - -Then the import wizard will open and you are presented with some generic, table independent options. - -![import-csv-step1](/docs/User_Manual/Import_CSV_Data/01_import-csv-step1.png) - -In this step you will indicate the format of the CSV file and can preview the resulting table. - -- First specify a CSV file that is not empty -- Then choose the values separator from some common options and the encoding/charset of the file -- Finally select the table to import the rows and columns of the file. Edges table files require, at minimum, columns labeled 'Source' and 'Target' (which can be case insensitive) - -## Last step - Choosing columns details and table specific options - -This final step offers some common options and behaviour descriptions for both nodes tables or edges tables: - -- You can mark what columns to use and select their type when they don't exist yet -- If no node/edge Id column is provided or it is empty for some row, an automatic id will be assigned - -### Importing to nodes table - -When importing to nodes table you can also indicate if you want to update a node's data instead of creating a new node when a node with that id already exists. - -![import-csv-step2-nodes](/docs/User_Manual/Import_CSV_Data/02_import-csv-step2-nodes.png) - -### Importing to edges table - -In case of importing to edges table, the behaviour is a bit different: - -- 'Source' and 'Target' node Ids are mandatory for all rows -- Edge type is optional and its default is 'Directed' - -![import-csv-step2-edges](/docs/User_Manual/Import_CSV_Data/03_import-csv-step2-edges.png) \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/GDF_File_Format.md b/gephi-desktop/docs/User_Manual/Import/GDF_File_Format.md deleted file mode 100644 index 4bd00c8..0000000 --- a/gephi-desktop/docs/User_Manual/Import/GDF_File_Format.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -id: GDF_File_Format -title: GDF -sidebar_position: 2 ---- - -GDF (Graph Description Format) is the file format used by GUESS and supported by Gephi's importer. It is a simple, CSV-like plain text format divided into two sections: nodes and edges. Each section starts with a header line that defines column names and types; subsequent lines list elements with values separated by commas. - -## Structure - -- The node section header begins with `nodedef>` followed by column definitions such as `name VARCHAR,label VARCHAR`. -- The edge section header begins with `edgedef>` followed by column definitions such as `node1 VARCHAR,node2 VARCHAR,weight DOUBLE`. -- Values are comma-separated and must respect the order declared in the header. - -## Basic example - -```text -nodedef>name VARCHAR,label VARCHAR -s1,Site number 1 -s2,Site number 2 -s3,Site number 3 -edgedef>node1 VARCHAR,node2 VARCHAR -s1,s2 -s2,s3 -s3,s2 -s3,s1 -``` - -## Example with edge weight - -```text -nodedef>name VARCHAR,label VARCHAR -s1,Site number 1 -s2,Site number 2 -s3,Site number 3 -edgedef>node1 VARCHAR,node2 VARCHAR, weight DOUBLE -s1,s2,1.2341 -s2,s3,0.453 -s3,s2,2.34 -s3,s1,0.871 -``` - -## Various attributes example - -You can add as many node and edge attributes as needed. Attributes can be used by Gephi (for example in Filters). - -```text -nodedef>name VARCHAR,label VARCHAR,class VARCHAR, visible BOOLEAN,labelvisible BOOLEAN,width DOUBLE,height DOUBLE,x DOUBLE,y DOUBLE,color VARCHAR -s1,SiteA,blog,true,true,10.0,10.0,-52.11296,-25.921143,'114,116,177' -s2,SiteB,forum,true,true,10.986123,10.986123,-20.114172,25.740356,'219,116,251' -s3,SiteC,webpage,true,true,10.986123,10.986123,8.598924,-26.867584,'192,208,223' -edgedef>node1 VARCHAR,node2 VARCHAR,directed BOOLEAN,color VARCHAR -s1,s2,true,'114,116,177' -s2,s3,true,'219,116,251' -s3,s2,true,'192,208,223' -s3,s1,true,'192,208,223' -``` - -## Working with text values - -If your text contains commas or quotes, wrap the whole value in single quotes to avoid breaking the column separation. - -```text -nodedef>name VARCHAR,label VARCHAR,class VARCHAR, visible BOOLEAN,labelvisible BOOLEAN,width DOUBLE,height DOUBLE,x DOUBLE,y DOUBLE,color VARCHAR -s1,'Hello "world" !',type1,true,true,10.0,10.0,-52.11296,-25.921143,'114,116,177' -s2,'Well, this is',type1,true,true,10.986123,10.986123,-20.114172,25.740356,'219,116,251' -s3,'A correct 'GDF' file',type1,true,true,10.986123,10.986123,8.598924,-26.867584,'192,208,223' -edgedef>node1 VARCHAR,node2 VARCHAR,directed BOOLEAN,color VARCHAR -s1,s2,true,'114,116,177' -s2,s3,true,'219,116,251' -s3,s2,true,'192,208,223' -s3,s1,true,'192,208,223' -``` - -## Implementation details - -- **Missing values**: When a value is missing, keep the comma placeholder. Do not omit the comma. - -```text -nodedef>name VARCHAR,label VARCHAR,att1 VARCHAR,att2 VARCHAR,att3 VARCHAR,att4 BOOLEAN -s1,SiteA,blabla,blabla,blabla,true -s2,SiteB, , , ,false -s3,SiteC,blabla, , ,true -``` - -- **Colors**: Colors are stored as a `VARCHAR` with three comma-separated integer components for red, green and blue (0–255). Example: `'114,116,177'`. - -- **Position & size**: Node positions are X and Y (and optional Z) as `DOUBLE` columns. Node size can be specified with a `width DOUBLE` attribute. - -## Common problems - -- If special characters appear as boxes, ensure the file is encoded as UTF-8 (with BOM if necessary). -- If you get an `ArrayIndexOutOfBoundsException: 1`, check that every node line has the expected number of values (e.g., a missing label can trigger this). \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/GEXF_File_Format.md b/gephi-desktop/docs/User_Manual/Import/GEXF_File_Format.md deleted file mode 100644 index 1ebcdc1..0000000 --- a/gephi-desktop/docs/User_Manual/Import/GEXF_File_Format.md +++ /dev/null @@ -1,221 +0,0 @@ ---- -id: GEXF_File_Format -title: GEXF -sidebar_position: 1 ---- - -GEXF (Graph Exchange XML Format) is an XML-based format for exchanging graph structures, attributes and visualization metadata. It supports static and dynamic graphs, typed attributes (including list types), hierarchical structures and a visualization (viz) module for styling nodes and edges. The official reference and examples are available at [https://gexf.net](https://gexf.net). - -## Minimal (Hello world) example - -A minimal static directed graph with 2 nodes and 1 edge: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" version="1.3"> - <graph mode="static" defaultedgetype="directed"> - <nodes> - <node id="0" label="Hello" /> - <node id="1" label="World" /> - </nodes> - <edges> - <edge source="0" target="1" /> - </edges> - </graph> -</gexf> -``` - ---- - -## Header and metadata - -Typical recommended header that includes XML Schema references and `meta` data: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://gexf.net/1.3 - http://gexf.net/1.3/gexf.xsd" - version="1.3"> - <meta lastmodifieddate="2009-03-20"> - <creator>Gephi.org</creator> - <description>A sample GEXF file</description> - </meta> - ... -</gexf> -``` - -The `meta` element is useful to store creator, description, keywords and last-modified date. Including the schema location is recommended for validation. - ---- - -## Attributes and associated data - -GEXF allows declaring typed attributes for nodes and edges inside `attributes` elements. Supported primitive types follow XSD (string, integer, float, double, boolean, date, anyURI) and additional types (liststring, listinteger, bigdecimal, etc.) are defined by the spec. - -Attributes declaration example and node attribute usage: - -```xml -<graph defaultedgetype="directed"> - <attributes class="node"> - <attribute id="0" title="url" type="string"/> - <attribute id="1" title="indegree" type="float"/> - <attribute id="2" title="frog" type="boolean"> - <default>true</default> - </attribute> - </attributes> - - <nodes> - <node id="0" label="Gephi"> - <attvalues> - <attvalue for="0" value="http://gephi.org"/> - <attvalue for="1" value="1"/> - </attvalues> - </node> - <node id="1" label="Webatlas"> - <attvalues> - <attvalue for="0" value="http://webatlas.fr"/> - <attvalue for="1" value="2"/> - </attvalues> - </node> - </nodes> -</graph> -``` - -### List attributes - -GEXF supports list types such as `liststring` and `listint`. List values are written as comma-separated values inside brackets, e.g. `[foo, bar]`. - ---- - -## Topology: nodes, edges, parallel edges - -- Nodes: declared with `<node id="..." label="..."/>` where `id` must be unique. -- Edges: declared with `<edge source="..." target="..."/>` and optional attributes such as `id`, `weight` (double), `type` (directed/undirected/mutual). -- Parallel edges (multigraphs): supported via an additional `kind` attribute that distinguishes parallel edges; `source-target-kind` must be unique. - -Example of parallel edges: - -```xml -<edge source="0" target="1" weight="1.0" kind="friend"/> -<edge source="0" target="1" weight="1.0" kind="neighbor"/> -``` - ---- - -## Dynamics (graphs over time) - -GEXF supports dynamic graphs via the `mode="dynamic"` attribute on `<graph>`. Time can be represented with intervals (default) or timestamps (use `timerepresentation="timestamp"`). The `timeformat` attribute controls encoding (e.g. `double`, `date`, `dateTime`). - -A dynamic graph example: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://gexf.net/1.3 - http://gexf.net/1.3/gexf.xsd" - version="1.3"> - <graph mode="dynamic" defaultedgetype="directed" timeformat="date"> - <attributes class="node" mode="static"> - <attribute id="0" title="url" type="string"/> - <attribute id="1" title="frog" type="boolean"><default>true</default></attribute> - </attributes> - <attributes class="node" mode="dynamic"> - <attribute id="2" title="indegree" type="float"/> - </attributes> - - <nodes> - <node id="0" label="Gephi" start="2009-03-01"> - <attvalues> - <attvalue for="0" value="http://gephi.org"/> - <attvalue for="2" value="1"/> - </attvalues> - </node> - <node id="1" label="Webatlas"> - <attvalues> - <attvalue for="0" value="http://webatlas.fr"/> - <attvalue for="2" value="1" end="2009-03-01"/> - <attvalue for="2" value="2" start="2009-03-01" end="2009-03-10"/> - <attvalue for="2" value="1" start="2009-03-11"/> - </attvalues> - </node> - </nodes> - - <edges> - <edge source="0" target="1" start="2009-03-01"/> - <edge source="0" target="2" start="2009-03-01" end="2009-03-10"/> - </edges> - </graph> -</gexf> -``` - -### Spells and timestamps - -- Use `<spells>` with `<spell start="..." end="..."/>` to express multiple disjoint intervals for a node/edge. -- Alternatively use compact `timestamps` or `intervals` attributes (parser-dependent). -- Intervals are inclusive. `start`/`end` may be omitted to represent an unbounded side (infinite bound). - ---- - -## Visualization module (VIZ) - -The VIZ module extends GEXF with a `viz` namespace (`xmlns:viz="http://gexf.net/1.3/viz"`) and allows attaching color, position, size and shape metadata to nodes and edges. Gephi supports the VIZ module for styling. - -### Node viz example: - -```xml -<gexf xmlns="http://gexf.net/1.3" xmlns:viz="http://gexf.net/1.3/viz"> - <graph> - <nodes> - <node id="a" label="glossy"> - <viz:color r="239" g="173" b="66" a="0.6"/> - <viz:position x="15.783598" y="40.109245" z="0.0"/> - <viz:size value="2.0375757"/> - <viz:shape value="disc"/> - </node> - </nodes> - </graph> -</gexf> -``` - -### Edge viz example: - -```xml -<edge id="e1" source="n0" target="n1"> - <viz:color r="157" g="213" b="78"/> - <viz:thickness value="5.124"/> - <viz:shape value="solid"/> -</edge> -``` - -- Colors: RGBA (`r`,`g`,`b` integers 0–255; `a` float 0.0–1.0) or `hex="#RRGGBB"`. -- Position: `x`, `y`, `z` floats (Gephi treats `z` as optional height). -- Size/Thickness: non-negative floats. -- Shapes: nodes (`disc`, `square`, `triangle`, `diamond`, `image`), edges (`solid`, `dotted`, `dashed`, `double`). - -Note: Viz attributes are not dynamic in GEXF 1.3; to represent viz over time use slices or multiple graphs. - ---- - -## Best practices & parser advice - -- Always place `<edges>` after `<nodes>` to avoid parser errors. -- Use `count` attributes in `<nodes>` and `<edges>` to help parsers allocate memory. -- Prefer `liststring` for repeated textual attributes when applicable. -- Set `idtype` on `<graph>` to hint if IDs are integers or strings for optimization. -- Validate files using the GEXF XSD when possible. - ---- - -## MIME type - -When serving GEXF over HTTP use `Content-Type: application/gexf+xml`. - ---- - -## Resources & references - -- [Official GEXF website and primer](https://gexf.net) -- [GEXF specification & source code](https://github.com/gephi/gexf/) diff --git a/gephi-desktop/docs/User_Manual/Import/GML_File_Format.md b/gephi-desktop/docs/User_Manual/Import/GML_File_Format.md deleted file mode 100644 index a209d6a..0000000 --- a/gephi-desktop/docs/User_Manual/Import/GML_File_Format.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -id: GML_File_Format -title: GML -sidebar_position: 5 ---- - -GML (Graph Modeling Language) is a plain text file format with a simple, human-readable syntax used to represent graphs. Note that Gephi does not provide complete support for GML — some data structures are not fully supported. - - -## Basic example - -```text -graph -[ - node - [ - id A - ] - node - [ - id B - ] - node - [ - id C - ] - edge - [ - source B - target A - ] - edge - [ - source C - target A - ] -] -``` - -## Labels example - -```text -graph -[ - node - [ - id A - label "Node A" - ] - node - [ - id B - label "Node B" - ] - node - [ - id C - label "Node C" - ] - edge - [ - source B - target A - label "Edge B to A" - ] - edge - [ - source C - target A - label "Edge C to A" - ] -] -``` \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/GraphML_Format.md b/gephi-desktop/docs/User_Manual/Import/GraphML_Format.md deleted file mode 100644 index 9a2314e..0000000 --- a/gephi-desktop/docs/User_Manual/Import/GraphML_Format.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -id: GraphML_Format -title: GraphML -sidebar_position: 3 ---- - -[GraphML](http://graphml.graphdrawing.org/) is an XML structured format using the `.graphml` extension. It supports attributes for nodes and edges, hierarchical graphs and benefits from a flexible architecture. Gephi supports a limited set of this format (no sub-graphs and hyperedges). - -## File structure - -The file content is wrapped into a `graphml` element. Then attributes columns (i.e. titles) are defined in `key` elements and finally the network in the `graph` markup. - -Basic options can be set to set the graph element: -```xml -<graph edgedefault="directed"> -``` -or -```xml -<graph edgedefault="undirected"> -``` - -## Attributes definition - -Each attribute title is defined in a `key` element with an identifier, a name, a title, edge or node, and the type of data. The supported data types: - -- boolean -- int -- long -- float -- double -- string - -Inside the markup, a `default` element can set the default value for the attribute. Below is an example of definition of two attributres, one for nodes and one for edges. - -```xml -<key id="d0" for="node" attr.name="color" attr.type="string"> - <default>yellow</default> -</key> -<key id="d1" for="edge" attr.name="weight" attr.type="double"/> -``` - -Custom data can be added by other software. The example under represents graphical representations (i.e. shapes), but it is not supported by Gephi at all. Verify files namespace to ensure compatibility. - -```xml -<node id="n2"> - <data key="d0"> - <y:ShapeNode> - <y:NodeLabel visible="true" autoSizePolicy="content">n2</y:NodeLabel> - </y:ShapeNode> - </data> -</node> -``` - -## Attributes values - -Attributes values have to be set within the node element as the following example: - -```xml -<node id="n0"> - <data key="d0">green</data> -</node> -``` - -## Basic Sample - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<graphml xmlns="http://graphml.graphdrawing.org/xmlns" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns - http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"> - <graph id="G" edgedefault="undirected"> - <node id="n0"/> - <node id="n1"/> - <edge id="e1" source="n0" target="n1"/> - </graph> -</graphml> -``` - -## With one attribute example - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd"> - <key id="d0" for="node" attr.name="color" attr.type="string"> - <default>yellow</default> - </key> - <key id="d1" for="edge" attr.name="weight" attr.type="double"/> - <graph id="G" edgedefault="undirected"> - <node id="n0"> - <data key="d0">green</data> - </node> - <node id="n1"/> - <node id="n2"> - <data key="d0">blue</data> - </node> - <node id="n3"> - <data key="d0">red</data> - </node> - <node id="n4"/> - <node id="n5"> - <data key="d0">turquoise</data> - </node> - <edge id="e0" source="n0" target="n2"> - <data key="d1">1.0</data> - </edge> - <edge id="e1" source="n0" target="n1"> - <data key="d1">1.0</data> - </edge> - <edge id="e2" source="n1" target="n3"> - <data key="d1">2.0</data> - </edge> - <edge id="e3" source="n3" target="n2"/> - <edge id="e4" source="n2" target="n4"/> - <edge id="e5" source="n3" target="n5"/> - <edge id="e6" source="n5" target="n4"> - <data key="d1">1.1</data> - </edge> - </graph> -</graphml> -``` \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/GraphViz_DOT_Format.md b/gephi-desktop/docs/User_Manual/Import/GraphViz_DOT_Format.md deleted file mode 100644 index c05fa61..0000000 --- a/gephi-desktop/docs/User_Manual/Import/GraphViz_DOT_Format.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -id: GraphViz_DOT_Format -title: GraphViz DOT -sidebar_position: 4 ---- - -DOT is the textual language used by GraphViz to describe graphs. It is human-readable and supports descriptions of subgraphs and visual attributes such as color, width and labels. - -Gephi currently does not provide complete support for DOT: subgraphs, custom attributes and sizes are not supported. Gephi imports labels and colors when present, and supports both directed and undirected graphs. - -## Resources - -- GraphViz website: http://www.graphviz.org/ - -## Basic example - -```dot -digraph sample { - A -> B; - B -> C; -} -``` - -## Labels example - -```dot -digraph sample2 { - A -> B [ label = "Edge A to B" ]; - B -> C [ label = "Edge B to C" ]; - A [label="Node A"]; -} -``` - -## Adjacency lists example - -```dot -digraph sample3 { - A -> {B ; C ; D} - C -> {B ; A} -} -``` diff --git a/gephi-desktop/docs/User_Manual/Import/Netdraw_VNA_Format.md b/gephi-desktop/docs/User_Manual/Import/Netdraw_VNA_Format.md deleted file mode 100644 index 67a8d72..0000000 --- a/gephi-desktop/docs/User_Manual/Import/Netdraw_VNA_Format.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -id: Netdraw_VNA_Format -title: Netdraw VNA -sidebar_position: 6 ---- - -The VNA format (used by Netdraw) is similar to Pajek but uses section headers prefixed with `*`. It defines nodes and ties (edges) and supports attributes. Each section contains a header row that lists column names. - -## Basic example - -```text -*node data -ID name gender age -j101 joe male 56 -w067 wendy female 23 -b303 bill male 48 -*tie data -from to strength -j101 w067 1 -w067 j101 2 -j101 b303 1 -w067 b303 5 -``` - -## With node properties - -Netdraw VNA files can include node properties such as position and visual attributes. Gephi supports common properties including `X`, `Y`, `SIZE`, `COLOR` (0-255, red component), and `SHORTLABEL`. - -```text -*Node data -ID x y color shape size shortlabel -HOLLY 1160 271 255 1 10 HOLLY -BRAZEY 1214 577 255 1 10 BRAZEY -CAROL 671 612 255 1 10 CAROL -# ... more nodes ... -*Tie data -from to friends strength -HOLLY PAM 1 1 -PAT HOLLY 1 2 -PAULINE PAT 1 2 -# ... more ties ... -``` - -## Notes - -- Sections are separated by an asterisk-prefixed header (e.g. `*Node data`, `*Tie data`). -- Column headers are required in each section and define the fields that follow. -- File comments and extra metadata may be present in VNA files; Gephi will import commonly supported columns but may ignore unknown or complex properties. \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/Pajek_NET_Format.md b/gephi-desktop/docs/User_Manual/Import/Pajek_NET_Format.md deleted file mode 100644 index d4fb537..0000000 --- a/gephi-desktop/docs/User_Manual/Import/Pajek_NET_Format.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -id: Pajek_NET_Format -title: Pajek NET -sidebar_position: 7 ---- - -Pajek NET files (extension `.net`) are plain text files representing network topology. This format focuses on the graph structure (nodes and edges); attribute support is limited — typically only labels are reliably imported by Gephi. - -## Nodes - -Nodes are declared after the `*Vertices N` line where `N` is the number of nodes. Each node line contains a numeric identifier and an optional quoted label. - -```text -*Vertices 82670 -1 "entity" -2 "thing" -3 "anything" -4 "something" -5 "nothing" -6 "whole" -``` - -When nodes have no labels, the importer relies on the vertices count and generates numbered identifiers: - -```text -*Vertices 2536 -``` - -## Edges - -Edges can be described either as a list of node pairs (with the `*arcs` or `*edges` marker) or as adjacency lists (`*edgeslist`). - -Pair list example (`*arcs`): - -```text -*arcs -4244 107 -4244 238 -4244 4292 -4247 107 -4248 1 -4248 54 -``` - -Edge weights can be added as a third column: - -```text -*arcs -4244 107 5 -``` - -Adjacency list example (`*edgeslist`): - -```text -*edgeslist -4941 386 395 451 -1 3553 3586 3587 3637 -2 3583 -3 4930 -4 88 -5 13 120 -``` - -## Additional information - -- Lines starting with `%` are treated as comments. -- Pajek files may contain extra visual attributes (e.g. `x_fact`, `y_fact`, `ic`) but Gephi typically only imports the label. - -## Sample - -```text -*Vertices 9 -*Edges -1 2 -1 9 -2 9 -2 3 -2 8 -3 8 -3 4 -4 5 -4 7 -5 7 -5 6 -6 4 -``` \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/Trivial_Graph_Format.md b/gephi-desktop/docs/User_Manual/Import/Trivial_Graph_Format.md deleted file mode 100644 index 285b29c..0000000 --- a/gephi-desktop/docs/User_Manual/Import/Trivial_Graph_Format.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -id: Trivial_Graph_Format -title: TGF -sidebar_position: 10 ---- - -The Trivial Graph Format (TGF) is a minimal, plain-text adjacency-list format commonly used to exchange small graphs. Gephi includes an importer that supports the common TGF variant where nodes are listed first (one per line), followed by a line containing only `#`, then edges (one per line). Node lines map an ID to an optional label; edge lines list source and target node IDs and an optional edge label. - -## Format summary - -- Node section: one node per line with `ID [label]`. -- Separator: a line containing only `#` separates nodes from edges. -- Edge section: one edge per line with `sourceID targetID [label]`. - -Whitespace is used to separate fields. Labels may contain spaces when they follow the first space on the line. - -## Example - -Minimal example with two nodes and one labeled edge: - -``` -1 First node -2 Second node -# -1 2 connecting edge -``` - -## Gephi importer behaviour - -Gephi's importer supports the common TGF variant described above. Key behaviours: - -- Lines before the `#` are node definitions: the first token is the node ID; any text after the first space is used as the label. If no label is provided the ID will be used as the label. -- Lines after the `#` are edge definitions: the first token is the source ID, the second token is the target ID; any remaining text after the second token is used as the edge label. - -## Limitations and notes - -- The importer assumes IDs are whitespace-free tokens. -- Labels are taken as the remainder of the line after the first (for nodes) or second (for edges) space; leading spaces in labels are preserved by substring logic. diff --git a/gephi-desktop/docs/User_Manual/Import/Tulip_TPL_Format.md b/gephi-desktop/docs/User_Manual/Import/Tulip_TPL_Format.md deleted file mode 100644 index da1f34d..0000000 --- a/gephi-desktop/docs/User_Manual/Import/Tulip_TPL_Format.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -id: Tulip_TPL_Format -title: Tulip TPL -sidebar_position: 9 ---- - -Tulip TPL is a format used by the Tulip graph visualization framework. Gephi's importer supports basic topology and common attributes, but complex Tulip-specific objects may not be preserved. - -## Syntax - -Top-level structure uses an S-expression style with the `tlp` token and version, for example: - -``` -(tlp "2.0" - (nodes 0 1 2) - (edge 0 1 0) - (edge 1 0 2) -) -``` - -- Nodes are defined in a `(nodes id id ...)` block. -- Edges are defined as `(edge edge_id source_id target_id)` entries. - -Attributes are expressed in separate blocks; Gephi will map simple attribute types (strings, numbers) to node/edge attributes when possible. - -## Example - -Here is a minimal valid TLP example representing three nodes and two directed edges: - -``` -(tlp "2.0" - (nodes 0 1 2) - (edge 0 1 0) - (edge 1 0 2) -) -``` - -## Limitations when importing into Gephi - -- Only topology (nodes and edges) and primitive attributes (numbers, strings) are reliably imported. -- Layout, visual styles, and Tulip-specific objects may be lost. -- Large TLP files with complex attribute sections may require preprocessing. \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/UCINET_DL_Format.md b/gephi-desktop/docs/User_Manual/Import/UCINET_DL_Format.md deleted file mode 100644 index ee41ae6..0000000 --- a/gephi-desktop/docs/User_Manual/Import/UCINET_DL_Format.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -id: UCINET_DL_Format -title: UCINET DL -sidebar_position: 8 ---- - -UCINET DL is the common format used by the UCINET package. Gephi supports the `fullmatrix` and `edgelist1` sub-formats. - -## Full matrix - -A full matrix DL file declares `DL N = <n>` followed by a `Data:` block containing an N×N matrix. A cell value of `1` typically indicates the presence of an edge; numeric values can be used for weighted edges. - -Basic example: - -```text -DL N = 5 -Data: -0 1 1 1 1 -1 0 1 0 0 -1 1 0 0 1 -1 0 0 0 0 -1 0 1 0 0 -``` - -With node labels (labels line appears before `data:`): - -```text -dl n=5 -format = fullmatrix -labels: -barry,david,lin,pat,russ -data: -0 1 1 1 0 -1 0 0 0 1 -1 0 0 1 0 -1 0 1 0 1 -0 1 0 1 0 -``` - -Edge weights can be represented by replacing `1` with the desired numeric weight. - -## Edge list (`edgelist1`) - -For sparse graphs, use the `edgelist1` format where each data line is a pair of node identifiers (optionally followed by a weight). Labels can be declared with `labels:` or embedded in the data. - -Basic example with numeric labels declared separately: - -```text -DL n=5 -format = edgelist1 -labels: -george, sally, jim, billy, jane -data: -1 2 -1 3 -2 3 -3 1 -4 3 -``` - -Example with labels embedded in the data: - -```text -DL n=5 -format = edgelist1 -labels embedded: -data: -george sally -george jim -sally jim -billy george -jane jim -``` - -Edge weights as the third column: - -```text -dl -format=edgelist1 -n=3 -data: -1 2 1.56263736263736 -1 3 1.48687978687979 -2 3 1.39597069597070 -3 1 0.676190476190476 -``` \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import/index.md b/gephi-desktop/docs/User_Manual/Import/index.md deleted file mode 100644 index dec5f12..0000000 --- a/gephi-desktop/docs/User_Manual/Import/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -id: import -title: Import -sidebar_position: 8 ---- \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Import_Dynamic_Data.md b/gephi-desktop/docs/User_Manual/Import_Dynamic_Data.md deleted file mode 100644 index b9cdd41..0000000 --- a/gephi-desktop/docs/User_Manual/Import_Dynamic_Data.md +++ /dev/null @@ -1,396 +0,0 @@ ---- -id: Import_Dynamic_Data -title: Import Dynamic Data -sidebar_position: 6 ---- - -Longitudinal (also called dynamic) networks are simply networks that evolve chronologically. If you imagine the network of your friends, the number of nodes, connections and attribute values grow and change as time passes. We call these dynamic attributes, because they have values associated with a particular moment. - -*Longitudinal Networks* - -Gephi supports two fundamental ways to represent time in dynamic networks: - -1. **Timestamps**: Discrete points in time (e.g., specific dates or moments) -2. **Intervals**: Time ranges with start and end bounds (e.g., periods of existence) - -These two time representations **cannot be mixed** within the same graph - you must choose one or the other for your entire network. - -**For example with Intervals:** - -Imagine a network of three nodes for the years 2007, 2008 and 2009. When using intervals, nodes exist for a duration between a start and end time. - -![importdynamics-intervals](/docs/User_Manual/Import_Dynamic_Data/01_importdynamics-intervals.png) - -The second node, 'n2', is present during all three years and is represented by brackets enclosing the first and last years [2007, 2009]. Gephi automatically includes any dates, such as 2008, within this range. The first node, 'n1', however, is closed with a parenthesis rather than a bracket. This means the node was present in 2008 but **NOT** in 2009. - -Technically speaking, brackets are used for closed (also known as inclusive) intervals, while parentheses represent open intervals. In other words, dates enclosed within two brackets include both the startpoint and endpoint, whereas dates enclosed within two parentheses begins **after** the startpoint and ends **before** the endpoint. Half-closed intervals that incorporate both, like the [2007, 2009) example above, are also possible. - -**For example with Timestamps:** - -With timestamps, nodes exist at specific discrete points in time. For instance, if nodes appear at years 2007, 2008, and 2009, each would have a specific timestamp value rather than a range. This is useful when you have snapshot data where each observation represents a distinct moment. - -Check the Data Laboratory to see how time is represented for each node or edge. When the network is longitudinal, a Time Interval column is present that shows when elements exist in the graph. You can visualize this by clicking the checkbox next to 'Time intervals as graphics' in the Configuration tab of the Data Laboratory. After enabling the timeline, be sure to adjust the size of the window of the sliding filter of your timeline, otherwise you will receive an error stating that Gephi "cannot animate timeline without an animation interval." - -## Import from GEXF File - -The [GEXF](http://gexf.net/format) format includes everything needed to represent longitudinal networks with both timestamps and intervals. You define a single network and configure how time is represented. - -### Time Representation and Time Format - -GEXF supports two key attributes for configuring time: - -- **timerepresentation**: Choose between `"interval"` (default) or `"timestamp"` -- **timeformat**: Choose between `"double"` (default), `"date"` (yyyy-mm-dd), or `"dateTime"` (ISO 8601 format with optional timezone) - -These attributes are set on the `<graph>` element and apply to the entire network. Remember: you cannot mix timestamp and interval representations in the same file. - -### Basic example with Intervals - -Below is an example with three nodes from 2007 to 2009, using interval representation with date format. - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://gexf.net/1.3 - http://gexf.net/1.3/gexf.xsd" - version="1.3"> - <graph mode="dynamic" timerepresentation="interval" timeformat="date" defaultedgetype="directed"> - <nodes> - <node id="n1" label="Node 1" start="2007-01-01" end="2008-12-31" /> - <node id="n2" label="Node 2" start="2007-01-01" end="2009-12-31" /> - <node id="n3" label="Node 3" start="2008-01-01" end="2009-12-31" /> - </nodes> - <edges> - <edge source="n1" target="n2" start="2007-01-01" end="2008-12-31" /> - <edge source="n1" target="n3" start="2008-01-01" end="2008-12-31"/> - <edge source="n3" target="n2" start="2008-01-01" end="2009-12-31"/> - </edges> - </graph> -</gexf> -``` - -**Important points for intervals:** - -- Set **mode="dynamic"** on the **graph** element (required for dynamic networks) -- Set **timerepresentation="interval"** (or omit it, as interval is the default) -- Use **start** and **end** attributes on nodes and edges to define when they exist -- Both start and end values are **inclusive** in GEXF 1.3 -- Omitting start or end creates infinity bounds (e.g., only `start="2007-01-01"` means [2007-01-01, +infinity]) -- Edges must exist within the time bounds of their source and target nodes - -### Basic example with Timestamps - -Here's the same network using timestamp representation: - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://gexf.net/1.3 - http://gexf.net/1.3/gexf.xsd" - version="1.3"> - <graph mode="dynamic" timerepresentation="timestamp" timeformat="date" defaultedgetype="directed"> - <nodes> - <node id="n1" label="Node 1" timestamp="2007-01-01" /> - <node id="n2" label="Node 2" timestamp="2007-01-01" /> - <node id="n3" label="Node 3" timestamp="2008-01-01" /> - </nodes> - <edges> - <edge source="n1" target="n2" timestamp="2007-01-01" /> - <edge source="n1" target="n3" timestamp="2008-01-01"/> - <edge source="n3" target="n2" timestamp="2008-01-01"/> - </edges> - </graph> -</gexf> -``` - -**Important points for timestamps:** - -- Set **timerepresentation="timestamp"** on the **graph** element (required for timestamp mode) -- Use **timestamp** attribute on nodes and edges (not start/end) -- Each element exists at a specific point in time -- Use **spells** (see below) if an element needs to exist at multiple timestamps - -The GEXF specifications, including dynamics, are available in the [GEXF Primer](http://gexf.net/format/primer.html). - -### Dynamic attributes - -The examples above described how to represent the network topology over time, where nodes and edges are added or removed. Now let's see how to represent attribute values changing over time, for example 'Price'. - -#### Dynamic attributes with Intervals - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://gexf.net/1.3 - http://gexf.net/1.3/gexf.xsd" - version="1.3"> - <graph mode="dynamic" timerepresentation="interval" timeformat="date" defaultedgetype="directed"> - <attributes class="node"> - <attribute id="price" title="Price" type="float"/> - </attributes> - <nodes> - <node id="n1" label="Node 1" start="2007-01-01" end="2008-12-31"> - <attvalues> - <attvalue for="price" value="25.5" start="2007-01-01" end="2007-12-31"/> - <attvalue for="price" value="42.5" start="2008-01-01" end="2008-12-31"/> - </attvalues> - </node> - <node id="n2" label="Node 2" start="2007-01-01" end="2009-12-31"> - <attvalues> - <attvalue for="price" value="12.0" start="2008-01-01"/> - </attvalues> - </node> - <node id="n3" label="Node 3" start="2008-01-01" end="2009-12-31"> - <attvalues> - <attvalue for="price" value="40.5" start="2008-01-01" end="2009-12-31" /> - </attvalues> - </node> - </nodes> - <edges> - <edge source="n1" target="n2" start="2007-01-01" end="2008-12-31"/> - <edge source="n1" target="n3" start="2008-01-01" end="2008-12-31"/> - <edge source="n3" target="n2" start="2008-01-01" end="2009-12-31"/> - </edges> - </graph> -</gexf> -``` - -#### Dynamic attributes with Timestamps - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://gexf.net/1.3 - http://gexf.net/1.3/gexf.xsd" - version="1.3"> - <graph mode="dynamic" timerepresentation="timestamp" timeformat="date" defaultedgetype="directed"> - <attributes class="node"> - <attribute id="price" title="Price" type="float"/> - </attributes> - <nodes> - <node id="n1" label="Node 1" timestamp="2007-01-01"> - <attvalues> - <attvalue for="price" value="25.5" timestamp="2007-01-01"/> - <attvalue for="price" value="42.5" timestamp="2008-01-01"/> - </attvalues> - </node> - <node id="n2" label="Node 2" timestamp="2007-01-01"> - <attvalues> - <attvalue for="price" value="10.0" timestamp="2007-01-01"/> - <attvalue for="price" value="12.0" timestamp="2008-01-01"/> - </attvalues> - </node> - <node id="n3" label="Node 3" timestamp="2008-01-01"> - <attvalues> - <attvalue for="price" value="40.5" timestamp="2008-01-01" /> - </attvalues> - </node> - </nodes> - <edges> - <edge source="n1" target="n2" timestamp="2007-01-01"/> - <edge source="n1" target="n3" timestamp="2008-01-01"/> - <edge source="n3" target="n2" timestamp="2008-01-01"/> - </edges> - </graph> -</gexf> -``` - -**Keep in mind:** - -- To represent several values over time, repeat the same **attvalue** element with different time bounds and values -- It's not mandatory to set a value for all time periods; if missing, the default value is used -- For intervals: if no end is specified, the value extends to infinity (e.g., [2008-01-01, +infinity]) -- For timestamps: each attvalue represents the value at that specific point in time -- Attribute values must fall within the time bounds of their parent element (node or edge) - -The GEXF specifications, including dynamics attributes, are available in the [GEXF Primer](https://gephi.org/gexf/format/primer.html). - -### Spells: Multiple time periods for elements - -If a node or edge needs to exist at multiple non-contiguous time periods, use the `<spells>` element. This works with both interval and timestamp representations. - -#### Spells with Intervals - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" version="1.3"> - <graph mode="dynamic" timerepresentation="interval" timeformat="date"> - <nodes> - <node id="n1" label="Node 1"> - <spells> - <spell start="2007-01-01" end="2007-12-31" /> - <spell start="2009-01-01" end="2009-12-31" /> - </spells> - </node> - </nodes> - </graph> -</gexf> -``` - -In this example, Node 1 exists in 2007 and 2009 but not in 2008. **Important:** Intervals cannot overlap within spells - each spell must be separate and non-overlapping. - -#### Spells with Timestamps - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" version="1.3"> - <graph mode="dynamic" timerepresentation="timestamp" timeformat="date"> - <nodes> - <node id="n1" label="Node 1"> - <spells> - <spell timestamp="2007-01-01" /> - <spell timestamp="2008-06-15" /> - <spell timestamp="2009-12-31" /> - </spells> - </node> - </nodes> - </graph> -</gexf> -``` - -In this example, Node 1 exists at three specific points in time. - -**Note:** If spells are provided on an element, any `start`, `end`, or `timestamp` attributes directly on that element will be ignored. - -### Dynamic weight - -Normally an edge's weight is directly defined in the edge element with a particular value. Defining a dynamic **weight** attribute overrides this value and provides dynamic weight support. - -The rule is to define an edge attribute with the **weight** keyword for identifier. Then, use multiple 'attvalue' like explained above to set different values over time. - -```xml -<attributes class="edge"> - <attribute id="weight" title="Weight" type="float"/> -</attributes> -``` - - - -## Transform existing column in Time Interval - -Imagine a social network where each node represents a friend of yours and one of the attribute columns is the date you met. In order to transform this column into a dynamic interval take the following steps: - -- **Step 1:** Click on **Merge Columns** manipulator in the Data Laboratory. - -![transformlongitudinal-datalab1](/docs/User_Manual/Import_Dynamic_Data/02_transformlongitudinal-datalab1.png) - -- **Step 2:** From the available columns on the left, add the column or columns (if you have both a start and end period) you want to use to create the time interval. Then select **Create time interval** from the available merge strategies. - -![transformlongitudinal-datalab2](/docs/User_Manual/Import_Dynamic_Data/03_transformlongitudinal-datalab2.png) - -- **Step 3:** Select which column is the start and which is the end (or leave this blank if no end exists). If the column is numerical (integer, float, double), select **Parse numbers**. If the data are date strings, they can also be parsed and transformed into a time interval. Our 'First Met' column is just the day in the year, just a number. - -![transformlongitudinal-datalab3](/docs/User_Manual/Import_Dynamic_Data/04_transformlongitudinal-datalab3.png) - - -## Import Multiple Static Files as Dynamic Graph - -Starting with Gephi 0.9.1, you can create a dynamic network by importing multiple static "snapshot" files, where each file represents the network at a different point in time. This is useful when you have separate files for different time periods and want to see how the network evolves. - -### Using "Slice" Mode with Timestamps - -The key to this approach is using the **mode="slice"** attribute in your GEXF files, along with **timerepresentation="timestamp"** and a **timestamp** attribute on the graph element. Each file represents the network at a specific timestamp. - -#### Example: Three Network Snapshots - -Here are three GEXF files, each representing the network at a different timestamp: - -**File 1: network_t1.gexf (timestamp=1)** - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" version="1.3"> - <graph mode="slice" defaultedgetype="directed" timerepresentation="timestamp" timestamp="1"> - <nodes> - <node id="n0" label="Bob"/> - <node id="n1" label="Jack"/> - </nodes> - <edges> - <edge weight="1" source="n0" target="n1"/> - </edges> - </graph> -</gexf> -``` - -**File 2: network_t2.gexf (timestamp=2)** - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" version="1.3"> - <graph mode="slice" defaultedgetype="directed" timerepresentation="timestamp" timestamp="2"> - <nodes> - <node id="n0" label="Bob"/> - <node id="n1" label="Jack"/> - <node id="n2" label="Sue"/> - <node id="n3" label="Beth"/> - </nodes> - <edges> - <edge weight="1" source="n0" target="n1"/> - <edge weight="1" source="n3" target="n2"/> - </edges> - </graph> -</gexf> -``` - -**File 3: network_t3.gexf (timestamp=3)** - -```xml -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns="http://gexf.net/1.3" version="1.3"> - <graph mode="slice" defaultedgetype="directed" timerepresentation="timestamp" timestamp="3"> - <nodes> - <node id="n0" label="Bob"/> - <node id="n1" label="Jack"/> - <node id="n2" label="Sue"/> - <node id="n3" label="Beth"/> - </nodes> - <edges> - <edge weight="1" source="n1" target="n2"/> - <edge weight="1" source="n3" target="n0"/> - </edges> - </graph> -</gexf> -``` - -### Importing Slice Files in Gephi - -To import these files: - -1. **Open Gephi** and go to File > Open -2. **Select all the slice files** you want to import (you can select multiple files) -3. In the **Import report**, select the **Merge** option -4. Click **OK** - -Gephi will merge all the slices into a single dynamic graph. The result is a longitudinal network where: -- Nodes and edges have time intervals based on when they appear in the different snapshots -- All attributes become dynamic attributes -- Edge weights are also dynamic - -### Important Notes - -- **Node identifiers must be exactly the same** across files to be recognized as the same node -- Use **mode="slice"** in each file -- Set **timerepresentation="timestamp"** in each file -- Each file must have a different **timestamp** value on the graph element -- You can use different time formats (double, date, dateTime) - just ensure consistency across all files -- You can also use intervals by setting **timerepresentation="interval"** and using interval bounds instead of a single timestamp -- Start with an empty workspace when importing to avoid conflicts - -## Summary: Choosing the Right Approach - -Here's a quick guide to help you choose the best method for your dynamic network: - -| Scenario | Recommended Approach | -|----------|---------------------| -| You have one file with all dynamic data already defined | Use a single GEXF file with **mode="dynamic"** and choose interval or timestamp representation | -| You have multiple snapshot files (one per time period) | Use multiple GEXF files with **mode="slice"** and import them together with the Merge option | -| You have static data with time columns | Import the static file and use the **Merge Columns** manipulator in Data Laboratory | -| Your data represents durations or periods of existence | Use **timerepresentation="interval"** with start/end attributes | -| Your data represents discrete moments or observations | Use **timerepresentation="timestamp"** with timestamp attributes | -| You need an element to exist at multiple non-contiguous times | Use the **spells** element with multiple spell entries | - -**Remember:** You cannot mix interval and timestamp representations in the same graph - choose one and use it consistently throughout your data. diff --git a/gephi-desktop/docs/User_Manual/Localization.md b/gephi-desktop/docs/User_Manual/Localization.md deleted file mode 100644 index 75f3398..0000000 --- a/gephi-desktop/docs/User_Manual/Localization.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -id: Localization -title: Localization -sidebar_position: 2 ---- - -Gephi's installer is in English by default, but you can switch the language from the Tools > Language menu. - -![Language Menu](/docs/User_Manual/Localization/Gephi_Localization.png) \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Releases.md b/gephi-desktop/docs/User_Manual/Releases.md deleted file mode 100644 index 9e739b4..0000000 --- a/gephi-desktop/docs/User_Manual/Releases.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -id: Releases -title: Releases -sidebar_position: 2 ---- - -Gephi releases are available on the [GitHub releases page](https://github.com/gephi/gephi/releases). - -New major releases are announced on the [Gephi blog](https://gephi.wordpress.com/tag/release/). \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/Supported_Systems.md b/gephi-desktop/docs/User_Manual/Supported_Systems.md deleted file mode 100644 index 95dc8b6..0000000 --- a/gephi-desktop/docs/User_Manual/Supported_Systems.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -id: Supported_Systems -title: Supported Systems -sidebar_position: 2 ---- - -Gephi is supported on the following operating systems: -- Windows 10 and later -- MacOs Intel and Apple Silicon -- Linux x64 and aarch64 - -We provide installers for Windows and MacOS, and a zip archive for Linux. -However, for Linux you may install Gephi directly from [Snapcraft](https://snapcraft.io/gephi) and [FlatHub](https://flathub.org/apps/details/org.gephi.Gephi). diff --git a/gephi-desktop/docs/User_Manual/Troubleshooting.md b/gephi-desktop/docs/User_Manual/Troubleshooting.md deleted file mode 100644 index 68cc968..0000000 --- a/gephi-desktop/docs/User_Manual/Troubleshooting.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -id: Troubleshooting -title: Troubleshooting -sidebar_position: 1 -tags: - - Troubleshooting - - Startup ---- -## Do I need to install Java? - -No, since [Gephi 0.9.3](https://gephi.wordpress.com/2022/04/10/gephi-0-9-3/), Java is bundled with the application, so you don't need to install Java separately. - -## Memory issues - -The computer memory available to Gephi is automatically determined, based on the amount of physical memory (RAM) installed on your computer. - -The threshold is conservative by design, to make sure Gephi doesn't use too much memory and slow down your computer. However, this can be overridden. That way, you can allocate more memory to Gephi if you have a lot of RAM installed on your computer. - -By default, Gephi will detect itself that it's running out of memory and will propose to set the setting manually for you: -![image](/docs/User_Manual/Troubleshooting/Memory_Modal_Manual_Config.png). - -That, will however require a restart of Gephi. - -Not recommended, but you can manually edit the configuration file to set the memory limit: - -- On **Windows**, go to the Gephi folder in Start menu and click on Startup Settings. Edit this file with Notepad or WordPad. Alternatively, go to `C:\Program Files\Gephi\etc\gephi.conf` and edit file manually. -- On **Mac OS X**, right-click on Gephi application icon and select Show Package Contents to open a new Finder window displaying a Contents folder. Open the Contents folder, and then open the `Resources/gephi/etc` folder, in which the gephi.conf file resides. Use TextEdit to edit the file. -- On **Linux**, go into your application directory and then into the `etc` folder. Edit the file with a text editor. - -## Where are user files? - -To completely clean up your installation, you may want to delete the user directory. This will remove all settings, plugins and recent files. - -On Windows, user directory is located in - -`C:\Users\username\AppData\Roaming\.gephi` - -On Mac OS X, user directory is located in - -`/Users/username/Library/Application\ Support/gephi` - -On Linux, user directory is located in - -`/home/username/.gephi` - -## Windows issues - -### Gephi not using Graphical Card on Laptop - -*The troubleshooting explained is for Intel + Nvidia based laptop, note that the process is still relevant for AMD based laptop, just the tools involved might be different* - -If you have a laptop that has a dedicated graphical card (Nvidia), it's very probable that the laptop has also integrated card (Intel(R) UHD Graphics). - -Windows might probably, by default, won't give Gephi the ability to use the dedicated graphical card, which will result in degraded performance for visualisation. - -To check that Gephi has or not get granted to use the correct graphical card : - -* Open Gephi -* On the top bar, go to **Tools -> Options**, a window will open -* On the tab go to **Visualisation** and then on the tab under **Open GL** - -On the right side of the windows, if you see something like `Nvidia Corporation` it means that Gephi is using the dedicated graphical card, all good. - -If you see something like `Intel UHD` it means Gephi is using the integrated graphical card. - -To change this and force Windows to let Gephi use the dedicated graphical card : - -* Search for **Nvidia Control Panel** on your computer and open it. -* On left side, select **3D Settings -> Manage 3D settings** -* Then select the **Program settings** tab -* Click on **Add** and select **Gephi** -* Make sure the option **NVIDIA High Performance** is selected -* Click on **Apply** - -Then, restart Gephi. It should be now using the dedicated graphical card. \ No newline at end of file diff --git a/gephi-desktop/docs/User_Manual/_category_.json b/gephi-desktop/docs/User_Manual/_category_.json deleted file mode 100644 index 60eb178..0000000 --- a/gephi-desktop/docs/User_Manual/_category_.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "label": "User Manual", - "position": 1, - "link": { - "type": "doc", - "id": "index" - } -} diff --git a/gephi-desktop/docs/User_Manual/index.md b/gephi-desktop/docs/User_Manual/index.md deleted file mode 100644 index 07c5464..0000000 --- a/gephi-desktop/docs/User_Manual/index.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -id: index -title: Introduction -sidebar_position: 1 -slug: / ---- - -:::info Work in Progress -This documentation is currently under active development. We welcome your feedback and ideas! - -**Report documentation issues or suggestions:** [https://github.com/gephi/gephi-documentation/issues](https://github.com/gephi/gephi-documentation/issues) -::: - -## Documentation Progress - -**Completed:** -- ✅ Migrate relevant pages from the legacy wiki and update content to match the latest Gephi version -- ✅ Deprecate old wiki and [archive it](https://github.com/gephi/gephi-wiki-legacy) - -**In Progress:** -- 🚧 Launch new documentation portal - -**Coming Soon:** -- 📝 Harness ideas from the community on how to improve the documentation -- 📝 Prioritize needs and add new pages -- 🔍 Add search feature to this documentation \ No newline at end of file diff --git a/gephi-desktop/docusaurus.config.ts b/gephi-desktop/docusaurus.config.ts deleted file mode 100644 index 7e96aa7..0000000 --- a/gephi-desktop/docusaurus.config.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { themes } from "prism-react-renderer"; - -import type { Config } from "@docusaurus/types"; -import defaultConfig from "../docusaurus.common"; - -const config: Config = { - ...defaultConfig, - title: "Gephi Desktop Documentation", - tagline: "The Open Graph Viz Platform", - url: "https://docs.gephi.org/", - baseUrl: "/desktop", -}; - -config.presets = [ - [ - "classic", - { - docs: { - routeBasePath: "/", - sidebarPath: require.resolve("./sidebars.ts"), - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: "https://github.com/gephi/gephi-documentation/tree/master/gephi-desktop", - }, - theme: { - customCss: require.resolve("../public/style.css"), - }, - }, - ], -]; - -config.themeConfig.navbar = { - title: "Gephi", - logo: { - alt: "Gephi", - src: "img/logo.svg", - height: "32px", - width: "32px", - }, - items: [ - { - to: "/", - activeBasePath: "docs", - label: "User Manual", - position: "left", - }, - { - to: "Developer_Documentation", - label: "Developer Documentation", - position: "left", - }, - { - to: "Plugins", - label: "Plugin Development", - position: "left", - }, - { - href: "http://docs.gephi.org/", - label: "Gephi Documentations", - position: "right", - }, - { - href: "https://gephi.org", - label: "Gephi Website", - position: "right", - }, - { - href: "https://github.com/gephi/gephi", - label: "GitHub", - position: "right", - }, - ], -}; - -module.exports = config; diff --git a/gephi-desktop/package.json b/gephi-desktop/package.json deleted file mode 100644 index 5dbabc2..0000000 --- a/gephi-desktop/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@gephi-documentation/desktop", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start --port 3001 --no-open", - "build": "docusaurus build --out-dir ../build/desktop", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve --port 3001", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=22" - } -} diff --git a/gephi-desktop/sidebars.ts b/gephi-desktop/sidebars.ts deleted file mode 100644 index 00fe6c2..0000000 --- a/gephi-desktop/sidebars.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; - -/** - * Creating a sidebar enables you to: - * - create an ordered group of docs - * - render a sidebar for each doc of that group - * - provide next/previous navigation - * - * The sidebars can be generated from the filesystem, or explicitly defined here. - * - * Create as many sidebars as you want. - */ - -const sidebars: SidebarsConfig = { - docs: [{ type: "autogenerated", dirName: "." }], -}; - -export default sidebars; diff --git a/gephi-desktop/static/datasets/LesMiserables.gexf b/gephi-desktop/static/datasets/LesMiserables.gexf deleted file mode 100644 index e3f67aa..0000000 --- a/gephi-desktop/static/datasets/LesMiserables.gexf +++ /dev/null @@ -1,343 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns:viz="http:///www.gexf.net/1.1draft/viz" version="1.1" xmlns="http://www.gexf.net/1.1draft"> -<meta lastmodifieddate="2010-03-03+23:44"> -<creator>Gephi 0.7</creator> -</meta> -<graph defaultedgetype="undirected" idtype="string" type="static"> -<nodes count="77"> -<node id="0.0" label="Myriel"/> -<node id="1.0" label="Napoleon"/> -<node id="2.0" label="MlleBaptistine"/> -<node id="3.0" label="MmeMagloire"/> -<node id="4.0" label="CountessDeLo"/> -<node id="5.0" label="Geborand"/> -<node id="6.0" label="Champtercier"/> -<node id="7.0" label="Cravatte"/> -<node id="8.0" label="Count"/> -<node id="9.0" label="OldMan"/> -<node id="10.0" label="Labarre"/> -<node id="11.0" label="Valjean"/> -<node id="12.0" label="Marguerite"/> -<node id="13.0" label="MmeDeR"/> -<node id="14.0" label="Isabeau"/> -<node id="15.0" label="Gervais"/> -<node id="16.0" label="Tholomyes"/> -<node id="17.0" label="Listolier"/> -<node id="18.0" label="Fameuil"/> -<node id="19.0" label="Blacheville"/> -<node id="20.0" label="Favourite"/> -<node id="21.0" label="Dahlia"/> -<node id="22.0" label="Zephine"/> -<node id="23.0" label="Fantine"/> -<node id="24.0" label="MmeThenardier"/> -<node id="25.0" label="Thenardier"/> -<node id="26.0" label="Cosette"/> -<node id="27.0" label="Javert"/> -<node id="28.0" label="Fauchelevent"/> -<node id="29.0" label="Bamatabois"/> -<node id="30.0" label="Perpetue"/> -<node id="31.0" label="Simplice"/> -<node id="32.0" label="Scaufflaire"/> -<node id="33.0" label="Woman1"/> -<node id="34.0" label="Judge"/> -<node id="35.0" label="Champmathieu"/> -<node id="36.0" label="Brevet"/> -<node id="37.0" label="Chenildieu"/> -<node id="38.0" label="Cochepaille"/> -<node id="39.0" label="Pontmercy"/> -<node id="40.0" label="Boulatruelle"/> -<node id="41.0" label="Eponine"/> -<node id="42.0" label="Anzelma"/> -<node id="43.0" label="Woman2"/> -<node id="44.0" label="MotherInnocent"/> -<node id="45.0" label="Gribier"/> -<node id="46.0" label="Jondrette"/> -<node id="47.0" label="MmeBurgon"/> -<node id="48.0" label="Gavroche"/> -<node id="49.0" label="Gillenormand"/> -<node id="50.0" label="Magnon"/> -<node id="51.0" label="MlleGillenormand"/> -<node id="52.0" label="MmePontmercy"/> -<node id="53.0" label="MlleVaubois"/> -<node id="54.0" label="LtGillenormand"/> -<node id="55.0" label="Marius"/> -<node id="56.0" label="BaronessT"/> -<node id="57.0" label="Mabeuf"/> -<node id="58.0" label="Enjolras"/> -<node id="59.0" label="Combeferre"/> -<node id="60.0" label="Prouvaire"/> -<node id="61.0" label="Feuilly"/> -<node id="62.0" label="Courfeyrac"/> -<node id="63.0" label="Bahorel"/> -<node id="64.0" label="Bossuet"/> -<node id="65.0" label="Joly"/> -<node id="66.0" label="Grantaire"/> -<node id="67.0" label="MotherPlutarch"/> -<node id="68.0" label="Gueulemer"/> -<node id="69.0" label="Babet"/> -<node id="70.0" label="Claquesous"/> -<node id="71.0" label="Montparnasse"/> -<node id="72.0" label="Toussaint"/> -<node id="73.0" label="Child1"/> -<node id="74.0" label="Child2"/> -<node id="75.0" label="Brujon"/> -<node id="76.0" label="MmeHucheloup"/> -</nodes> -<edges count="254"> -<edge id="0" source="1.0" target="0.0"/> -<edge id="1" source="2.0" target="0.0" weight="8.0"/> -<edge id="2" source="3.0" target="0.0" weight="10.0"/> -<edge id="3" source="3.0" target="2.0" weight="6.0"/> -<edge id="4" source="4.0" target="0.0"/> -<edge id="5" source="5.0" target="0.0"/> -<edge id="6" source="6.0" target="0.0"/> -<edge id="7" source="7.0" target="0.0"/> -<edge id="8" source="8.0" target="0.0" weight="2.0"/> -<edge id="9" source="9.0" target="0.0"/> -<edge id="13" source="11.0" target="0.0" weight="5.0"/> -<edge id="12" source="11.0" target="2.0" weight="3.0"/> -<edge id="11" source="11.0" target="3.0" weight="3.0"/> -<edge id="10" source="11.0" target="10.0"/> -<edge id="14" source="12.0" target="11.0"/> -<edge id="15" source="13.0" target="11.0"/> -<edge id="16" source="14.0" target="11.0"/> -<edge id="17" source="15.0" target="11.0"/> -<edge id="18" source="17.0" target="16.0" weight="4.0"/> -<edge id="19" source="18.0" target="16.0" weight="4.0"/> -<edge id="20" source="18.0" target="17.0" weight="4.0"/> -<edge id="21" source="19.0" target="16.0" weight="4.0"/> -<edge id="22" source="19.0" target="17.0" weight="4.0"/> -<edge id="23" source="19.0" target="18.0" weight="4.0"/> -<edge id="24" source="20.0" target="16.0" weight="3.0"/> -<edge id="25" source="20.0" target="17.0" weight="3.0"/> -<edge id="26" source="20.0" target="18.0" weight="3.0"/> -<edge id="27" source="20.0" target="19.0" weight="4.0"/> -<edge id="28" source="21.0" target="16.0" weight="3.0"/> -<edge id="29" source="21.0" target="17.0" weight="3.0"/> -<edge id="30" source="21.0" target="18.0" weight="3.0"/> -<edge id="31" source="21.0" target="19.0" weight="3.0"/> -<edge id="32" source="21.0" target="20.0" weight="5.0"/> -<edge id="33" source="22.0" target="16.0" weight="3.0"/> -<edge id="34" source="22.0" target="17.0" weight="3.0"/> -<edge id="35" source="22.0" target="18.0" weight="3.0"/> -<edge id="36" source="22.0" target="19.0" weight="3.0"/> -<edge id="37" source="22.0" target="20.0" weight="4.0"/> -<edge id="38" source="22.0" target="21.0" weight="4.0"/> -<edge id="47" source="23.0" target="11.0" weight="9.0"/> -<edge id="46" source="23.0" target="12.0" weight="2.0"/> -<edge id="39" source="23.0" target="16.0" weight="3.0"/> -<edge id="40" source="23.0" target="17.0" weight="3.0"/> -<edge id="41" source="23.0" target="18.0" weight="3.0"/> -<edge id="42" source="23.0" target="19.0" weight="3.0"/> -<edge id="43" source="23.0" target="20.0" weight="4.0"/> -<edge id="44" source="23.0" target="21.0" weight="4.0"/> -<edge id="45" source="23.0" target="22.0" weight="4.0"/> -<edge id="49" source="24.0" target="11.0" weight="7.0"/> -<edge id="48" source="24.0" target="23.0" weight="2.0"/> -<edge id="52" source="25.0" target="11.0" weight="12.0"/> -<edge id="51" source="25.0" target="23.0"/> -<edge id="50" source="25.0" target="24.0" weight="13.0"/> -<edge id="54" source="26.0" target="11.0" weight="31.0"/> -<edge id="55" source="26.0" target="16.0"/> -<edge id="53" source="26.0" target="24.0" weight="4.0"/> -<edge id="56" source="26.0" target="25.0"/> -<edge id="57" source="27.0" target="11.0" weight="17.0"/> -<edge id="58" source="27.0" target="23.0" weight="5.0"/> -<edge id="60" source="27.0" target="24.0"/> -<edge id="59" source="27.0" target="25.0" weight="5.0"/> -<edge id="61" source="27.0" target="26.0"/> -<edge id="62" source="28.0" target="11.0" weight="8.0"/> -<edge id="63" source="28.0" target="27.0"/> -<edge id="66" source="29.0" target="11.0" weight="2.0"/> -<edge id="64" source="29.0" target="23.0"/> -<edge id="65" source="29.0" target="27.0"/> -<edge id="67" source="30.0" target="23.0"/> -<edge id="69" source="31.0" target="11.0" weight="3.0"/> -<edge id="70" source="31.0" target="23.0" weight="2.0"/> -<edge id="71" source="31.0" target="27.0"/> -<edge id="68" source="31.0" target="30.0" weight="2.0"/> -<edge id="72" source="32.0" target="11.0"/> -<edge id="73" source="33.0" target="11.0" weight="2.0"/> -<edge id="74" source="33.0" target="27.0"/> -<edge id="75" source="34.0" target="11.0" weight="3.0"/> -<edge id="76" source="34.0" target="29.0" weight="2.0"/> -<edge id="77" source="35.0" target="11.0" weight="3.0"/> -<edge id="79" source="35.0" target="29.0" weight="2.0"/> -<edge id="78" source="35.0" target="34.0" weight="3.0"/> -<edge id="82" source="36.0" target="11.0" weight="2.0"/> -<edge id="83" source="36.0" target="29.0"/> -<edge id="80" source="36.0" target="34.0" weight="2.0"/> -<edge id="81" source="36.0" target="35.0" weight="2.0"/> -<edge id="87" source="37.0" target="11.0" weight="2.0"/> -<edge id="88" source="37.0" target="29.0"/> -<edge id="84" source="37.0" target="34.0" weight="2.0"/> -<edge id="85" source="37.0" target="35.0" weight="2.0"/> -<edge id="86" source="37.0" target="36.0" weight="2.0"/> -<edge id="93" source="38.0" target="11.0" weight="2.0"/> -<edge id="94" source="38.0" target="29.0"/> -<edge id="89" source="38.0" target="34.0" weight="2.0"/> -<edge id="90" source="38.0" target="35.0" weight="2.0"/> -<edge id="91" source="38.0" target="36.0" weight="2.0"/> -<edge id="92" source="38.0" target="37.0" weight="2.0"/> -<edge id="95" source="39.0" target="25.0"/> -<edge id="96" source="40.0" target="25.0"/> -<edge id="97" source="41.0" target="24.0" weight="2.0"/> -<edge id="98" source="41.0" target="25.0" weight="3.0"/> -<edge id="101" source="42.0" target="24.0"/> -<edge id="100" source="42.0" target="25.0" weight="2.0"/> -<edge id="99" source="42.0" target="41.0" weight="2.0"/> -<edge id="102" source="43.0" target="11.0" weight="3.0"/> -<edge id="103" source="43.0" target="26.0"/> -<edge id="104" source="43.0" target="27.0"/> -<edge id="106" source="44.0" target="11.0"/> -<edge id="105" source="44.0" target="28.0" weight="3.0"/> -<edge id="107" source="45.0" target="28.0" weight="2.0"/> -<edge id="108" source="47.0" target="46.0"/> -<edge id="112" source="48.0" target="11.0"/> -<edge id="110" source="48.0" target="25.0"/> -<edge id="111" source="48.0" target="27.0"/> -<edge id="109" source="48.0" target="47.0" weight="2.0"/> -<edge id="114" source="49.0" target="11.0" weight="2.0"/> -<edge id="113" source="49.0" target="26.0" weight="3.0"/> -<edge id="116" source="50.0" target="24.0"/> -<edge id="115" source="50.0" target="49.0"/> -<edge id="119" source="51.0" target="11.0" weight="2.0"/> -<edge id="118" source="51.0" target="26.0" weight="2.0"/> -<edge id="117" source="51.0" target="49.0" weight="9.0"/> -<edge id="121" source="52.0" target="39.0"/> -<edge id="120" source="52.0" target="51.0"/> -<edge id="122" source="53.0" target="51.0"/> -<edge id="125" source="54.0" target="26.0"/> -<edge id="124" source="54.0" target="49.0"/> -<edge id="123" source="54.0" target="51.0" weight="2.0"/> -<edge id="131" source="55.0" target="11.0" weight="19.0"/> -<edge id="132" source="55.0" target="16.0"/> -<edge id="133" source="55.0" target="25.0" weight="2.0"/> -<edge id="130" source="55.0" target="26.0" weight="21.0"/> -<edge id="128" source="55.0" target="39.0"/> -<edge id="134" source="55.0" target="41.0" weight="5.0"/> -<edge id="135" source="55.0" target="48.0" weight="4.0"/> -<edge id="127" source="55.0" target="49.0" weight="12.0"/> -<edge id="126" source="55.0" target="51.0" weight="6.0"/> -<edge id="129" source="55.0" target="54.0"/> -<edge id="136" source="56.0" target="49.0"/> -<edge id="137" source="56.0" target="55.0"/> -<edge id="139" source="57.0" target="41.0"/> -<edge id="140" source="57.0" target="48.0"/> -<edge id="138" source="57.0" target="55.0"/> -<edge id="145" source="58.0" target="11.0" weight="4.0"/> -<edge id="143" source="58.0" target="27.0" weight="6.0"/> -<edge id="142" source="58.0" target="48.0" weight="7.0"/> -<edge id="141" source="58.0" target="55.0" weight="7.0"/> -<edge id="144" source="58.0" target="57.0"/> -<edge id="148" source="59.0" target="48.0" weight="6.0"/> -<edge id="147" source="59.0" target="55.0" weight="5.0"/> -<edge id="149" source="59.0" target="57.0" weight="2.0"/> -<edge id="146" source="59.0" target="58.0" weight="15.0"/> -<edge id="150" source="60.0" target="48.0"/> -<edge id="151" source="60.0" target="58.0" weight="4.0"/> -<edge id="152" source="60.0" target="59.0" weight="2.0"/> -<edge id="153" source="61.0" target="48.0" weight="2.0"/> -<edge id="158" source="61.0" target="55.0"/> -<edge id="157" source="61.0" target="57.0"/> -<edge id="154" source="61.0" target="58.0" weight="6.0"/> -<edge id="156" source="61.0" target="59.0" weight="5.0"/> -<edge id="155" source="61.0" target="60.0" weight="2.0"/> -<edge id="164" source="62.0" target="41.0"/> -<edge id="162" source="62.0" target="48.0" weight="7.0"/> -<edge id="159" source="62.0" target="55.0" weight="9.0"/> -<edge id="163" source="62.0" target="57.0" weight="2.0"/> -<edge id="160" source="62.0" target="58.0" weight="17.0"/> -<edge id="161" source="62.0" target="59.0" weight="13.0"/> -<edge id="166" source="62.0" target="60.0" weight="3.0"/> -<edge id="165" source="62.0" target="61.0" weight="6.0"/> -<edge id="168" source="63.0" target="48.0" weight="5.0"/> -<edge id="174" source="63.0" target="55.0"/> -<edge id="170" source="63.0" target="57.0" weight="2.0"/> -<edge id="171" source="63.0" target="58.0" weight="4.0"/> -<edge id="167" source="63.0" target="59.0" weight="5.0"/> -<edge id="173" source="63.0" target="60.0" weight="2.0"/> -<edge id="172" source="63.0" target="61.0" weight="3.0"/> -<edge id="169" source="63.0" target="62.0" weight="6.0"/> -<edge id="184" source="64.0" target="11.0"/> -<edge id="177" source="64.0" target="48.0" weight="5.0"/> -<edge id="175" source="64.0" target="55.0" weight="5.0"/> -<edge id="183" source="64.0" target="57.0"/> -<edge id="179" source="64.0" target="58.0" weight="10.0"/> -<edge id="182" source="64.0" target="59.0" weight="9.0"/> -<edge id="181" source="64.0" target="60.0" weight="2.0"/> -<edge id="180" source="64.0" target="61.0" weight="6.0"/> -<edge id="176" source="64.0" target="62.0" weight="12.0"/> -<edge id="178" source="64.0" target="63.0" weight="4.0"/> -<edge id="187" source="65.0" target="48.0" weight="3.0"/> -<edge id="194" source="65.0" target="55.0" weight="2.0"/> -<edge id="193" source="65.0" target="57.0"/> -<edge id="189" source="65.0" target="58.0" weight="5.0"/> -<edge id="192" source="65.0" target="59.0" weight="5.0"/> -<edge id="191" source="65.0" target="60.0" weight="2.0"/> -<edge id="190" source="65.0" target="61.0" weight="5.0"/> -<edge id="188" source="65.0" target="62.0" weight="5.0"/> -<edge id="185" source="65.0" target="63.0" weight="5.0"/> -<edge id="186" source="65.0" target="64.0" weight="7.0"/> -<edge id="200" source="66.0" target="48.0"/> -<edge id="196" source="66.0" target="58.0" weight="3.0"/> -<edge id="197" source="66.0" target="59.0"/> -<edge id="203" source="66.0" target="60.0"/> -<edge id="202" source="66.0" target="61.0"/> -<edge id="198" source="66.0" target="62.0" weight="2.0"/> -<edge id="201" source="66.0" target="63.0"/> -<edge id="195" source="66.0" target="64.0" weight="3.0"/> -<edge id="199" source="66.0" target="65.0" weight="2.0"/> -<edge id="204" source="67.0" target="57.0" weight="3.0"/> -<edge id="206" source="68.0" target="11.0"/> -<edge id="207" source="68.0" target="24.0"/> -<edge id="205" source="68.0" target="25.0" weight="5.0"/> -<edge id="208" source="68.0" target="27.0"/> -<edge id="210" source="68.0" target="41.0"/> -<edge id="209" source="68.0" target="48.0"/> -<edge id="213" source="69.0" target="11.0"/> -<edge id="214" source="69.0" target="24.0"/> -<edge id="211" source="69.0" target="25.0" weight="6.0"/> -<edge id="215" source="69.0" target="27.0" weight="2.0"/> -<edge id="217" source="69.0" target="41.0"/> -<edge id="216" source="69.0" target="48.0"/> -<edge id="212" source="69.0" target="68.0" weight="6.0"/> -<edge id="221" source="70.0" target="11.0"/> -<edge id="222" source="70.0" target="24.0"/> -<edge id="218" source="70.0" target="25.0" weight="4.0"/> -<edge id="223" source="70.0" target="27.0"/> -<edge id="224" source="70.0" target="41.0"/> -<edge id="225" source="70.0" target="58.0"/> -<edge id="220" source="70.0" target="68.0" weight="4.0"/> -<edge id="219" source="70.0" target="69.0" weight="4.0"/> -<edge id="230" source="71.0" target="11.0"/> -<edge id="233" source="71.0" target="25.0"/> -<edge id="226" source="71.0" target="27.0"/> -<edge id="232" source="71.0" target="41.0"/> -<edge id="231" source="71.0" target="48.0"/> -<edge id="228" source="71.0" target="68.0" weight="2.0"/> -<edge id="227" source="71.0" target="69.0" weight="2.0"/> -<edge id="229" source="71.0" target="70.0" weight="2.0"/> -<edge id="236" source="72.0" target="11.0"/> -<edge id="234" source="72.0" target="26.0" weight="2.0"/> -<edge id="235" source="72.0" target="27.0"/> -<edge id="237" source="73.0" target="48.0" weight="2.0"/> -<edge id="238" source="74.0" target="48.0" weight="2.0"/> -<edge id="239" source="74.0" target="73.0" weight="3.0"/> -<edge id="242" source="75.0" target="25.0" weight="3.0"/> -<edge id="244" source="75.0" target="41.0"/> -<edge id="243" source="75.0" target="48.0"/> -<edge id="241" source="75.0" target="68.0" weight="3.0"/> -<edge id="240" source="75.0" target="69.0" weight="3.0"/> -<edge id="245" source="75.0" target="70.0"/> -<edge id="246" source="75.0" target="71.0"/> -<edge id="252" source="76.0" target="48.0"/> -<edge id="253" source="76.0" target="58.0"/> -<edge id="251" source="76.0" target="62.0"/> -<edge id="250" source="76.0" target="63.0"/> -<edge id="247" source="76.0" target="64.0"/> -<edge id="248" source="76.0" target="65.0"/> -<edge id="249" source="76.0" target="66.0"/> -</edges> -</graph> -</gexf> diff --git a/gephi-desktop/static/datasets/LesMiserables.pdf b/gephi-desktop/static/datasets/LesMiserables.pdf deleted file mode 100644 index d2ee1c1..0000000 Binary files a/gephi-desktop/static/datasets/LesMiserables.pdf and /dev/null differ diff --git a/gephi-desktop/static/datasets/LesMiserables.svg b/gephi-desktop/static/datasets/LesMiserables.svg deleted file mode 100644 index 9806838..0000000 --- a/gephi-desktop/static/datasets/LesMiserables.svg +++ /dev/null @@ -1,1087 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > -<svg contentScriptType="text/ecmascript" width="210mm" - xmlns:xlink="http://www.w3.org/1999/xlink" zoomAndPan="magnify" - contentStyleType="text/css" viewBox="-905 -648 1506 1477" height="297mm" - preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" - version="1.1"> - <g id="edges"> - <path fill="none" - d="M 455.295166,-41.912575 C 476.026703,-60.274803 534.667358,-56.720825 553.029602,-35.989277" - stroke-width="4.0" stroke="#5fb607"/> - <path fill="none" - d="M 476.118958,-4.553086 C 485.213867,-26.222454 531.360229,-45.084167 553.029602,-35.989277" - stroke-width="5.0" stroke="#5fb607"/> - <path fill="none" - d="M 476.118958,-4.553086 C 464.482300,-7.860226 451.988037,-30.275919 455.295166,-41.912575" - stroke-width="3.0" stroke="#5fb607"/> - <path fill="none" - d="M 79.317276,42.918587 C 158.278183,-67.605453 442.505554,-114.950172 553.029602,-35.989277" - stroke-width="2.5" stroke="#b60707"/> - <path fill="none" - d="M 79.317276,42.918587 C 137.546616,-49.243225 363.133362,-100.141922 455.295166,-41.912575" - stroke-width="1.5" stroke="#b60707"/> - <path fill="none" - d="M 79.317276,42.918587 C 149.183273,-45.936092 387.264282,-74.419098 476.118958,-4.553086" - stroke-width="1.5" stroke="#b60707"/> - <path fill="none" - d="M 172.620361,399.541229 C 82.635223,346.877319 26.653366,132.903732 79.317276,42.918587" - stroke-width="0.5" stroke="#b6078a"/> - <path fill="none" - d="M 31.142715,784.914368 C -4.271578,762.296143 -23.465683,675.247314 -0.847456,639.833069" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 99.263840,772.926514 C 52.622887,766.330078 -7.443886,686.474060 -0.847456,639.833069" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 99.263840,772.926514 C 88.037186,788.948303 47.164513,796.140991 31.142715,784.914368" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M -9.457441,729.371826 C -25.643196,709.742065 -20.477207,656.018860 -0.847456,639.833069" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M -9.457441,729.371826 C 9.771098,732.360291 34.131191,765.685791 31.142715,784.914368" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M -9.457441,729.371826 C 20.997755,716.338501 86.230515,742.471313 99.263840,772.926514" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 57.925858,709.506531 C 32.236504,707.326477 -3.027486,665.522400 -0.847456,639.833069" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 57.925858,709.506531 C 67.650795,729.944702 51.580914,775.189453 31.142715,784.914368" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 57.925858,709.506531 C 78.877449,713.922974 103.680244,751.974915 99.263840,772.926514" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 57.925858,709.506531 C 48.422256,726.956299 7.992278,738.875427 -9.457441,729.371826" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 92.407631,650.472900 C 71.628647,666.995911 15.675596,660.612061 -0.847456,639.833069" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 92.407631,650.472900 C 107.042946,689.614197 70.283997,770.279053 31.142715,784.914368" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 92.407631,650.472900 C 118.269592,673.592407 122.383324,747.064575 99.263840,772.926514" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 92.407631,650.472900 C 87.814400,686.625732 26.695360,733.965088 -9.457441,729.371826" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 92.407631,650.472900 C 97.318001,669.175964 76.628937,704.596191 57.925858,709.506531" - stroke-width="2.5" stroke="#b6078a"/> - <path fill="none" - d="M 136.356720,708.207825 C 95.240936,721.973755 12.918427,680.948853 -0.847456,639.833069" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 136.356720,708.207825 C 130.655228,744.591919 67.526825,790.615845 31.142715,784.914368" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 136.356720,708.207825 C 141.881882,728.570129 119.626160,767.401367 99.263840,772.926514" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 136.356720,708.207825 C 111.426689,741.603455 23.938194,754.301880 -9.457441,729.371826" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 136.356720,708.207825 C 120.930290,724.153748 73.871773,724.932922 57.925858,709.506531" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 136.356720,708.207825 C 116.019920,705.450623 89.650467,670.809692 92.407631,650.472900" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C -9.616798,356.337463 -2.149025,119.406372 79.317276,42.918587" - stroke-width="4.5" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 80.368347,409.001404 143.817978,386.043854 172.620361,399.541229" - stroke-width="1.0" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 93.733154,491.753326 53.102093,612.970886 -0.847456,639.833069" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 129.147461,514.371521 107.710487,722.637878 31.142715,784.914368" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 140.374115,498.349731 159.809814,699.423401 99.263840,772.926514" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 109.918915,511.383057 64.121857,686.323914 -9.457441,729.371826" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 119.422516,493.933350 114.055435,656.954956 57.925858,709.506531" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 114.512146,475.230255 129.834137,602.831787 92.407631,650.472900" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 66.870987,437.803772 C 134.848938,477.987427 176.540375,640.229858 136.356720,708.207825" - stroke-width="2.0" stroke="#b6078a"/> - <path fill="none" - d="M 114.947693,-126.232841 C 141.651886,-85.276474 120.273643,16.214386 79.317276,42.918587" - stroke-width="3.5" stroke="#5f07b6"/> - <path fill="none" - d="M 114.947693,-126.232841 C 218.139679,-3.810173 189.293655,334.611816 66.870987,437.803772" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M 65.500114,-218.798996 C 120.607071,-169.218903 128.897354,-12.188363 79.317276,42.918587" - stroke-width="6.0" stroke="#5f07b6"/> - <path fill="none" - d="M 65.500114,-218.798996 C 197.094864,-87.752602 197.917389,306.209045 66.870987,437.803772" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 65.500114,-218.798996 C 93.902863,-210.175278 123.571404,-154.635590 114.947693,-126.232841" - stroke-width="6.5" stroke="#5f07b6"/> - <path fill="none" - d="M -85.907631,18.669367 C -48.012802,-9.525772 51.122139,5.023758 79.317276,42.918587" - stroke-width="15.5" stroke="#b68a07"/> - <path fill="none" - d="M -85.907631,18.669367 C 55.337135,125.890060 106.373245,498.588318 -0.847456,639.833069" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -85.907631,18.669367 C -74.717010,-50.482140 45.796185,-137.423462 114.947693,-126.232841" - stroke-width="2.0" stroke="#b68a07"/> - <path fill="none" - d="M -85.907631,18.669367 C -103.119759,-59.105858 -12.275108,-201.586884 65.500114,-218.798996" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -28.801874,-81.992874 C 17.804249,-78.634415 82.675735,-3.687536 79.317276,42.918587" - stroke-width="8.5" stroke="#5f07b6"/> - <path fill="none" - d="M -28.801874,-81.992874 C 94.292023,2.831882 151.695740,314.709869 66.870987,437.803772" - stroke-width="2.5" stroke="#5f07b6"/> - <path fill="none" - d="M -28.801874,-81.992874 C -8.899953,-119.590782 77.349785,-146.134766 114.947693,-126.232841" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M -28.801874,-81.992874 C -37.302704,-128.214493 19.278494,-210.298172 65.500114,-218.798996" - stroke-width="2.5" stroke="#5f07b6"/> - <path fill="none" - d="M -28.801874,-81.992874 C -20.090576,-50.439270 -54.354031,9.958069 -85.907631,18.669367" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 241.329514,62.764393 C 204.957901,91.197678 107.750565,79.290199 79.317276,42.918587" - stroke-width="4.0" stroke="#07b633"/> - <path fill="none" - d="M 241.329514,62.764393 C 158.351791,87.839218 -3.727051,0.984856 -28.801874,-81.992874" - stroke-width="0.5" stroke="#07b633"/> - <path fill="none" - d="M 330.092896,319.665741 C 224.588348,314.471436 74.122978,148.423157 79.317276,42.918587" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 330.092896,319.665741 C 301.076111,395.937714 143.142975,466.820557 66.870987,437.803772" - stroke-width="0.5" stroke="#b60707"/> - <path fill="none" - d="M 330.092896,319.665741 C 177.982208,311.112976 -37.354637,70.117813 -28.801874,-81.992874" - stroke-width="0.5" stroke="#b60707"/> - <path fill="none" - d="M -63.231281,452.505188 C -40.151115,423.544464 37.910248,414.723602 66.870987,437.803772" - stroke-width="0.5" stroke="#b6078a"/> - <path fill="none" - d="M 10.524757,299.629272 C -27.058878,234.528641 14.216629,80.502220 79.317276,42.918587" - stroke-width="1.5" stroke="#b6078a"/> - <path fill="none" - d="M 10.524757,299.629272 C 49.428902,315.994904 83.236641,398.899628 66.870987,437.803772" - stroke-width="1.0" stroke="#b6078a"/> - <path fill="none" - d="M 10.524757,299.629272 C -73.665001,231.170166 -97.260979,2.196885 -28.801874,-81.992874" - stroke-width="0.5" stroke="#b6078a"/> - <path fill="none" - d="M 10.524757,299.629272 C 26.348732,344.955688 -17.904888,436.681213 -63.231281,452.505188" - stroke-width="1.0" stroke="#b6078a"/> - <path fill="none" - d="M 111.189552,202.063034 C 72.986206,176.608597 53.862846,81.121933 79.317276,42.918587" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 111.189552,202.063034 C 26.380089,173.250153 -57.614769,2.816591 -28.801874,-81.992874" - stroke-width="0.5" stroke="#b60707"/> - <path fill="none" - d="M 408.768524,218.987061 C 307.664612,249.663605 109.993820,144.022522 79.317276,42.918587" - stroke-width="1.5" stroke="#b60707"/> - <path fill="none" - d="M 408.768524,218.987061 C 413.169128,254.857925 365.963776,315.265137 330.092896,319.665741" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 413.957275,286.501831 C 298.312622,304.713196 97.528618,158.563232 79.317276,42.918587" - stroke-width="1.5" stroke="#b60707"/> - <path fill="none" - d="M 413.957275,286.501831 C 403.817169,309.907501 353.498566,329.805847 330.092896,319.665741" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 413.957275,286.501831 C 399.416565,274.036621 396.303314,233.527771 408.768524,218.987061" - stroke-width="1.5" stroke="#b60707"/> - <path fill="none" - d="M 458.471649,354.037201 C 320.417053,367.644348 92.924423,180.973175 79.317276,42.918587" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 458.471649,354.037201 C 425.921600,372.838654 348.894348,352.215790 330.092896,319.665741" - stroke-width="0.5" stroke="#b60707"/> - <path fill="none" - d="M 458.471649,354.037201 C 421.520996,336.967773 391.699097,255.937714 408.768524,218.987061" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 458.471649,354.037201 C 436.061707,349.432983 409.353058,308.911774 413.957275,286.501831" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 519.267273,305.613220 C 378.738342,341.064270 114.768349,183.447525 79.317276,42.918587" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 519.267273,305.613220 C 484.242920,346.258606 370.738281,354.690094 330.092896,319.665741" - stroke-width="0.5" stroke="#b60707"/> - <path fill="none" - d="M 519.267273,305.613220 C 479.842285,310.387756 413.543060,258.412048 408.768524,218.987061" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 519.267273,305.613220 C 494.382996,322.852966 431.197021,311.386108 413.957275,286.501831" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 519.267273,305.613220 C 516.792969,327.457123 480.315552,356.511536 458.471649,354.037201" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 497.434448,233.788193 C 375.637085,279.237701 124.766785,164.715942 79.317276,42.918587" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 497.434448,233.788193 C 481.141632,284.432007 380.736725,335.958557 330.092896,319.665741" - stroke-width="0.5" stroke="#b60707"/> - <path fill="none" - d="M 497.434448,233.788193 C 476.741028,248.561157 423.541473,239.680466 408.768524,218.987061" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 497.434448,233.788193 C 491.281738,261.026367 441.195435,292.654541 413.957275,286.501831" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 497.434448,233.788193 C 513.691650,265.630554 490.314026,337.779968 458.471649,354.037201" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M 497.434448,233.788193 C 516.166016,243.786636 529.265686,286.881653 519.267273,305.613220" - stroke-width="1.0" stroke="#b60707"/> - <path fill="none" - d="M -407.576660,116.798080 C -380.080719,-44.936691 -96.234657,-246.294937 65.500114,-218.798996" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -87.836143,-361.782959 C -0.169350,-355.229706 121.500946,-213.899628 114.947693,-126.232841" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M -87.836143,-361.782959 C -28.572098,-363.853424 63.429657,-278.063049 65.500114,-218.798996" - stroke-width="1.5" stroke="#5f07b6"/> - <path fill="none" - d="M 4.809565,-329.301819 C 67.450989,-310.715637 133.533859,-188.874268 114.947693,-126.232841" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 4.809565,-329.301819 C 39.048241,-319.339386 75.462570,-253.037674 65.500114,-218.798996" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M 4.809565,-329.301819 C -20.215805,-317.268890 -75.803238,-336.757599 -87.836143,-361.782959" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M -24.738543,173.737000 C -30.091063,126.762154 32.342430,48.271103 79.317276,42.918587" - stroke-width="1.5" stroke="#b68a07"/> - <path fill="none" - d="M -24.738543,173.737000 C -67.985893,154.957291 -104.687340,61.916714 -85.907631,18.669367" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -24.738543,173.737000 C -76.697182,123.403694 -79.135178,-30.034235 -28.801874,-81.992874" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M 312.542053,85.780510 C 257.324707,123.853088 117.389847,98.135925 79.317276,42.918587" - stroke-width="0.5" stroke="#07b633"/> - <path fill="none" - d="M 312.542053,85.780510 C 293.696350,95.419792 250.968796,81.610123 241.329514,62.764393" - stroke-width="1.5" stroke="#07b633"/> - <path fill="none" - d="M -513.975830,-215.067291 C -343.720032,-282.128723 12.255833,-127.337204 79.317276,42.918587" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -513.975830,-215.067291 C -398.826965,-331.708832 -51.141422,-333.947845 65.500114,-218.798996" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -513.975830,-215.067291 C -390.326172,-285.487183 -99.221779,-205.642548 -28.801874,-81.992874" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -513.975830,-215.067291 C -572.982422,-131.924316 -786.206787,-95.719780 -869.349731,-154.726364" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -239.127090,14.188005 C -169.692108,-43.754753 21.374516,-26.516407 79.317276,42.918587" - stroke-width="1.0" stroke="#b68a07"/> - <path fill="none" - d="M -239.127090,14.188005 C -207.586929,-15.559614 -115.655251,-12.870798 -85.907631,18.669367" - stroke-width="1.5" stroke="#b68a07"/> - <path fill="none" - d="M -189.557648,174.874115 C -188.877975,53.751656 -6.174770,-126.912514 114.947693,-126.232841" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -189.557648,174.874115 C -231.608765,152.650787 -261.350403,56.239113 -239.127090,14.188005" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -274.456451,80.180954 C -211.154175,1.973732 1.110057,-20.383686 79.317276,42.918587" - stroke-width="1.0" stroke="#b68a07"/> - <path fill="none" - d="M -274.456451,80.180954 C -249.049011,30.168873 -135.919724,-6.738083 -85.907631,18.669367" - stroke-width="1.0" stroke="#b68a07"/> - <path fill="none" - d="M -274.456451,80.180954 C -280.589142,59.916489 -259.391541,20.320724 -239.127090,14.188005" - stroke-width="4.5" stroke="#b68a07"/> - <path fill="none" - d="M -520.020386,247.343750 C -523.640808,198.745880 -456.174530,120.418465 -407.576660,116.798080" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -520.020386,247.343750 C -504.340149,164.798401 -357.001801,64.500717 -274.456451,80.180954" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -331.118530,168.561996 C -312.054871,89.541283 -164.928345,-0.394295 -85.907631,18.669367" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -331.118530,168.561996 C -343.595032,119.288910 -288.400177,26.664516 -239.127090,14.188005" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -331.118530,168.561996 C -337.462311,139.553375 -303.465088,86.524750 -274.456451,80.180954" - stroke-width="1.0" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -136.163498,-145.034882 49.108833,-50.387863 79.317276,42.918587" - stroke-width="9.5" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -32.813538,-9.619034 104.359955,443.176636 -0.847456,639.833069" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -191.270462,-194.614960 -14.288406,-256.998505 65.500114,-218.798996" - stroke-width="1.0" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -174.058334,-116.839745 -87.920929,-36.742260 -85.907631,18.669367" - stroke-width="10.5" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -218.766403,-32.880199 -325.630432,106.094513 -407.576660,116.798080" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -250.534485,-192.544510 -165.554214,-340.718414 -87.836143,-361.782959" - stroke-width="2.5" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -306.419281,-77.973450 -477.122803,-138.117950 -513.975830,-215.067291" - stroke-width="2.0" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -205.598495,-87.092133 -211.392776,-9.683458 -239.127090,14.188005" - stroke-width="6.0" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -199.465775,-66.827667 -226.457657,50.176769 -274.456451,80.180954" - stroke-width="3.0" stroke="#b68a07"/> - <path fill="none" - d="M -229.469955,-114.826447 C -193.121979,-37.819046 -254.111130,132.214020 -331.118530,168.561996" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -457.482025,65.455307 C -424.064484,11.530861 -293.051514,-19.229519 -239.127090,14.188005" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -457.482025,65.455307 C -447.935974,-16.203457 -311.128723,-124.372513 -229.469955,-114.826447" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -437.938446,-599.550171 C -320.364532,-622.017151 -110.303162,-479.356873 -87.836143,-361.782959" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -437.938446,-599.550171 C -376.249359,-507.446075 -421.871765,-276.756378 -513.975830,-215.067291" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -437.938446,-599.550171 C -299.299988,-544.299133 -174.218918,-253.464890 -229.469955,-114.826447" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -368.101929,-303.678345 C -209.298721,-323.842804 59.152817,-115.884636 79.317276,42.918587" - stroke-width="2.0" stroke="#07b6b6"/> - <path fill="none" - d="M -368.101929,-303.678345 C -255.904816,-327.201263 -52.324787,-194.189972 -28.801874,-81.992874" - stroke-width="3.0" stroke="#07b6b6"/> - <path fill="none" - d="M -368.101929,-303.678345 C -379.554504,-256.781372 -467.078857,-203.614731 -513.975830,-215.067291" - stroke-width="3.5" stroke="#07b6b6"/> - <path fill="none" - d="M -368.101929,-303.678345 C -302.605164,-293.634338 -219.425964,-180.323227 -229.469955,-114.826447" - stroke-width="3.5" stroke="#07b6b6"/> - <path fill="none" - d="M -368.101929,-303.678345 C -441.243622,-348.885406 -483.145508,-526.408508 -437.938446,-599.550171" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -456.676819,-310.580475 C -449.033997,-280.018036 -483.413391,-222.710114 -513.975830,-215.067291" - stroke-width="3.0" stroke="#07b6b6"/> - <path fill="none" - d="M -456.676819,-310.580475 C -372.084625,-316.871033 -235.760513,-199.418625 -229.469955,-114.826447" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -456.676819,-310.580475 C -510.723083,-372.122101 -499.480072,-545.503906 -437.938446,-599.550171" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -456.676819,-310.580475 C -437.581421,-326.915009 -384.436462,-322.773743 -368.101929,-303.678345" - stroke-width="7.5" stroke="#07b6b6"/> - <path fill="none" - d="M -558.620056,-534.685425 C -485.767578,-479.690613 -458.981018,-287.919739 -513.975830,-215.067291" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -558.620056,-534.685425 C -474.315002,-526.587646 -360.004150,-387.983398 -368.101929,-303.678345" - stroke-width="2.0" stroke="#07b6b6"/> - <path fill="none" - d="M -558.620056,-534.685425 C -493.410400,-510.253082 -432.244476,-375.790100 -456.676819,-310.580475" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -472.868011,-470.360168 C -430.031006,-411.080048 -454.695709,-257.904297 -513.975830,-215.067291" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -472.868011,-470.360168 C -353.081665,-447.933044 -207.042816,-234.612808 -229.469955,-114.826447" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -472.868011,-470.360168 C -491.720123,-503.184082 -470.762360,-580.698059 -437.938446,-599.550171" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -472.868011,-470.360168 C -418.578430,-457.977020 -355.718781,-357.967926 -368.101929,-303.678345" - stroke-width="3.0" stroke="#07b6b6"/> - <path fill="none" - d="M -472.868011,-470.360168 C -437.673828,-441.642487 -427.959137,-345.774658 -456.676819,-310.580475" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -472.868011,-470.360168 C -502.883484,-466.074799 -554.334717,-504.669952 -558.620056,-534.685425" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -344.995575,-448.259583 -148.210663,-432.598328 -87.836143,-361.782959" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -400.880341,-333.688538 -459.779297,-229.997864 -513.975830,-215.067291" - stroke-width="3.5" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -323.931030,-370.541534 -212.126434,-206.706375 -229.469955,-114.826447" - stroke-width="4.5" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -462.569458,-425.792572 -475.845947,-552.791687 -437.938446,-599.550171" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -389.427795,-380.585541 -360.802399,-330.061493 -368.101929,-303.678345" - stroke-width="8.5" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -408.523224,-364.250977 -433.042725,-317.868195 -456.676819,-310.580475" - stroke-width="6.5" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -473.732849,-388.683319 -559.418274,-476.763519 -558.620056,-534.685425" - stroke-width="1.5" stroke="#07b6b6"/> - <path fill="none" - d="M -415.810944,-387.885071 C -443.717377,-392.968689 -477.951630,-442.453735 -472.868011,-470.360168" - stroke-width="3.0" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -563.267334,-338.083893 -506.764526,-259.947144 -513.975830,-215.067291" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -486.317993,-374.936890 -259.111664,-236.655640 -229.469955,-114.826447" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -624.956482,-430.187927 -522.831177,-582.740906 -437.938446,-599.550171" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -551.814819,-384.980896 -407.787628,-360.010773 -368.101929,-303.678345" - stroke-width="2.0" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -570.910217,-368.646332 -480.027954,-347.817474 -456.676819,-310.580475" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -636.119812,-393.078674 -606.403564,-506.712799 -558.620056,-534.685425" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -606.104370,-397.364044 -524.936829,-472.403015 -472.868011,-470.360168" - stroke-width="1.5" stroke="#07b6b6"/> - <path fill="none" - d="M -608.147217,-345.295197 C -578.197937,-392.280426 -462.796173,-417.834351 -415.810944,-387.885071" - stroke-width="3.0" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -310.864624,-409.141785 44.333252,-158.895966 79.317276,42.918587" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -481.120453,-342.080322 -481.898407,-246.626053 -513.975830,-215.067291" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -404.171082,-378.933319 -234.245560,-223.334549 -229.469955,-114.826447" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -542.809509,-434.184387 -497.965088,-569.419861 -437.938446,-599.550171" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -469.667847,-388.977325 -382.921509,-346.689697 -368.101929,-303.678345" - stroke-width="5.0" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -488.763275,-372.642761 -455.161835,-334.496399 -456.676819,-310.580475" - stroke-width="4.5" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -553.972900,-397.075104 -581.537415,-493.391724 -558.620056,-534.685425" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -523.957458,-401.360474 -500.070740,-459.081940 -472.868011,-470.360168" - stroke-width="3.0" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -496.050995,-396.276855 -437.930054,-404.513275 -415.810944,-387.885071" - stroke-width="6.0" stroke="#07b6b6"/> - <path fill="none" - d="M -512.679199,-374.157745 C -526.000305,-349.291626 -583.281067,-331.974121 -608.147217,-345.295197" - stroke-width="2.0" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -517.261169,-404.005280 -481.600128,-271.217041 -513.975830,-215.067291" - stroke-width="1.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -440.311829,-440.858276 -233.947235,-247.925552 -229.469955,-114.826447" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -578.950317,-496.109344 -497.666809,-594.010803 -437.938446,-599.550171" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -505.808594,-450.902252 -382.623199,-371.280670 -368.101929,-303.678345" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -524.904053,-434.567719 -454.863556,-359.087402 -456.676819,-310.580475" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -590.113647,-459.000061 -581.239136,-517.982727 -558.620056,-534.685425" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -560.098206,-463.285400 -499.772430,-483.672913 -472.868011,-470.360168" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -532.191772,-458.201782 -437.631744,-429.104248 -415.810944,-387.885071" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -562.141052,-411.216553 -582.982788,-356.565094 -608.147217,-345.295197" - stroke-width="2.5" stroke="#07b6b6"/> - <path fill="none" - d="M -573.410950,-436.380981 C -548.819946,-436.082703 -512.380920,-398.748749 -512.679199,-374.157745" - stroke-width="3.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -593.795776,-463.237427 -493.657532,-302.144379 -513.975830,-215.067291" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -582.343201,-510.134460 -394.680664,-402.208008 -368.101929,-303.678345" - stroke-width="1.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -601.438599,-493.799896 -466.920959,-390.014740 -456.676819,-310.580475" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -666.648254,-518.232239 -593.296570,-548.910034 -558.620056,-534.685425" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -636.632813,-522.517578 -511.829895,-514.600220 -472.868011,-470.360168" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -608.726318,-517.433960 -449.689209,-460.031586 -415.810944,-387.885071" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -638.675659,-470.448761 -595.040222,-387.492432 -608.147217,-345.295197" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -625.354553,-495.314850 -524.438354,-429.676086 -512.679199,-374.157745" - stroke-width="1.5" stroke="#07b6b6"/> - <path fill="none" - d="M -680.872864,-483.555725 C -649.945557,-495.613159 -585.468384,-467.308289 -573.410950,-436.380981" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M 168.606064,-397.189941 C 238.770020,-291.310486 185.196747,-27.245361 79.317276,42.918587" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 168.606064,-397.189941 C 212.065811,-332.266846 179.870789,-169.692581 114.947693,-126.232841" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 168.606064,-397.189941 C 183.663071,-340.890564 121.799500,-233.856003 65.500114,-218.798996" - stroke-width="2.5" stroke="#5f07b6"/> - <path fill="none" - d="M 168.606064,-397.189941 C 192.163910,-294.668915 73.719139,-105.550697 -28.801874,-81.992874" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 168.606064,-397.189941 C 124.399025,-338.820099 -29.466307,-317.575897 -87.836143,-361.782959" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 168.606064,-397.189941 C 68.514206,-224.249023 -341.034912,-114.975433 -513.975830,-215.067291" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 180.293701,-251.488693 160.970444,-25.852421 79.317276,42.918587" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 153.589493,-292.445068 155.644501,-168.299652 114.947693,-126.232841" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 125.186745,-301.068787 97.573204,-232.463058 65.500114,-218.798996" - stroke-width="3.0" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 133.687576,-254.847168 49.492836,-104.157761 -28.801874,-81.992874" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 65.922699,-298.998322 -53.692596,-316.182983 -87.836143,-361.782959" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 10.037884,-184.427231 -365.261169,-113.582489 -513.975830,-215.067291" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 111.522682,-333.141876 C 110.129745,-357.368164 144.379776,-395.797028 168.606064,-397.189941" - stroke-width="3.0" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 154.833176,-323.507172 166.191193,-51.527359 79.317276,42.918587" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 128.128967,-364.463531 160.865250,-193.974594 114.947693,-126.232841" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 99.726227,-373.087280 102.793961,-258.138000 65.500114,-218.798996" - stroke-width="2.0" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 108.227058,-326.865631 54.713600,-129.832703 -28.801874,-81.992874" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 40.462185,-371.016785 -48.471840,-341.857910 -87.836143,-361.782959" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C -3.970049,-303.342712 -261.063568,-239.321060 -368.101929,-303.678345" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 84.669228,-429.386627 149.600525,-421.471954 168.606064,-397.189941" - stroke-width="2.0" stroke="#5f07b6"/> - <path fill="none" - d="M 60.387230,-410.381104 C 86.062164,-405.160339 116.743439,-358.816803 111.522682,-333.141876" - stroke-width="2.0" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 140.946533,-411.118317 177.567688,-79.745918 79.317276,42.918587" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 85.839592,-460.698364 114.170441,-286.356537 65.500114,-218.798996" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 94.340424,-414.476776 66.090080,-158.051270 -28.801874,-81.992874" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 26.575550,-458.627930 -37.095352,-370.076477 -87.836143,-361.782959" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C -29.309258,-344.056854 -348.663971,-167.476013 -513.975830,-215.067291" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 70.782593,-516.997742 160.977020,-449.690521 168.606064,-397.189941" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 72.175529,-492.771484 128.119934,-387.035370 111.522682,-333.141876" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M 18.282034,-509.368713 C 46.500595,-497.992249 71.763710,-438.599670 60.387230,-410.381104" - stroke-width="1.0" stroke="#5f07b6"/> - <path fill="none" - d="M -110.059311,155.582397 C -94.716751,95.174316 18.909197,27.576031 79.317276,42.918587" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -110.059311,155.582397 C -132.611572,123.369461 -118.120575,41.221634 -85.907631,18.669367" - stroke-width="1.0" stroke="#b68a07"/> - <path fill="none" - d="M -110.059311,155.582397 C -141.322876,91.815849 -92.568420,-50.729305 -28.801874,-81.992874" - stroke-width="0.5" stroke="#b68a07"/> - <path fill="none" - d="M -760.866211,-144.980515 C -725.505493,-208.375946 -577.371216,-250.428009 -513.975830,-215.067291" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -743.163635,-103.543877 C -719.630737,-171.686127 -582.118103,-238.600159 -513.975830,-215.067291" - stroke-width="1.0" stroke="#07b6b6"/> - <path fill="none" - d="M -743.163635,-103.543877 C -754.991516,-108.290695 -765.613037,-133.152679 -760.866211,-144.980515" - stroke-width="1.5" stroke="#07b6b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 168.792221,-425.218353 132.307098,-261.282562 65.500114,-218.798996" - stroke-width="1.5" stroke="#5f07b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 109.528183,-423.147919 -18.958708,-345.002472 -87.836143,-361.782959" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 53.643364,-308.576813 -330.527313,-142.401978 -513.975830,-215.067291" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 153.735214,-481.517731 179.113663,-424.616486 168.606064,-397.189941" - stroke-width="1.5" stroke="#5f07b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 155.128159,-457.291443 146.256577,-361.961395 111.522682,-333.141876" - stroke-width="1.5" stroke="#5f07b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 129.453232,-462.512177 89.900360,-413.525665 60.387230,-410.381104" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M 126.308670,-492.025330 C 101.234665,-473.888702 36.418682,-484.294708 18.282034,-509.368713" - stroke-width="0.5" stroke="#5f07b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -694.196350,-423.055298 -530.278076,-308.043854 -513.975830,-215.067291" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -682.743774,-469.952332 -431.301208,-408.107483 -368.101929,-303.678345" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -709.126892,-477.251862 -486.309753,-465.931061 -415.810944,-387.885071" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -739.076233,-430.266632 -631.660767,-393.391907 -608.147217,-345.295197" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -725.755127,-455.132721 -561.058899,-435.575562 -512.679199,-374.157745" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -750.346130,-455.431030 -622.088928,-473.207764 -573.410950,-436.380981" - stroke-width="0.5" stroke="#07b6b6"/> - <path fill="none" - d="M -787.172913,-406.753052 C -781.273438,-443.373596 -717.493408,-489.455200 -680.872864,-483.555725" - stroke-width="0.5" stroke="#07b6b6"/> - </g> - <g id="nodes"> - <circle fill="#5fb607" stroke-width="1.0" r="22.857143" cx="553.0296" - cy="-35.989277" stroke="#000000"/> - <circle fill="#5fb607" stroke-width="1.0" r="12.857143" cx="455.29517" - cy="-41.912575" stroke="#000000"/> - <circle fill="#5fb607" stroke-width="1.0" r="12.857143" cx="476.11896" - cy="-4.553086" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="60.0" cx="79.317276" - cy="42.918587" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="11.428572" cx="172.62036" - cy="399.54123" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="21.428572" cx="-0.847456" - cy="639.83307" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="18.57143" cx="31.142715" - cy="784.91437" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="18.57143" cx="99.26384" - cy="772.9265" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="18.57143" cx="-9.457441" - cy="729.3718" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="18.57143" cx="57.925858" - cy="709.50653" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="18.57143" cx="92.40763" - cy="650.4729" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="18.57143" cx="136.35672" - cy="708.2078" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="30.0" cx="66.87099" - cy="437.80377" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="24.285715" cx="114.94769" - cy="-126.23284" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="31.428572" cx="65.500114" - cy="-218.799" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="24.285715" cx="-85.90763" - cy="18.669367" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="32.857143" cx="-28.801874" - cy="-81.992874" stroke="#000000"/> - <circle fill="#07b633" stroke-width="1.0" r="14.285715" cx="241.32951" - cy="62.764393" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="20.0" cx="330.0929" - cy="319.66574" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="11.428572" cx="-63.23128" - cy="452.5052" stroke="#000000"/> - <circle fill="#b6078a" stroke-width="1.0" r="14.285715" cx="10.524757" - cy="299.62927" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="11.428572" cx="111.18955" - cy="202.06303" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="17.142857" cx="408.76852" - cy="218.98706" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="17.142857" cx="413.95728" - cy="286.50183" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="17.142857" cx="458.47165" - cy="354.0372" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="17.142857" cx="519.2673" - cy="305.61322" stroke="#000000"/> - <circle fill="#b60707" stroke-width="1.0" r="17.142857" cx="497.43445" - cy="233.7882" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="12.857143" cx="-407.57666" - cy="116.79808" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="24.285715" cx="-87.83614" - cy="-361.78296" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="12.857143" cx="4.8095646" - cy="-329.30182" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="12.857143" cx="-24.738543" - cy="173.737" stroke="#000000"/> - <circle fill="#07b633" stroke-width="1.0" r="11.428572" cx="312.54205" - cy="85.78051" stroke="#000000"/> - <circle fill="#0733b6" stroke-width="1.0" r="11.428572" cx="-869.34973" - cy="-154.72636" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="40.0" cx="-513.9758" - cy="-215.06729" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="18.57143" cx="-239.12709" - cy="14.188005" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="11.428572" cx="-189.55765" - cy="174.87411" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="18.57143" cx="-274.45645" - cy="80.180954" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="11.428572" cx="-520.0204" - cy="247.34375" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="14.285715" cx="-331.11853" - cy="168.562" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="35.714287" cx="-229.46996" - cy="-114.82645" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="11.428572" cx="-457.48203" - cy="65.45531" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="24.285715" cx="-437.93845" - cy="-599.5502" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="30.0" cx="-368.10193" - cy="-303.67834" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="24.285715" cx="-456.67682" - cy="-310.58047" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="21.428572" cx="-558.62006" - cy="-534.6854" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="24.285715" cx="-472.868" - cy="-470.36017" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="27.142859" cx="-415.81094" - cy="-387.88507" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="25.714287" cx="-608.1472" - cy="-345.2952" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="27.142859" cx="-512.6792" - cy="-374.15775" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="25.714287" cx="-573.41095" - cy="-436.38098" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="22.857143" cx="-680.87286" - cy="-483.55573" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="22.857143" cx="168.60606" - cy="-397.18994" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="22.857143" cx="111.52268" - cy="-333.14188" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="22.857143" cx="60.38723" - cy="-410.3811" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="21.428572" cx="18.282034" - cy="-509.3687" stroke="#000000"/> - <circle fill="#b68a07" stroke-width="1.0" r="12.857143" cx="-110.05931" - cy="155.5824" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="11.428572" cx="-760.8662" - cy="-144.98051" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="11.428572" cx="-743.16364" - cy="-103.54388" stroke="#000000"/> - <circle fill="#5f07b6" stroke-width="1.0" r="18.57143" cx="126.30867" - cy="-492.02533" stroke="#000000"/> - <circle fill="#07b6b6" stroke-width="1.0" r="18.57143" cx="-787.1729" - cy="-406.75305" stroke="#000000"/> - </g> - <g id="label borders"/> - <g id="labels"> - <text fill="#000000" x="553.0296" font-size="18" y="-35.989277" - style="text-anchor: middle" font-family="Arial"> - Myriel - </text> - <text fill="#000000" x="455.29517" font-size="18" y="-41.912575" - style="text-anchor: middle" font-family="Arial"> - MlleBaptistine - </text> - <text fill="#000000" x="476.11896" font-size="18" y="-4.553086" - style="text-anchor: middle" font-family="Arial"> - MmeMagloire - </text> - <text fill="#000000" x="79.317276" font-size="18" y="42.918587" - style="text-anchor: middle" font-family="Arial"> - Valjean - </text> - <text fill="#000000" x="172.62036" font-size="18" y="399.54123" - style="text-anchor: middle" font-family="Arial"> - Marguerite - </text> - <text fill="#000000" x="-0.847456" font-size="18" y="639.83307" - style="text-anchor: middle" font-family="Arial"> - Tholomyes - </text> - <text fill="#000000" x="31.142715" font-size="18" y="784.91437" - style="text-anchor: middle" font-family="Arial"> - Listolier - </text> - <text fill="#000000" x="99.26384" font-size="18" y="772.9265" - style="text-anchor: middle" font-family="Arial"> - Fameuil - </text> - <text fill="#000000" x="-9.457441" font-size="18" y="729.3718" - style="text-anchor: middle" font-family="Arial"> - Blacheville - </text> - <text fill="#000000" x="57.925858" font-size="18" y="709.50653" - style="text-anchor: middle" font-family="Arial"> - Favourite - </text> - <text fill="#000000" x="92.40763" font-size="18" y="650.4729" - style="text-anchor: middle" font-family="Arial"> - Dahlia - </text> - <text fill="#000000" x="136.35672" font-size="18" y="708.2078" - style="text-anchor: middle" font-family="Arial"> - Zephine - </text> - <text fill="#000000" x="66.87099" font-size="18" y="437.80377" - style="text-anchor: middle" font-family="Arial"> - Fantine - </text> - <text fill="#000000" x="114.94769" font-size="18" y="-126.23284" - style="text-anchor: middle" font-family="Arial"> - MmeThenardier - </text> - <text fill="#000000" x="65.500114" font-size="18" y="-218.799" - style="text-anchor: middle" font-family="Arial"> - Thenardier - </text> - <text fill="#000000" x="-85.90763" font-size="18" y="18.669367" - style="text-anchor: middle" font-family="Arial"> - Cosette - </text> - <text fill="#000000" x="-28.801874" font-size="18" y="-81.992874" - style="text-anchor: middle" font-family="Arial"> - Javert - </text> - <text fill="#000000" x="241.32951" font-size="18" y="62.764393" - style="text-anchor: middle" font-family="Arial"> - Fauchelevent - </text> - <text fill="#000000" x="330.0929" font-size="18" y="319.66574" - style="text-anchor: middle" font-family="Arial"> - Bamatabois - </text> - <text fill="#000000" x="-63.23128" font-size="18" y="452.5052" - style="text-anchor: middle" font-family="Arial"> - Perpetue - </text> - <text fill="#000000" x="10.524757" font-size="18" y="299.62927" - style="text-anchor: middle" font-family="Arial"> - Simplice - </text> - <text fill="#000000" x="111.18955" font-size="18" y="202.06303" - style="text-anchor: middle" font-family="Arial"> - Woman1 - </text> - <text fill="#000000" x="408.76852" font-size="18" y="218.98706" - style="text-anchor: middle" font-family="Arial"> - Judge - </text> - <text fill="#000000" x="413.95728" font-size="18" y="286.50183" - style="text-anchor: middle" font-family="Arial"> - Champmathieu - </text> - <text fill="#000000" x="458.47165" font-size="18" y="354.0372" - style="text-anchor: middle" font-family="Arial"> - Brevet - </text> - <text fill="#000000" x="519.2673" font-size="18" y="305.61322" - style="text-anchor: middle" font-family="Arial"> - Chenildieu - </text> - <text fill="#000000" x="497.43445" font-size="18" y="233.7882" - style="text-anchor: middle" font-family="Arial"> - Cochepaille - </text> - <text fill="#000000" x="-407.57666" font-size="18" y="116.79808" - style="text-anchor: middle" font-family="Arial"> - Pontmercy - </text> - <text fill="#000000" x="-87.83614" font-size="18" y="-361.78296" - style="text-anchor: middle" font-family="Arial"> - Eponine - </text> - <text fill="#000000" x="4.8095646" font-size="18" y="-329.30182" - style="text-anchor: middle" font-family="Arial"> - Anzelma - </text> - <text fill="#000000" x="-24.738543" font-size="18" y="173.737" - style="text-anchor: middle" font-family="Arial"> - Woman2 - </text> - <text fill="#000000" x="312.54205" font-size="18" y="85.78051" - style="text-anchor: middle" font-family="Arial"> - MotherInnocent - </text> - <text fill="#000000" x="-869.34973" font-size="18" y="-154.72636" - style="text-anchor: middle" font-family="Arial"> - MmeBurgon - </text> - <text fill="#000000" x="-513.9758" font-size="18" y="-215.06729" - style="text-anchor: middle" font-family="Arial"> - Gavroche - </text> - <text fill="#000000" x="-239.12709" font-size="18" y="14.188005" - style="text-anchor: middle" font-family="Arial"> - Gillenormand - </text> - <text fill="#000000" x="-189.55765" font-size="18" y="174.87411" - style="text-anchor: middle" font-family="Arial"> - Magnon - </text> - <text fill="#000000" x="-274.45645" font-size="18" y="80.180954" - style="text-anchor: middle" font-family="Arial"> - MlleGillenormand - </text> - <text fill="#000000" x="-520.0204" font-size="18" y="247.34375" - style="text-anchor: middle" font-family="Arial"> - MmePontmercy - </text> - <text fill="#000000" x="-331.11853" font-size="18" y="168.562" - style="text-anchor: middle" font-family="Arial"> - LtGillenormand - </text> - <text fill="#000000" x="-229.46996" font-size="18" y="-114.82645" - style="text-anchor: middle" font-family="Arial"> - Marius - </text> - <text fill="#000000" x="-457.48203" font-size="18" y="65.45531" - style="text-anchor: middle" font-family="Arial"> - BaronessT - </text> - <text fill="#000000" x="-437.93845" font-size="18" y="-599.5502" - style="text-anchor: middle" font-family="Arial"> - Mabeuf - </text> - <text fill="#000000" x="-368.10193" font-size="18" y="-303.67834" - style="text-anchor: middle" font-family="Arial"> - Enjolras - </text> - <text fill="#000000" x="-456.67682" font-size="18" y="-310.58047" - style="text-anchor: middle" font-family="Arial"> - Combeferre - </text> - <text fill="#000000" x="-558.62006" font-size="18" y="-534.6854" - style="text-anchor: middle" font-family="Arial"> - Prouvaire - </text> - <text fill="#000000" x="-472.868" font-size="18" y="-470.36017" - style="text-anchor: middle" font-family="Arial"> - Feuilly - </text> - <text fill="#000000" x="-415.81094" font-size="18" y="-387.88507" - style="text-anchor: middle" font-family="Arial"> - Courfeyrac - </text> - <text fill="#000000" x="-608.1472" font-size="18" y="-345.2952" - style="text-anchor: middle" font-family="Arial"> - Bahorel - </text> - <text fill="#000000" x="-512.6792" font-size="18" y="-374.15775" - style="text-anchor: middle" font-family="Arial"> - Bossuet - </text> - <text fill="#000000" x="-573.41095" font-size="18" y="-436.38098" - style="text-anchor: middle" font-family="Arial"> - Joly - </text> - <text fill="#000000" x="-680.87286" font-size="18" y="-483.55573" - style="text-anchor: middle" font-family="Arial"> - Grantaire - </text> - <text fill="#000000" x="168.60606" font-size="18" y="-397.18994" - style="text-anchor: middle" font-family="Arial"> - Gueulemer - </text> - <text fill="#000000" x="111.52268" font-size="18" y="-333.14188" - style="text-anchor: middle" font-family="Arial"> - Babet - </text> - <text fill="#000000" x="60.38723" font-size="18" y="-410.3811" - style="text-anchor: middle" font-family="Arial"> - Claquesous - </text> - <text fill="#000000" x="18.282034" font-size="18" y="-509.3687" - style="text-anchor: middle" font-family="Arial"> - Montparnasse - </text> - <text fill="#000000" x="-110.05931" font-size="18" y="155.5824" - style="text-anchor: middle" font-family="Arial"> - Toussaint - </text> - <text fill="#000000" x="-760.8662" font-size="18" y="-144.98051" - style="text-anchor: middle" font-family="Arial"> - Child1 - </text> - <text fill="#000000" x="-743.16364" font-size="18" y="-103.54388" - style="text-anchor: middle" font-family="Arial"> - Child2 - </text> - <text fill="#000000" x="126.30867" font-size="18" y="-492.02533" - style="text-anchor: middle" font-family="Arial"> - Brujon - </text> - <text fill="#000000" x="-787.1729" font-size="18" y="-406.75305" - style="text-anchor: middle" font-family="Arial"> - MmeHucheloup - </text> - </g> -</svg> \ No newline at end of file diff --git a/gephi-desktop/static/datasets/OClinks_w.dl.zip b/gephi-desktop/static/datasets/OClinks_w.dl.zip deleted file mode 100644 index beb5d89..0000000 Binary files a/gephi-desktop/static/datasets/OClinks_w.dl.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/airlines-sample.gexf b/gephi-desktop/static/datasets/airlines-sample.gexf deleted file mode 100644 index 697330d..0000000 --- a/gephi-desktop/static/datasets/airlines-sample.gexf +++ /dev/null @@ -1,3430 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<gexf xmlns:viz="http:///www.gexf.net/1.1draft/viz" version="1.1" xmlns="http://www.gexf.net/1.1draft"> -<meta lastmodifieddate="2010-05-17+15:02"> -<creator>Gephi 0.7</creator> -</meta> -<graph defaultedgetype="undirected" idtype="string" type="static"> -<attributes class="node" mode="static"> -<attribute id="code" title="Code" type="string"/> -<attribute id="city" title="City" type="string"/> -<attribute id="latitude" title="latitude" type="double"/> -<attribute id="longitude" title="longitude" type="double"/> -</attributes> -<nodes count="235"> -<node id="0" label="Adams Field Airport"> -<attvalues> -<attvalue for="code" value="LIT"/> -<attvalue for="city" value="Little Rock, AR"/> -<attvalue for="latitude" value="34.729444"/> -<attvalue for="longitude" value="-92.224444"/> -</attvalues> -<viz:color b="243" g="107" r="88"/> -</node> -<node id="1" label="Akron/canton Regional"> -<attvalues> -<attvalue for="code" value="CAK"/> -<attvalue for="city" value="Akron/Canton, OH"/> -<attvalue for="latitude" value="40.916111"/> -<attvalue for="longitude" value="-81.442222"/> -</attvalues> -<viz:color b="245" g="122" r="61"/> -</node> -<node id="2" label="Albany International"> -<attvalues> -<attvalue for="code" value="ALB"/> -<attvalue for="city" value="Albany"/> -<attvalue for="latitude" value="42.733333"/> -<attvalue for="longitude" value="-73.8"/> -</attvalues> -<viz:color b="245" g="123" r="59"/> -</node> -<node id="3" label="Albemarle"> -<attvalues> -<attvalue for="code" value="CHO"/> -<attvalue for="city" value="Charlottesville"/> -<attvalue for="latitude" value="38.133333"/> -<attvalue for="longitude" value="-78.45"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="4" label="Albuquerque International"> -<attvalues> -<attvalue for="code" value="ABQ"/> -<attvalue for="city" value="Albuquerque"/> -<attvalue for="latitude" value="35.040278"/> -<attvalue for="longitude" value="-106.609167"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="5" label="Alexandria International"> -<attvalues> -<attvalue for="code" value="AEX"/> -<attvalue for="city" value="Alexandria, LA"/> -<attvalue for="latitude" value="31.3275"/> -<attvalue for="longitude" value="-92.548611"/> -</attvalues> -<viz:color b="245" g="123" r="59"/> -</node> -<node id="6" label="Alpena County Regional"> -<attvalues> -<attvalue for="code" value="APN"/> -<attvalue for="city" value="Alpena"/> -<attvalue for="latitude" value="45.083333"/> -<attvalue for="longitude" value="-83.55"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="7" label="Arcata"> -<attvalues> -<attvalue for="code" value="ACV"/> -<attvalue for="city" value="Arcata"/> -<attvalue for="latitude" value="40.983333"/> -<attvalue for="longitude" value="-124.1"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="8" label="Asheville Regional Airport"> -<attvalues> -<attvalue for="code" value="AVL"/> -<attvalue for="city" value="Fletcher"/> -<attvalue for="latitude" value="35.436111"/> -<attvalue for="longitude" value="-82.541667"/> -</attvalues> -<viz:color b="246" g="125" r="56"/> -</node> -<node id="9" label="Austin-bergstrom International"> -<attvalues> -<attvalue for="code" value="AUS"/> -<attvalue for="city" value="Austin"/> -<attvalue for="latitude" value="30.194444"/> -<attvalue for="longitude" value="-97.67"/> -</attvalues> -<viz:color b="243" g="105" r="91"/> -</node> -<node id="10" label="Austin-straubel Field"> -<attvalues> -<attvalue for="code" value="GRB"/> -<attvalue for="city" value="Green Bay"/> -<attvalue for="latitude" value="44.483333"/> -<attvalue for="longitude" value="-88.133333"/> -</attvalues> -<viz:color b="242" g="101" r="98"/> -</node> -<node id="11" label="Baltimore/Washington International Thurgood Marshall"> -<attvalues> -<attvalue for="code" value="BWI"/> -<attvalue for="city" value="Baltimore, MD"/> -<attvalue for="latitude" value="39.175278"/> -<attvalue for="longitude" value="-76.668333"/> -</attvalues> -<viz:color b="243" g="105" r="90"/> -</node> -<node id="12" label="Bangor International Airport"> -<attvalues> -<attvalue for="code" value="BGR"/> -<attvalue for="city" value="Bangor"/> -<attvalue for="latitude" value="44.8"/> -<attvalue for="longitude" value="-68.816667"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="13" label="Barkley Regional"> -<attvalues> -<attvalue for="code" value="PAH"/> -<attvalue for="city" value="Paducah, KY"/> -<attvalue for="latitude" value="37.060278"/> -<attvalue for="longitude" value="-88.773056"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="14" label="Bay County"> -<attvalues> -<attvalue for="code" value="PFN"/> -<attvalue for="city" value="Panama City"/> -<attvalue for="latitude" value="30.216667"/> -<attvalue for="longitude" value="-85.683333"/> -</attvalues> -<viz:color b="246" g="125" r="56"/> -</node> -<node id="15" label="Bellingham"> -<attvalues> -<attvalue for="code" value="BLI"/> -<attvalue for="city" value="Bellingham"/> -<attvalue for="latitude" value="48.8"/> -<attvalue for="longitude" value="-122.533333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="16" label="Bemidji"> -<attvalues> -<attvalue for="code" value="BJI"/> -<attvalue for="city" value="Bemidji"/> -<attvalue for="latitude" value="47.516667"/> -<attvalue for="longitude" value="-94.933333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="17" label="Bert Mooney Airport"> -<attvalues> -<attvalue for="code" value="BTM"/> -<attvalue for="city" value="Butte,"/> -<attvalue for="latitude" value="45.954722"/> -<attvalue for="longitude" value="-112.4975"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="18" label="Billings"> -<attvalues> -<attvalue for="code" value="BIL"/> -<attvalue for="city" value="Billings"/> -<attvalue for="latitude" value="45.8"/> -<attvalue for="longitude" value="-108.533333"/> -</attvalues> -<viz:color b="162" g="71" r="236"/> -</node> -<node id="19" label="Birmingham"> -<attvalues> -<attvalue for="code" value="BHM"/> -<attvalue for="city" value="Birmingham"/> -<attvalue for="latitude" value="33.566667"/> -<attvalue for="longitude" value="-86.75"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="20" label="Bishop International Airport"> -<attvalues> -<attvalue for="code" value="FNT"/> -<attvalue for="city" value="Flint"/> -<attvalue for="latitude" value="42.965556"/> -<attvalue for="longitude" value="-83.743611"/> -</attvalues> -<viz:color b="243" g="109" r="84"/> -</node> -<node id="21" label="Bismarck"> -<attvalues> -<attvalue for="code" value="BIS"/> -<attvalue for="city" value="Bismarck"/> -<attvalue for="latitude" value="46.783333"/> -<attvalue for="longitude" value="-100.75"/> -</attvalues> -<viz:color b="245" g="123" r="60"/> -</node> -<node id="22" label="Blue Grass"> -<attvalues> -<attvalue for="code" value="LEX"/> -<attvalue for="city" value="Lexington"/> -<attvalue for="latitude" value="38.036389"/> -<attvalue for="longitude" value="-84.605833"/> -</attvalues> -<viz:color b="242" g="100" r="100"/> -</node> -<node id="23" label="Bob Hope"> -<attvalues> -<attvalue for="code" value="BUR"/> -<attvalue for="city" value="Burbank"/> -<attvalue for="latitude" value="34.2"/> -<attvalue for="longitude" value="-118.35"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="24" label="Boise Air Terminal/Gowen Field"> -<attvalues> -<attvalue for="code" value="BOI"/> -<attvalue for="city" value="Boise, ID"/> -<attvalue for="latitude" value="43.564444"/> -<attvalue for="longitude" value="-116.222778"/> -</attvalues> -<viz:color b="241" g="94" r="110"/> -</node> -<node id="25" label="Bradley International"> -<attvalues> -<attvalue for="code" value="BDL"/> -<attvalue for="city" value="Windsor Locks, CT"/> -<attvalue for="latitude" value="41.938889"/> -<attvalue for="longitude" value="-72.683333"/> -</attvalues> -<viz:color b="245" g="119" r="66"/> -</node> -<node id="26" label="Brainerd Lakes Regional"> -<attvalues> -<attvalue for="code" value="BRD"/> -<attvalue for="city" value="Brainerd, MN"/> -<attvalue for="latitude" value="46.401667"/> -<attvalue for="longitude" value="-94.135556"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="27" label="Buffalo Niagara International"> -<attvalues> -<attvalue for="code" value="BUF"/> -<attvalue for="city" value="Buffalo, NY"/> -<attvalue for="latitude" value="42.940556"/> -<attvalue for="longitude" value="-78.732222"/> -</attvalues> -<viz:color b="245" g="123" r="60"/> -</node> -<node id="28" label="Burlington International"> -<attvalues> -<attvalue for="code" value="BTV"/> -<attvalue for="city" value="Burlington"/> -<attvalue for="latitude" value="44.471944"/> -<attvalue for="longitude" value="-73.153333"/> -</attvalues> -<viz:color b="246" g="127" r="53"/> -</node> -<node id="29" label="Bush Field"> -<attvalues> -<attvalue for="code" value="AGS"/> -<attvalue for="city" value="Augusta"/> -<attvalue for="latitude" value="33.366667"/> -<attvalue for="longitude" value="-81.966667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="30" label="Capital City"> -<attvalues> -<attvalue for="code" value="LAN"/> -<attvalue for="city" value="Lansing"/> -<attvalue for="latitude" value="42.783333"/> -<attvalue for="longitude" value="-84.583333"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="31" label="Cedar Rapids"> -<attvalues> -<attvalue for="code" value="CID"/> -<attvalue for="city" value="Cedar Rapids"/> -<attvalue for="latitude" value="41.884722"/> -<attvalue for="longitude" value="-91.710833"/> -</attvalues> -<viz:color b="244" g="115" r="73"/> -</node> -<node id="32" label="Central Illinois Regional Airport at Bloomington-Normal"> -<attvalues> -<attvalue for="code" value="BMI"/> -<attvalue for="city" value="Bloomington/Normal, IL"/> -<attvalue for="latitude" value="40.477222"/> -<attvalue for="longitude" value="-88.915833"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="33" label="Central Wisconsin"> -<attvalues> -<attvalue for="code" value="CWA"/> -<attvalue for="city" value="Wausau"/> -<attvalue for="latitude" value="44.769444"/> -<attvalue for="longitude" value="-89.683056"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="34" label="Charleston, AFB Municipal"> -<attvalues> -<attvalue for="code" value="CHS"/> -<attvalue for="city" value="Charleston, SC"/> -<attvalue for="latitude" value="32.898611"/> -<attvalue for="longitude" value="-80.040556"/> -</attvalues> -<viz:color b="245" g="122" r="62"/> -</node> -<node id="35" label="Charlotte Douglas"> -<attvalues> -<attvalue for="code" value="CLT"/> -<attvalue for="city" value="Charlotte"/> -<attvalue for="latitude" value="35.216667"/> -<attvalue for="longitude" value="-80.933333"/> -</attvalues> -<viz:color b="242" g="96" r="106"/> -</node> -<node id="36" label="Cherry Capital Airport"> -<attvalues> -<attvalue for="code" value="TVC"/> -<attvalue for="city" value="Traverse City"/> -<attvalue for="latitude" value="44.741389"/> -<attvalue for="longitude" value="-85.582222"/> -</attvalues> -<viz:color b="243" g="107" r="87"/> -</node> -<node id="37" label="Chicago O'hare International"> -<attvalues> -<attvalue for="code" value="ORD"/> -<attvalue for="city" value="Chicago, Il"/> -<attvalue for="latitude" value="41.978611"/> -<attvalue for="longitude" value="-87.904722"/> -</attvalues> -<viz:color b="240" g="85" r="125"/> -</node> -<node id="38" label="Chippewa County"> -<attvalues> -<attvalue for="code" value="CIU"/> -<attvalue for="city" value="Sault Ste Marie"/> -<attvalue for="latitude" value="46.25"/> -<attvalue for="longitude" value="-84.466667"/> -</attvalues> -<viz:color b="246" g="126" r="54"/> -</node> -<node id="39" label="Chippewa Valley Regional Airport"> -<attvalues> -<attvalue for="code" value="EAU"/> -<attvalue for="city" value="Eau Claire, WI"/> -<attvalue for="latitude" value="44.865833"/> -<attvalue for="longitude" value="-91.484167"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="40" label="Chisholm"> -<attvalues> -<attvalue for="code" value="HIB"/> -<attvalue for="city" value="Chisholm"/> -<attvalue for="latitude" value="47.383333"/> -<attvalue for="longitude" value="-92.833333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="41" label="Cincinnati/northern Kentucky"> -<attvalues> -<attvalue for="code" value="CVG"/> -<attvalue for="city" value="Covington, KY"/> -<attvalue for="latitude" value="39.048889"/> -<attvalue for="longitude" value="-84.667778"/> -</attvalues> -<viz:color b="216" g="36" r="230"/> -</node> -<node id="42" label="City County"> -<attvalues> -<attvalue for="code" value="HVR"/> -<attvalue for="city" value="Havre"/> -<attvalue for="latitude" value="48.55"/> -<attvalue for="longitude" value="-109.766667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="43" label="Colorado Springs"> -<attvalues> -<attvalue for="code" value="COS"/> -<attvalue for="city" value="Colorado Springs"/> -<attvalue for="latitude" value="38.816667"/> -<attvalue for="longitude" value="-104.716667"/> -</attvalues> -<viz:color b="246" g="127" r="53"/> -</node> -<node id="44" label="Dallas/Fort Worth International"> -<attvalues> -<attvalue for="code" value="DFW"/> -<attvalue for="city" value="Dallas, TX"/> -<attvalue for="latitude" value="32.896944"/> -<attvalue for="longitude" value="-97.038056"/> -</attvalues> -<viz:color b="241" g="93" r="112"/> -</node> -<node id="45" label="Dane County Regional"> -<attvalues> -<attvalue for="code" value="MSN"/> -<attvalue for="city" value="Madison"/> -<attvalue for="latitude" value="43.139722"/> -<attvalue for="longitude" value="-89.3375"/> -</attvalues> -<viz:color b="241" g="95" r="108"/> -</node> -<node id="46" label="Dannelly Fld"> -<attvalues> -<attvalue for="code" value="MGM"/> -<attvalue for="city" value="Montgomery"/> -<attvalue for="latitude" value="32.3"/> -<attvalue for="longitude" value="-86.4"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="47" label="Dawson Community"> -<attvalues> -<attvalue for="code" value="GDV"/> -<attvalue for="city" value="Glendive"/> -<attvalue for="latitude" value="47.133333"/> -<attvalue for="longitude" value="-104.683333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="48" label="Denver International"> -<attvalues> -<attvalue for="code" value="DEN"/> -<attvalue for="city" value="Denver"/> -<attvalue for="latitude" value="39.861667"/> -<attvalue for="longitude" value="-104.673056"/> -</attvalues> -<viz:color b="243" g="108" r="85"/> -</node> -<node id="49" label="Des Moines International"> -<attvalues> -<attvalue for="code" value="DSM"/> -<attvalue for="city" value="Des Moines, IA"/> -<attvalue for="latitude" value="41.533889"/> -<attvalue for="longitude" value="-93.663056"/> -</attvalues> -<viz:color b="242" g="102" r="97"/> -</node> -<node id="50" label="Detroit Metropolitan Wayne County"> -<attvalues> -<attvalue for="code" value="DTW"/> -<attvalue for="city" value="Detroit, MI"/> -<attvalue for="latitude" value="42.2125"/> -<attvalue for="longitude" value="-83.353333"/> -</attvalues> -<viz:color b="17" g="167" r="253"/> -</node> -<node id="51" label="Devils Lake"> -<attvalues> -<attvalue for="code" value="DVL"/> -<attvalue for="city" value="Devils Lake"/> -<attvalue for="latitude" value="48.116667"/> -<attvalue for="longitude" value="-98.9"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="52" label="Dothan Arpt"> -<attvalues> -<attvalue for="code" value="DHN"/> -<attvalue for="city" value="Dothan"/> -<attvalue for="latitude" value="31.316667"/> -<attvalue for="longitude" value="-85.45"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="53" label="Duluth International"> -<attvalues> -<attvalue for="code" value="DLH"/> -<attvalue for="city" value="Duluth"/> -<attvalue for="latitude" value="46.833333"/> -<attvalue for="longitude" value="-92.183333"/> -</attvalues> -<viz:color b="244" g="115" r="74"/> -</node> -<node id="54" label="Eagle County"> -<attvalues> -<attvalue for="code" value="EGE"/> -<attvalue for="city" value="Vail/Eagle"/> -<attvalue for="latitude" value="39.633333"/> -<attvalue for="longitude" value="-106.916667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="55" label="Eglin AFB"> -<attvalues> -<attvalue for="code" value="VPS"/> -<attvalue for="city" value="Valparaiso, FL"/> -<attvalue for="latitude" value="30.483333"/> -<attvalue for="longitude" value="-86.525278"/> -</attvalues> -<viz:color b="246" g="127" r="53"/> -</node> -<node id="56" label="El Paso International Airport"> -<attvalues> -<attvalue for="code" value="ELP"/> -<attvalue for="city" value="El Paso"/> -<attvalue for="latitude" value="31.8"/> -<attvalue for="longitude" value="-106.383333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="57" label="Elmira Corning Regional"> -<attvalues> -<attvalue for="code" value="ELM"/> -<attvalue for="city" value="Corning, NY"/> -<attvalue for="latitude" value="42.166667"/> -<attvalue for="longitude" value="-76.9"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="58" label="Emmet County"> -<attvalues> -<attvalue for="code" value="PLN"/> -<attvalue for="city" value="Pellston"/> -<attvalue for="latitude" value="45.566667"/> -<attvalue for="longitude" value="-84.8"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="59" label="Eppley Airfield"> -<attvalues> -<attvalue for="code" value="OMA"/> -<attvalue for="city" value="Omaha"/> -<attvalue for="latitude" value="41.3"/> -<attvalue for="longitude" value="-95.9"/> -</attvalues> -<viz:color b="242" g="97" r="104"/> -</node> -<node id="60" label="Eugene"> -<attvalues> -<attvalue for="code" value="EUG"/> -<attvalue for="city" value="Eugene"/> -<attvalue for="latitude" value="44.116667"/> -<attvalue for="longitude" value="-123.216667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="61" label="Evansville Regional Airport"> -<attvalues> -<attvalue for="code" value="EVV"/> -<attvalue for="city" value="Evansville, IN"/> -<attvalue for="latitude" value="38.036944"/> -<attvalue for="longitude" value="-87.5325"/> -</attvalues> -<viz:color b="243" g="107" r="87"/> -</node> -<node id="62" label="Falls Intl"> -<attvalues> -<attvalue for="code" value="INL"/> -<attvalue for="city" value="International Falls"/> -<attvalue for="latitude" value="48.566667"/> -<attvalue for="longitude" value="-93.4"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="63" label="Fanning Field"> -<attvalues> -<attvalue for="code" value="IDA"/> -<attvalue for="city" value="Idaho Falls"/> -<attvalue for="latitude" value="43.516667"/> -<attvalue for="longitude" value="-112.066667"/> -</attvalues> -<viz:color b="245" g="119" r="66"/> -</node> -<node id="64" label="Fort Dodge Regional"> -<attvalues> -<attvalue for="code" value="FOD"/> -<attvalue for="city" value="Fort Dodge, IA"/> -<attvalue for="latitude" value="42.551111"/> -<attvalue for="longitude" value="-94.191944"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="65" label="Fort Lauderdale/hollywood International"> -<attvalues> -<attvalue for="code" value="FLL"/> -<attvalue for="city" value="Fort Lauderdale, FL"/> -<attvalue for="latitude" value="26.0725"/> -<attvalue for="longitude" value="-80.152778"/> -</attvalues> -<viz:color b="243" g="109" r="84"/> -</node> -<node id="66" label="Fresno Air Terminal Airport"> -<attvalues> -<attvalue for="code" value="FAT"/> -<attvalue for="city" value="Fresno"/> -<attvalue for="latitude" value="36.766667"/> -<attvalue for="longitude" value="-119.716667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="67" label="Gainesville Regional"> -<attvalues> -<attvalue for="code" value="GNV"/> -<attvalue for="city" value="Gainesville"/> -<attvalue for="latitude" value="29.683333"/> -<attvalue for="longitude" value="-82.266667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="68" label="Gallatin Field"> -<attvalues> -<attvalue for="code" value="BZN"/> -<attvalue for="city" value="Bozeman"/> -<attvalue for="latitude" value="45.7775"/> -<attvalue for="longitude" value="-111.153056"/> -</attvalues> -<viz:color b="242" g="102" r="97"/> -</node> -<node id="69" label="General Mitchell International"> -<attvalues> -<attvalue for="code" value="MKE"/> -<attvalue for="city" value="Milwaukee"/> -<attvalue for="latitude" value="42.95"/> -<attvalue for="longitude" value="-87.9"/> -</attvalues> -<viz:color b="242" g="98" r="103"/> -</node> -<node id="70" label="George Bush Intercontinental"> -<attvalues> -<attvalue for="code" value="IAH"/> -<attvalue for="city" value="Houston"/> -<attvalue for="latitude" value="29.984444"/> -<attvalue for="longitude" value="-95.341389"/> -</attvalues> -<viz:color b="137" g="87" r="239"/> -</node> -<node id="71" label="Glacier Park International"> -<attvalues> -<attvalue for="code" value="FCA"/> -<attvalue for="city" value="Kalispell, MT"/> -<attvalue for="latitude" value="48.316667"/> -<attvalue for="longitude" value="-114.266667"/> -</attvalues> -<viz:color b="246" g="125" r="57"/> -</node> -<node id="72" label="Grand Forks"> -<attvalues> -<attvalue for="code" value="GFK"/> -<attvalue for="city" value="Grand Forks"/> -<attvalue for="latitude" value="47.95"/> -<attvalue for="longitude" value="-97.183333"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="73" label="Greater Binghamton"> -<attvalues> -<attvalue for="code" value="BGM"/> -<attvalue for="city" value="Binghamton, NY"/> -<attvalue for="latitude" value="42.208611"/> -<attvalue for="longitude" value="-75.979722"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="74" label="Greater Peoria"> -<attvalues> -<attvalue for="code" value="PIA"/> -<attvalue for="city" value="Peoria, IL"/> -<attvalue for="latitude" value="40.666667"/> -<attvalue for="longitude" value="-89.683333"/> -</attvalues> -<viz:color b="246" g="124" r="57"/> -</node> -<node id="75" label="Greater Rochester International"> -<attvalues> -<attvalue for="code" value="ROC"/> -<attvalue for="city" value="Rochester, NY"/> -<attvalue for="latitude" value="43.118889"/> -<attvalue for="longitude" value="-77.6725"/> -</attvalues> -<viz:color b="244" g="112" r="78"/> -</node> -<node id="76" label="Greenville"> -<attvalues> -<attvalue for="code" value="GLH"/> -<attvalue for="city" value="Greenville"/> -<attvalue for="latitude" value="33.477222"/> -<attvalue for="longitude" value="-90.985"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="77" label="Greenville Spartanbur Int'l Airport"> -<attvalues> -<attvalue for="code" value="GSP"/> -<attvalue for="city" value="Greenville"/> -<attvalue for="latitude" value="34.895556"/> -<attvalue for="longitude" value="-82.218889"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="78" label="Gulfport-Biloxi International"> -<attvalues> -<attvalue for="code" value="GPT"/> -<attvalue for="city" value="Gulfport"/> -<attvalue for="latitude" value="30.4"/> -<attvalue for="longitude" value="-89.066667"/> -</attvalues> -<viz:color b="246" g="128" r="51"/> -</node> -<node id="79" label="Harrisburg International"> -<attvalues> -<attvalue for="code" value="MDT"/> -<attvalue for="city" value="Harrisburg, PA"/> -<attvalue for="latitude" value="40.193611"/> -<attvalue for="longitude" value="-76.763333"/> -</attvalues> -<viz:color b="244" g="110" r="82"/> -</node> -<node id="80" label="Hartsfield-jackson Atlanta International"> -<attvalues> -<attvalue for="code" value="ATL"/> -<attvalue for="city" value="Atlanta, GA"/> -<attvalue for="latitude" value="33.636667"/> -<attvalue for="longitude" value="-84.428056"/> -</attvalues> -<viz:color b="32" g="157" r="251"/> -</node> -<node id="81" label="Hattiesburg-Laurel Regional"> -<attvalues> -<attvalue for="code" value="PIB"/> -<attvalue for="city" value="Hattiesburg/Laurel, MS"/> -<attvalue for="latitude" value="31.467222"/> -<attvalue for="longitude" value="-89.336944"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="82" label="Hector Field"> -<attvalues> -<attvalue for="code" value="FAR"/> -<attvalue for="city" value="Fargo"/> -<attvalue for="latitude" value="46.916667"/> -<attvalue for="longitude" value="-96.816667"/> -</attvalues> -<viz:color b="243" g="108" r="85"/> -</node> -<node id="83" label="Helena"> -<attvalues> -<attvalue for="code" value="HLN"/> -<attvalue for="city" value="Helena"/> -<attvalue for="latitude" value="46.6"/> -<attvalue for="longitude" value="-111.983333"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="84" label="Hopkins International"> -<attvalues> -<attvalue for="code" value="CLE"/> -<attvalue for="city" value="Cleveland"/> -<attvalue for="latitude" value="41.416667"/> -<attvalue for="longitude" value="-81.85"/> -</attvalues> -<viz:color b="233" g="34" r="214"/> -</node> -<node id="85" label="Houghton County"> -<attvalues> -<attvalue for="code" value="CMX"/> -<attvalue for="city" value="Hancock"/> -<attvalue for="latitude" value="47.123611"/> -<attvalue for="longitude" value="-88.573333"/> -</attvalues> -<viz:color b="246" g="128" r="51"/> -</node> -<node id="86" label="Huntsville International - Carl T. Jones Field"> -<attvalues> -<attvalue for="code" value="HSV"/> -<attvalue for="city" value="Huntsville, AL"/> -<attvalue for="latitude" value="34.637222"/> -<attvalue for="longitude" value="-86.775"/> -</attvalues> -<viz:color b="245" g="123" r="60"/> -</node> -<node id="87" label="Indianapolis International"> -<attvalues> -<attvalue for="code" value="IND"/> -<attvalue for="city" value="Indianapolis, IN"/> -<attvalue for="latitude" value="39.717222"/> -<attvalue for="longitude" value="-86.294722"/> -</attvalues> -<viz:color b="239" g="77" r="139"/> -</node> -<node id="88" label="International"> -<attvalues> -<attvalue for="code" value="ERI"/> -<attvalue for="city" value="Erie"/> -<attvalue for="latitude" value="42.083333"/> -<attvalue for="longitude" value="-80.183333"/> -</attvalues> -<viz:color b="245" g="122" r="62"/> -</node> -<node id="89" label="International"> -<attvalues> -<attvalue for="code" value="GGW"/> -<attvalue for="city" value="Glasgow"/> -<attvalue for="latitude" value="48.216667"/> -<attvalue for="longitude" value="-106.616667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="90" label="International"> -<attvalues> -<attvalue for="code" value="GTF"/> -<attvalue for="city" value="Great Falls"/> -<attvalue for="latitude" value="47.5"/> -<attvalue for="longitude" value="-111.366667"/> -</attvalues> -<viz:color b="245" g="121" r="63"/> -</node> -<node id="91" label="International"> -<attvalues> -<attvalue for="code" value="EYW"/> -<attvalue for="city" value="Key West"/> -<attvalue for="latitude" value="24.55"/> -<attvalue for="longitude" value="-81.766667"/> -</attvalues> -<viz:color b="246" g="128" r="51"/> -</node> -<node id="92" label="International"> -<attvalues> -<attvalue for="code" value="MOT"/> -<attvalue for="city" value="Minot"/> -<attvalue for="latitude" value="48.266667"/> -<attvalue for="longitude" value="-101.283333"/> -</attvalues> -<viz:color b="246" g="128" r="51"/> -</node> -<node id="93" label="International"> -<attvalues> -<attvalue for="code" value="RST"/> -<attvalue for="city" value="Rochester"/> -<attvalue for="latitude" value="43.908333"/> -<attvalue for="longitude" value="-92.5"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="94" label="International"> -<attvalues> -<attvalue for="code" value="OLF"/> -<attvalue for="city" value="Wolf Point"/> -<attvalue for="latitude" value="48.083333"/> -<attvalue for="longitude" value="-105.566667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="95" label="Intl Jetport"> -<attvalues> -<attvalue for="code" value="PWM"/> -<attvalue for="city" value="Portland"/> -<attvalue for="latitude" value="43.65"/> -<attvalue for="longitude" value="-70.3"/> -</attvalues> -<viz:color b="246" g="127" r="53"/> -</node> -<node id="96" label="Jackson-evers"> -<attvalues> -<attvalue for="code" value="JAN"/> -<attvalue for="city" value="Jackson"/> -<attvalue for="latitude" value="32.311111"/> -<attvalue for="longitude" value="-90.075833"/> -</attvalues> -<viz:color b="243" g="109" r="83"/> -</node> -<node id="97" label="Jacksonville,"> -<attvalues> -<attvalue for="code" value="JAX"/> -<attvalue for="city" value="Jacksonville, FL"/> -<attvalue for="latitude" value="30.416667"/> -<attvalue for="longitude" value="-81.633333"/> -</attvalues> -<viz:color b="244" g="114" r="74"/> -</node> -<node id="98" label="James Cox Dayton Intl"> -<attvalues> -<attvalue for="code" value="DAY"/> -<attvalue for="city" value="Dayton, Oh"/> -<attvalue for="latitude" value="39.75"/> -<attvalue for="longitude" value="-84.183333"/> -</attvalues> -<viz:color b="243" g="109" r="83"/> -</node> -<node id="99" label="Jamestown"> -<attvalues> -<attvalue for="code" value="JMS"/> -<attvalue for="city" value="Jamestown"/> -<attvalue for="latitude" value="46.933333"/> -<attvalue for="longitude" value="-98.683333"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="100" label="Jefferson County"> -<attvalues> -<attvalue for="code" value="BPT"/> -<attvalue for="city" value="Beaumont"/> -<attvalue for="latitude" value="30.083333"/> -<attvalue for="longitude" value="-94.1"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="101" label="Joe Foss Field Airport"> -<attvalues> -<attvalue for="code" value="FSD"/> -<attvalue for="city" value="Sioux Falls"/> -<attvalue for="latitude" value="43.581944"/> -<attvalue for="longitude" value="-96.741944"/> -</attvalues> -<viz:color b="246" g="125" r="55"/> -</node> -<node id="102" label="John F Kennedy Intl"> -<attvalues> -<attvalue for="code" value="JFK"/> -<attvalue for="city" value="New York"/> -<attvalue for="latitude" value="40.633333"/> -<attvalue for="longitude" value="-73.783333"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="103" label="John Wayne"> -<attvalues> -<attvalue for="code" value="SNA"/> -<attvalue for="city" value="Santa Ana, CA"/> -<attvalue for="latitude" value="33.666667"/> -<attvalue for="longitude" value="-117.866667"/> -</attvalues> -<viz:color b="245" g="119" r="66"/> -</node> -<node id="104" label="Kalamazoo/Battle Creek Intl"> -<attvalues> -<attvalue for="code" value="AZO"/> -<attvalue for="city" value="Kalamazoo"/> -<attvalue for="latitude" value="42.235"/> -<attvalue for="longitude" value="-85.551944"/> -</attvalues> -<viz:color b="243" g="107" r="88"/> -</node> -<node id="105" label="Kansas City International Airport"> -<attvalues> -<attvalue for="code" value="MCI"/> -<attvalue for="city" value="Kansas City"/> -<attvalue for="latitude" value="39.291667"/> -<attvalue for="longitude" value="-94.730556"/> -</attvalues> -<viz:color b="241" g="92" r="113"/> -</node> -<node id="106" label="Kent County Intl"> -<attvalues> -<attvalue for="code" value="GRR"/> -<attvalue for="city" value="Grand Rapids"/> -<attvalue for="latitude" value="42.883333"/> -<attvalue for="longitude" value="-85.533333"/> -</attvalues> -<viz:color b="241" g="95" r="107"/> -</node> -<node id="107" label="Key Field"> -<attvalues> -<attvalue for="code" value="MEI"/> -<attvalue for="city" value="Meridian"/> -<attvalue for="latitude" value="32.333333"/> -<attvalue for="longitude" value="-88.75"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="108" label="Kingsley Field"> -<attvalues> -<attvalue for="code" value="LMT"/> -<attvalue for="city" value="Klamath Falls"/> -<attvalue for="latitude" value="42.166667"/> -<attvalue for="longitude" value="-121.733333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="109" label="La Guardia"> -<attvalues> -<attvalue for="code" value="LGA"/> -<attvalue for="city" value="New York"/> -<attvalue for="latitude" value="40.766667"/> -<attvalue for="longitude" value="-73.866667"/> -</attvalues> -<viz:color b="242" g="99" r="101"/> -</node> -<node id="110" label="Lafayette Regional"> -<attvalues> -<attvalue for="code" value="LFT"/> -<attvalue for="city" value="Lafayette, LA"/> -<attvalue for="latitude" value="30.205278"/> -<attvalue for="longitude" value="-91.9875"/> -</attvalues> -<viz:color b="244" g="116" r="72"/> -</node> -<node id="111" label="Lambert-St. Louis International"> -<attvalues> -<attvalue for="code" value="STL"/> -<attvalue for="city" value="St Louis"/> -<attvalue for="latitude" value="38.748611"/> -<attvalue for="longitude" value="-90.37"/> -</attvalues> -<viz:color b="241" g="95" r="108"/> -</node> -<node id="112" label="Lehigh Valley International"> -<attvalues> -<attvalue for="code" value="ABE"/> -<attvalue for="city" value="Allentown"/> -<attvalue for="latitude" value="40.652222"/> -<attvalue for="longitude" value="-75.440278"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="113" label="Lemons Municipal"> -<attvalues> -<attvalue for="code" value="TUP"/> -<attvalue for="city" value="Tupelo"/> -<attvalue for="latitude" value="34.268056"/> -<attvalue for="longitude" value="-88.77"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="114" label="Lincoln"> -<attvalues> -<attvalue for="code" value="LNK"/> -<attvalue for="city" value="Lincoln, NE"/> -<attvalue for="latitude" value="40.850833"/> -<attvalue for="longitude" value="-96.759167"/> -</attvalues> -<viz:color b="246" g="124" r="57"/> -</node> -<node id="115" label="Logan International"> -<attvalues> -<attvalue for="code" value="BOS"/> -<attvalue for="city" value="Boston"/> -<attvalue for="latitude" value="42.363056"/> -<attvalue for="longitude" value="-71.0"/> -</attvalues> -<viz:color b="242" g="98" r="102"/> -</node> -<node id="116" label="Long Beach Municipal"> -<attvalues> -<attvalue for="code" value="LGB"/> -<attvalue for="city" value="Long Beach"/> -<attvalue for="latitude" value="33.816667"/> -<attvalue for="longitude" value="-118.15"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="117" label="Long Island Mac Arthur"> -<attvalues> -<attvalue for="code" value="ISP"/> -<attvalue for="city" value="Islip, NY"/> -<attvalue for="latitude" value="40.795278"/> -<attvalue for="longitude" value="-73.100278"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="118" label="Los Angeles International"> -<attvalues> -<attvalue for="code" value="LAX"/> -<attvalue for="city" value="Los Angeles"/> -<attvalue for="latitude" value="33.9425"/> -<attvalue for="longitude" value="-118.407222"/> -</attvalues> -<viz:color b="220" g="33" r="230"/> -</node> -<node id="119" label="Louis Armstrong New Orléans International Airport"> -<attvalues> -<attvalue for="code" value="MSY"/> -<attvalue for="city" value="New Orleans"/> -<attvalue for="latitude" value="29.993333"/> -<attvalue for="longitude" value="-90.258056"/> -</attvalues> -<viz:color b="244" g="114" r="75"/> -</node> -<node id="120" label="Louisville International"> -<attvalues> -<attvalue for="code" value="SDF"/> -<attvalue for="city" value="Louisville, KY"/> -<attvalue for="latitude" value="38.174444"/> -<attvalue for="longitude" value="-85.736111"/> -</attvalues> -<viz:color b="242" g="102" r="96"/> -</node> -<node id="121" label="Love Field"> -<attvalues> -<attvalue for="code" value="DAL"/> -<attvalue for="city" value="Dallas"/> -<attvalue for="latitude" value="32.852778"/> -<attvalue for="longitude" value="-96.85"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="122" label="Lovell Field"> -<attvalues> -<attvalue for="code" value="CHA"/> -<attvalue for="city" value="Chattanooga,TN"/> -<attvalue for="latitude" value="35.035278"/> -<attvalue for="longitude" value="-85.203889"/> -</attvalues> -<viz:color b="244" g="116" r="72"/> -</node> -<node id="123" label="Manchester-boston Regional Airport"> -<attvalues> -<attvalue for="code" value="MHT"/> -<attvalue for="city" value="Manchester, NH"/> -<attvalue for="latitude" value="42.9325"/> -<attvalue for="longitude" value="-71.435556"/> -</attvalues> -<viz:color b="245" g="123" r="60"/> -</node> -<node id="124" label="Mason City Municipal"> -<attvalues> -<attvalue for="code" value="MCW"/> -<attvalue for="city" value="Mason City, IA"/> -<attvalue for="latitude" value="43.157778"/> -<attvalue for="longitude" value="-93.331389"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="125" label="MBS International"> -<attvalues> -<attvalue for="code" value="MBS"/> -<attvalue for="city" value="Saginaw"/> -<attvalue for="latitude" value="43.532778"/> -<attvalue for="longitude" value="-83.079722"/> -</attvalues> -<viz:color b="245" g="122" r="61"/> -</node> -<node id="126" label="Mc Allen Miller International"> -<attvalues> -<attvalue for="code" value="MFE"/> -<attvalue for="city" value="Mc Allen, TX"/> -<attvalue for="latitude" value="26.175833"/> -<attvalue for="longitude" value="-98.238611"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="127" label="Mc Carran Intl"> -<attvalues> -<attvalue for="code" value="LAS"/> -<attvalue for="city" value="Las Vegas"/> -<attvalue for="latitude" value="36.083333"/> -<attvalue for="longitude" value="-115.166667"/> -</attvalues> -<viz:color b="244" g="111" r="80"/> -</node> -<node id="128" label="Mc Ghee Tyson"> -<attvalues> -<attvalue for="code" value="TYS"/> -<attvalue for="city" value="Knoxville"/> -<attvalue for="latitude" value="35.95"/> -<attvalue for="longitude" value="-83.916667"/> -</attvalues> -<viz:color b="242" g="102" r="96"/> -</node> -<node id="129" label="Melbourne International Airport"> -<attvalues> -<attvalue for="code" value="MLB"/> -<attvalue for="city" value="Melbourne"/> -<attvalue for="latitude" value="28.1"/> -<attvalue for="longitude" value="-80.633333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="130" label="Memphis International"> -<attvalues> -<attvalue for="code" value="MEM"/> -<attvalue for="city" value="Memphis"/> -<attvalue for="latitude" value="35.066667"/> -<attvalue for="longitude" value="-89.966667"/> -</attvalues> -<viz:color b="88" g="120" r="245"/> -</node> -<node id="131" label="Metropolitan Airport"> -<attvalues> -<attvalue for="code" value="CAE"/> -<attvalue for="city" value="Columbia, SC"/> -<attvalue for="latitude" value="33.95"/> -<attvalue for="longitude" value="-81.116667"/> -</attvalues> -<viz:color b="246" g="124" r="57"/> -</node> -<node id="132" label="Miami International Airport"> -<attvalues> -<attvalue for="code" value="MIA"/> -<attvalue for="city" value="Miami"/> -<attvalue for="latitude" value="25.783333"/> -<attvalue for="longitude" value="-80.266667"/> -</attvalues> -<viz:color b="243" g="105" r="91"/> -</node> -<node id="133" label="Mid-Continent"> -<attvalues> -<attvalue for="code" value="ICT"/> -<attvalue for="city" value="Wichita"/> -<attvalue for="latitude" value="37.65"/> -<attvalue for="longitude" value="-97.433333"/> -</attvalues> -<viz:color b="244" g="111" r="80"/> -</node> -<node id="134" label="Midway"> -<attvalues> -<attvalue for="code" value="MDW"/> -<attvalue for="city" value="Chicago"/> -<attvalue for="latitude" value="41.783333"/> -<attvalue for="longitude" value="-87.75"/> -</attvalues> -<viz:color b="242" g="102" r="96"/> -</node> -<node id="135" label="Mineta San Jose International Airport"> -<attvalues> -<attvalue for="code" value="SJC"/> -<attvalue for="city" value="San Jose"/> -<attvalue for="latitude" value="37.352778"/> -<attvalue for="longitude" value="-121.919444"/> -</attvalues> -<viz:color b="245" g="118" r="68"/> -</node> -<node id="136" label="Minneapolis - St. Paul Intl"> -<attvalues> -<attvalue for="code" value="MSP"/> -<attvalue for="city" value="Minneapolis"/> -<attvalue for="latitude" value="44.883333"/> -<attvalue for="longitude" value="-93.216944"/> -</attvalues> -<viz:color b="0" g="179" r="255"/> -</node> -<node id="137" label="Missoula International"> -<attvalues> -<attvalue for="code" value="MSO"/> -<attvalue for="city" value="Missoula"/> -<attvalue for="latitude" value="46.916667"/> -<attvalue for="longitude" value="-114.083333"/> -</attvalues> -<viz:color b="246" g="125" r="56"/> -</node> -<node id="138" label="Mobile Regional Airport"> -<attvalues> -<attvalue for="code" value="MOB"/> -<attvalue for="city" value="Alabama, AL"/> -<attvalue for="latitude" value="30.691111"/> -<attvalue for="longitude" value="-88.242778"/> -</attvalues> -<viz:color b="246" g="126" r="54"/> -</node> -<node id="139" label="Monterey Peninsula"> -<attvalues> -<attvalue for="code" value="MRY"/> -<attvalue for="city" value="Monterey"/> -<attvalue for="latitude" value="36.583333"/> -<attvalue for="longitude" value="-121.85"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="140" label="Municipal"> -<attvalues> -<attvalue for="code" value="ABR"/> -<attvalue for="city" value="Aberdeen"/> -<attvalue for="latitude" value="45.45"/> -<attvalue for="longitude" value="-98.433333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="141" label="Municipal"> -<attvalues> -<attvalue for="code" value="LSE"/> -<attvalue for="city" value="La Crosse"/> -<attvalue for="latitude" value="43.883333"/> -<attvalue for="longitude" value="-91.25"/> -</attvalues> -<viz:color b="246" g="126" r="55"/> -</node> -<node id="142" label="Municipal"> -<attvalues> -<attvalue for="code" value="LCH"/> -<attvalue for="city" value="Lake Charles"/> -<attvalue for="latitude" value="30.116667"/> -<attvalue for="longitude" value="-93.216667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="143" label="Municipal"> -<attvalues> -<attvalue for="code" value="LWT"/> -<attvalue for="city" value="Lewistown"/> -<attvalue for="latitude" value="47.05"/> -<attvalue for="longitude" value="-109.466667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="144" label="Municipal"> -<attvalues> -<attvalue for="code" value="MLS"/> -<attvalue for="city" value="Miles City"/> -<attvalue for="latitude" value="46.433333"/> -<attvalue for="longitude" value="-105.883333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="145" label="Municipal"> -<attvalues> -<attvalue for="code" value="MLU"/> -<attvalue for="city" value="Monroe"/> -<attvalue for="latitude" value="32.5"/> -<attvalue for="longitude" value="-92.033333"/> -</attvalues> -<viz:color b="245" g="118" r="68"/> -</node> -<node id="146" label="Municipal"> -<attvalues> -<attvalue for="code" value="PSP"/> -<attvalue for="city" value="Palm Springs"/> -<attvalue for="latitude" value="33.833333"/> -<attvalue for="longitude" value="-116.5"/> -</attvalues> -<viz:color b="246" g="125" r="57"/> -</node> -<node id="147" label="Municipal"> -<attvalues> -<attvalue for="code" value="STC"/> -<attvalue for="city" value="Saint Cloud"/> -<attvalue for="latitude" value="45.583333"/> -<attvalue for="longitude" value="-94.183333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="148" label="Municipal"> -<attvalues> -<attvalue for="code" value="SBA"/> -<attvalue for="city" value="Santa Barbara, CA"/> -<attvalue for="latitude" value="33.426111"/> -<attvalue for="longitude" value="-119.840278"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="149" label="Municipal/Baer Field"> -<attvalues> -<attvalue for="code" value="FWA"/> -<attvalue for="city" value="Fort Wayne"/> -<attvalue for="latitude" value="41.116667"/> -<attvalue for="longitude" value="-85.116667"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="150" label="Muskegon"> -<attvalues> -<attvalue for="code" value="MKG"/> -<attvalue for="city" value="Muskegon"/> -<attvalue for="latitude" value="43.166667"/> -<attvalue for="longitude" value="-86.233333"/> -</attvalues> -<viz:color b="246" g="126" r="54"/> -</node> -<node id="151" label="Myrtle Beach Afb"> -<attvalues> -<attvalue for="code" value="MYR"/> -<attvalue for="city" value="Myrtle Beach"/> -<attvalue for="latitude" value="33.7"/> -<attvalue for="longitude" value="-78.966667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="152" label="Nashville International"> -<attvalues> -<attvalue for="code" value="BNA"/> -<attvalue for="city" value="Nashville, TN"/> -<attvalue for="latitude" value="36.124444"/> -<attvalue for="longitude" value="-86.678056"/> -</attvalues> -<viz:color b="241" g="95" r="107"/> -</node> -<node id="153" label="Natrona County International Airport"> -<attvalues> -<attvalue for="code" value="CPR"/> -<attvalue for="city" value="Casper, WY"/> -<attvalue for="latitude" value="42.908056"/> -<attvalue for="longitude" value="-106.464444"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="154" label="Newark Liberty International"> -<attvalues> -<attvalue for="code" value="EWR"/> -<attvalue for="city" value="Newark"/> -<attvalue for="latitude" value="40.6925"/> -<attvalue for="longitude" value="-74.168611"/> -</attvalues> -<viz:color b="232" g="31" r="220"/> -</node> -<node id="155" label="Newport News/williamsb"> -<attvalues> -<attvalue for="code" value="PHF"/> -<attvalue for="city" value="Newport News"/> -<attvalue for="latitude" value="37.133333"/> -<attvalue for="longitude" value="-76.5"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="156" label="Nez Perce County Rgnl"> -<attvalues> -<attvalue for="code" value="LWS"/> -<attvalue for="city" value="Lewiston"/> -<attvalue for="latitude" value="46.383333"/> -<attvalue for="longitude" value="-117.033333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="157" label="Norfolk International Airport"> -<attvalues> -<attvalue for="code" value="ORF"/> -<attvalue for="city" value="Norfolk"/> -<attvalue for="latitude" value="36.9"/> -<attvalue for="longitude" value="-76.2"/> -</attvalues> -<viz:color b="245" g="117" r="71"/> -</node> -<node id="158" label="North Bend"> -<attvalues> -<attvalue for="code" value="OTH"/> -<attvalue for="city" value="North Bend"/> -<attvalue for="latitude" value="43.416667"/> -<attvalue for="longitude" value="-124.25"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="159" label="Northwest Arkansas Regional"> -<attvalues> -<attvalue for="code" value="XNA"/> -<attvalue for="city" value="Fayetteville, AR"/> -<attvalue for="latitude" value="36.281667"/> -<attvalue for="longitude" value="-94.306667"/> -</attvalues> -<viz:color b="244" g="113" r="77"/> -</node> -<node id="160" label="Oakland International Airport"> -<attvalues> -<attvalue for="code" value="OAK"/> -<attvalue for="city" value="Oakland"/> -<attvalue for="latitude" value="37.716667"/> -<attvalue for="longitude" value="-122.216667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="161" label="Oneida County"> -<attvalues> -<attvalue for="code" value="RHI"/> -<attvalue for="city" value="Rhinelander"/> -<attvalue for="latitude" value="45.633333"/> -<attvalue for="longitude" value="-89.45"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="162" label="Ontario International"> -<attvalues> -<attvalue for="code" value="ONT"/> -<attvalue for="city" value="Ontario"/> -<attvalue for="latitude" value="34.056111"/> -<attvalue for="longitude" value="-117.601111"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="163" label="Orlando International"> -<attvalues> -<attvalue for="code" value="MCO"/> -<attvalue for="city" value="Orlando"/> -<attvalue for="latitude" value="28.429444"/> -<attvalue for="longitude" value="-81.308889"/> -</attvalues> -<viz:color b="244" g="115" r="73"/> -</node> -<node id="164" label="Outagamie County"> -<attvalues> -<attvalue for="code" value="ATW"/> -<attvalue for="city" value="Appleton"/> -<attvalue for="latitude" value="44.266667"/> -<attvalue for="longitude" value="-88.516667"/> -</attvalues> -<viz:color b="242" g="102" r="96"/> -</node> -<node id="165" label="Palm Beach International"> -<attvalues> -<attvalue for="code" value="PBI"/> -<attvalue for="city" value="West Palm Beach"/> -<attvalue for="latitude" value="26.683056"/> -<attvalue for="longitude" value="-80.095556"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="166" label="Pangborn Field"> -<attvalues> -<attvalue for="code" value="EAT"/> -<attvalue for="city" value="Wenatchee"/> -<attvalue for="latitude" value="47.4"/> -<attvalue for="longitude" value="-120.2"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="167" label="Pendleton"> -<attvalues> -<attvalue for="code" value="PDT"/> -<attvalue for="city" value="Pendleton"/> -<attvalue for="latitude" value="45.7"/> -<attvalue for="longitude" value="-118.833333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="168" label="Philadelphia International"> -<attvalues> -<attvalue for="code" value="PHL"/> -<attvalue for="city" value="Philadelphia"/> -<attvalue for="latitude" value="39.871944"/> -<attvalue for="longitude" value="-75.241111"/> -</attvalues> -<viz:color b="243" g="108" r="86"/> -</node> -<node id="169" label="Piedmont Triad Intl"> -<attvalues> -<attvalue for="code" value="GSO"/> -<attvalue for="city" value="Greensboro, NC"/> -<attvalue for="latitude" value="36.097778"/> -<attvalue for="longitude" value="-79.937222"/> -</attvalues> -<viz:color b="244" g="115" r="73"/> -</node> -<node id="170" label="Pierre"> -<attvalues> -<attvalue for="code" value="PIR"/> -<attvalue for="city" value="Pierre"/> -<attvalue for="latitude" value="44.383333"/> -<attvalue for="longitude" value="-100.283333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="171" label="Pittsburgh International"> -<attvalues> -<attvalue for="code" value="PIT"/> -<attvalue for="city" value="Pittsburgh, PA"/> -<attvalue for="latitude" value="40.491389"/> -<attvalue for="longitude" value="-80.232778"/> -</attvalues> -<viz:color b="242" g="99" r="101"/> -</node> -<node id="172" label="Port Columbus Intl"> -<attvalues> -<attvalue for="code" value="CMH"/> -<attvalue for="city" value="Columbus"/> -<attvalue for="latitude" value="40.0"/> -<attvalue for="longitude" value="-82.883333"/> -</attvalues> -<viz:color b="239" g="80" r="134"/> -</node> -<node id="173" label="Portland International"> -<attvalues> -<attvalue for="code" value="PDX"/> -<attvalue for="city" value="Portland, OR"/> -<attvalue for="latitude" value="45.588611"/> -<attvalue for="longitude" value="-122.5975"/> -</attvalues> -<viz:color b="191" g="52" r="233"/> -</node> -<node id="174" label="Pullman-Moscow Regional Airport"> -<attvalues> -<attvalue for="code" value="PUW"/> -<attvalue for="city" value="Pullman"/> -<attvalue for="latitude" value="46.75"/> -<attvalue for="longitude" value="-117.116667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="175" label="Quad-City"> -<attvalues> -<attvalue for="code" value="MLI"/> -<attvalue for="city" value="Moline"/> -<attvalue for="latitude" value="41.45"/> -<attvalue for="longitude" value="-90.516667"/> -</attvalues> -<viz:color b="244" g="115" r="74"/> -</node> -<node id="176" label="Raleigh-durham International Airport"> -<attvalues> -<attvalue for="code" value="RDU"/> -<attvalue for="city" value="Raleigh/Durham, NC"/> -<attvalue for="latitude" value="35.877778"/> -<attvalue for="longitude" value="-78.7875"/> -</attvalues> -<viz:color b="242" g="99" r="101"/> -</node> -<node id="177" label="Redding"> -<attvalues> -<attvalue for="code" value="RDD"/> -<attvalue for="city" value="Redding"/> -<attvalue for="latitude" value="40.5"/> -<attvalue for="longitude" value="-122.3"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="178" label="Regional"> -<attvalues> -<attvalue for="code" value="DAB"/> -<attvalue for="city" value="Daytona Beach"/> -<attvalue for="latitude" value="29.183333"/> -<attvalue for="longitude" value="-81.05"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="179" label="Regional"> -<attvalues> -<attvalue for="code" value="FSM"/> -<attvalue for="city" value="Fort Smith"/> -<attvalue for="latitude" value="35.333333"/> -<attvalue for="longitude" value="-94.366667"/> -</attvalues> -<viz:color b="245" g="120" r="65"/> -</node> -<node id="180" label="Regional"> -<attvalues> -<attvalue for="code" value="PNS"/> -<attvalue for="city" value="Pensacola"/> -<attvalue for="latitude" value="30.466667"/> -<attvalue for="longitude" value="-87.183333"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="181" label="Regional"> -<attvalues> -<attvalue for="code" value="RAP"/> -<attvalue for="city" value="Rapid City"/> -<attvalue for="latitude" value="44.033333"/> -<attvalue for="longitude" value="-103.05"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="182" label="Regional"> -<attvalues> -<attvalue for="code" value="SHV"/> -<attvalue for="city" value="Shreveport"/> -<attvalue for="latitude" value="32.45"/> -<attvalue for="longitude" value="-93.816667"/> -</attvalues> -<viz:color b="245" g="121" r="64"/> -</node> -<node id="183" label="Reno-Tahoe International"> -<attvalues> -<attvalue for="code" value="RNO"/> -<attvalue for="city" value="Reno, NV"/> -<attvalue for="latitude" value="39.499167"/> -<attvalue for="longitude" value="-119.768056"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="184" label="Richland Municipal"> -<attvalues> -<attvalue for="code" value="SDY"/> -<attvalue for="city" value="Sidney"/> -<attvalue for="latitude" value="47.716667"/> -<attvalue for="longitude" value="-104.183333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="185" label="Richmond International Airport"> -<attvalues> -<attvalue for="code" value="RIC"/> -<attvalue for="city" value="Richmond, VA"/> -<attvalue for="latitude" value="37.5"/> -<attvalue for="longitude" value="-77.316667"/> -</attvalues> -<viz:color b="243" g="105" r="90"/> -</node> -<node id="186" label="Roanoke Regional Airport"> -<attvalues> -<attvalue for="code" value="ROA"/> -<attvalue for="city" value="Roanoke"/> -<attvalue for="latitude" value="37.316667"/> -<attvalue for="longitude" value="-79.983333"/> -</attvalues> -<viz:color b="246" g="125" r="56"/> -</node> -<node id="187" label="Roberts Field"> -<attvalues> -<attvalue for="code" value="RDM"/> -<attvalue for="city" value="Redmond"/> -<attvalue for="latitude" value="44.25"/> -<attvalue for="longitude" value="-121.15"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="188" label="Rogue Valley International - Medford Airport"> -<attvalues> -<attvalue for="code" value="MFR"/> -<attvalue for="city" value="Medford"/> -<attvalue for="latitude" value="42.366667"/> -<attvalue for="longitude" value="-122.866667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="189" label="Ronald Reagan Washington National Airport"> -<attvalues> -<attvalue for="code" value="DCA"/> -<attvalue for="city" value="Washington, DC"/> -<attvalue for="latitude" value="38.851944"/> -<attvalue for="longitude" value="-77.037778"/> -</attvalues> -<viz:color b="241" g="94" r="109"/> -</node> -<node id="190" label="Ryan"> -<attvalues> -<attvalue for="code" value="BTR"/> -<attvalue for="city" value="Baton Rouge"/> -<attvalue for="latitude" value="30.533333"/> -<attvalue for="longitude" value="-91.15"/> -</attvalues> -<viz:color b="246" g="126" r="54"/> -</node> -<node id="191" label="Sacramento International"> -<attvalues> -<attvalue for="code" value="SMF"/> -<attvalue for="city" value="Sacramento, CA"/> -<attvalue for="latitude" value="38.7"/> -<attvalue for="longitude" value="-121.616667"/> -</attvalues> -<viz:color b="244" g="115" r="74"/> -</node> -<node id="192" label="Salt Lake City International"> -<attvalues> -<attvalue for="code" value="SLC"/> -<attvalue for="city" value="Salt Lake City, UT"/> -<attvalue for="latitude" value="40.788333"/> -<attvalue for="longitude" value="-111.966667"/> -</attvalues> -<viz:color b="232" g="29" r="222"/> -</node> -<node id="193" label="San Antonio International"> -<attvalues> -<attvalue for="code" value="SAT"/> -<attvalue for="city" value="San Antonio"/> -<attvalue for="latitude" value="29.533333"/> -<attvalue for="longitude" value="-98.466667"/> -</attvalues> -<viz:color b="245" g="118" r="69"/> -</node> -<node id="194" label="San Diego International Airport"> -<attvalues> -<attvalue for="code" value="SAN"/> -<attvalue for="city" value="San Diego"/> -<attvalue for="latitude" value="32.733333"/> -<attvalue for="longitude" value="-117.183333"/> -</attvalues> -<viz:color b="244" g="116" r="72"/> -</node> -<node id="195" label="San Francisco International"> -<attvalues> -<attvalue for="code" value="SFO"/> -<attvalue for="city" value="San Francisco, CA"/> -<attvalue for="latitude" value="37.618889"/> -<attvalue for="longitude" value="-122.375"/> -</attvalues> -<viz:color b="243" g="108" r="86"/> -</node> -<node id="196" label="San Luis County Regional Airport"> -<attvalues> -<attvalue for="code" value="SBP"/> -<attvalue for="city" value="San Luis Obispo"/> -<attvalue for="latitude" value="35.236944"/> -<attvalue for="longitude" value="-120.641944"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="197" label="Sarasota-Bradenton International Airport"> -<attvalues> -<attvalue for="code" value="SRQ"/> -<attvalue for="city" value="Sarasota, FL"/> -<attvalue for="latitude" value="27.395556"/> -<attvalue for="longitude" value="-82.554444"/> -</attvalues> -<viz:color b="246" g="128" r="51"/> -</node> -<node id="198" label="Savannah/Hilton Head"> -<attvalues> -<attvalue for="code" value="SAV"/> -<attvalue for="city" value="Savannah"/> -<attvalue for="latitude" value="32.133333"/> -<attvalue for="longitude" value="-81.2"/> -</attvalues> -<viz:color b="246" g="128" r="51"/> -</node> -<node id="199" label="Sawyer International"> -<attvalues> -<attvalue for="code" value="MQT"/> -<attvalue for="city" value="Marquette"/> -<attvalue for="latitude" value="46.533333"/> -<attvalue for="longitude" value="-87.566667"/> -</attvalues> -<viz:color b="245" g="120" r="65"/> -</node> -<node id="200" label="Seattle-Tacoma International"> -<attvalues> -<attvalue for="code" value="SEA"/> -<attvalue for="city" value="Seattle, WA"/> -<attvalue for="latitude" value="47.448889"/> -<attvalue for="longitude" value="-122.309444"/> -</attvalues> -<viz:color b="80" g="125" r="245"/> -</node> -<node id="201" label="Sheffield"> -<attvalues> -<attvalue for="code" value="MSL"/> -<attvalue for="city" value="Sheffield"/> -<attvalue for="latitude" value="34.75"/> -<attvalue for="longitude" value="-87.616667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="202" label="Sioux Gateway"> -<attvalues> -<attvalue for="code" value="SUX"/> -<attvalue for="city" value="Sioux City"/> -<attvalue for="latitude" value="42.4"/> -<attvalue for="longitude" value="-96.383333"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="203" label="Sky Harbor Intl"> -<attvalues> -<attvalue for="code" value="PHX"/> -<attvalue for="city" value="Phoenix"/> -<attvalue for="latitude" value="33.433333"/> -<attvalue for="longitude" value="-112.033333"/> -</attvalues> -<viz:color b="244" g="112" r="78"/> -</node> -<node id="204" label="South Bend Regional"> -<attvalues> -<attvalue for="code" value="SBN"/> -<attvalue for="city" value="South Bend"/> -<attvalue for="latitude" value="41.7"/> -<attvalue for="longitude" value="-86.316667"/> -</attvalues> -<viz:color b="242" g="99" r="100"/> -</node> -<node id="205" label="Southwest Florida Reg"> -<attvalues> -<attvalue for="code" value="RSW"/> -<attvalue for="city" value="Fort Myers"/> -<attvalue for="latitude" value="26.542222"/> -<attvalue for="longitude" value="-81.755278"/> -</attvalues> -<viz:color b="244" g="113" r="76"/> -</node> -<node id="206" label="Spokane International"> -<attvalues> -<attvalue for="code" value="GEG"/> -<attvalue for="city" value="Spokane"/> -<attvalue for="latitude" value="47.619722"/> -<attvalue for="longitude" value="-117.533889"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="207" label="Springfield-Branson Rg"> -<attvalues> -<attvalue for="code" value="SGF"/> -<attvalue for="city" value="Springfield"/> -<attvalue for="latitude" value="37.25"/> -<attvalue for="longitude" value="-93.383333"/> -</attvalues> -<viz:color b="244" g="115" r="73"/> -</node> -<node id="208" label="Stewart"> -<attvalues> -<attvalue for="code" value="SWF"/> -<attvalue for="city" value="Newburgh"/> -<attvalue for="latitude" value="41.5"/> -<attvalue for="longitude" value="-74.016667"/> -</attvalues> -<viz:color b="246" g="125" r="56"/> -</node> -<node id="209" label="Sun Valley"> -<attvalues> -<attvalue for="code" value="SUN"/> -<attvalue for="city" value="Sun Valley"/> -<attvalue for="latitude" value="43.5"/> -<attvalue for="longitude" value="-114.316667"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="210" label="Syracuse Hancock International Airport"> -<attvalues> -<attvalue for="code" value="SYR"/> -<attvalue for="city" value="Syracuse"/> -<attvalue for="latitude" value="43.116667"/> -<attvalue for="longitude" value="-76.116667"/> -</attvalues> -<viz:color b="244" g="111" r="81"/> -</node> -<node id="211" label="T. F. Green Airport"> -<attvalues> -<attvalue for="code" value="PVD"/> -<attvalue for="city" value="Providence"/> -<attvalue for="latitude" value="41.733333"/> -<attvalue for="longitude" value="-71.433333"/> -</attvalues> -<viz:color b="246" g="124" r="57"/> -</node> -<node id="212" label="Tallahassee Regional Airport"> -<attvalues> -<attvalue for="code" value="TLH"/> -<attvalue for="city" value="Tallahassee"/> -<attvalue for="latitude" value="30.396389"/> -<attvalue for="longitude" value="-84.350278"/> -</attvalues> -<viz:color b="246" g="126" r="54"/> -</node> -<node id="213" label="Tampa International"> -<attvalues> -<attvalue for="code" value="TPA"/> -<attvalue for="city" value="Tampa"/> -<attvalue for="latitude" value="27.975556"/> -<attvalue for="longitude" value="-82.533056"/> -</attvalues> -<viz:color b="243" g="108" r="86"/> -</node> -<node id="214" label="Toledo Express"> -<attvalues> -<attvalue for="code" value="TOL"/> -<attvalue for="city" value="Toledo, OH"/> -<attvalue for="latitude" value="41.586944"/> -<attvalue for="longitude" value="-83.807778"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="215" label="Tompkins County"> -<attvalues> -<attvalue for="code" value="ITH"/> -<attvalue for="city" value="Ithaca"/> -<attvalue for="latitude" value="42.483333"/> -<attvalue for="longitude" value="-76.466667"/> -</attvalues> -<viz:color b="246" g="124" r="58"/> -</node> -<node id="216" label="Tri-cities"> -<attvalues> -<attvalue for="code" value="PSC"/> -<attvalue for="city" value="Pasco, WA"/> -<attvalue for="latitude" value="46.264722"/> -<attvalue for="longitude" value="-119.119167"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="217" label="Tri-cities Regional"> -<attvalues> -<attvalue for="code" value="TRI"/> -<attvalue for="city" value="Blountville"/> -<attvalue for="latitude" value="36.475278"/> -<attvalue for="longitude" value="-82.4075"/> -</attvalues> -<viz:color b="244" g="111" r="79"/> -</node> -<node id="218" label="Tucson International Airport"> -<attvalues> -<attvalue for="code" value="TUS"/> -<attvalue for="city" value="Tucson, AZ"/> -<attvalue for="latitude" value="32.116111"/> -<attvalue for="longitude" value="-110.941111"/> -</attvalues> -<viz:color b="246" g="125" r="56"/> -</node> -<node id="219" label="Tulsa International"> -<attvalues> -<attvalue for="code" value="TUL"/> -<attvalue for="city" value="Tulsa"/> -<attvalue for="latitude" value="36.198333"/> -<attvalue for="longitude" value="-95.888056"/> -</attvalues> -<viz:color b="244" g="110" r="82"/> -</node> -<node id="220" label="University Of Illinois Willard"> -<attvalues> -<attvalue for="code" value="CMI"/> -<attvalue for="city" value="Champaign"/> -<attvalue for="latitude" value="40.033333"/> -<attvalue for="longitude" value="-88.283333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="221" label="University Park"> -<attvalues> -<attvalue for="code" value="SCE"/> -<attvalue for="city" value="State College"/> -<attvalue for="latitude" value="40.772222"/> -<attvalue for="longitude" value="-77.883333"/> -</attvalues> -<viz:color b="245" g="123" r="59"/> -</node> -<node id="222" label="Walla Walla"> -<attvalues> -<attvalue for="code" value="ALW"/> -<attvalue for="city" value="Walla Walla"/> -<attvalue for="latitude" value="46.1"/> -<attvalue for="longitude" value="-118.3"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="223" label="Washington Dulles International"> -<attvalues> -<attvalue for="code" value="IAD"/> -<attvalue for="city" value="Washington, DC"/> -<attvalue for="latitude" value="38.944444"/> -<attvalue for="longitude" value="-77.455833"/> -</attvalues> -<viz:color b="244" g="112" r="78"/> -</node> -<node id="224" label="Waterloo"> -<attvalues> -<attvalue for="code" value="ALO"/> -<attvalue for="city" value="Waterloo"/> -<attvalue for="latitude" value="42.55"/> -<attvalue for="longitude" value="-92.383333"/> -</attvalues> -<viz:color b="246" g="126" r="54"/> -</node> -<node id="225" label="Watertown"> -<attvalues> -<attvalue for="code" value="ATY"/> -<attvalue for="city" value="Watertown"/> -<attvalue for="latitude" value="44.916667"/> -<attvalue for="longitude" value="-97.15"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="226" label="Westchester County Apt"> -<attvalues> -<attvalue for="code" value="HPN"/> -<attvalue for="city" value="White Plains"/> -<attvalue for="latitude" value="41.066667"/> -<attvalue for="longitude" value="-73.7"/> -</attvalues> -<viz:color b="246" g="127" r="52"/> -</node> -<node id="227" label="Westmoreland County"> -<attvalues> -<attvalue for="code" value="LBE"/> -<attvalue for="city" value="Latrobe"/> -<attvalue for="latitude" value="40.283333"/> -<attvalue for="longitude" value="-79.4"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="228" label="Wilkes-Barre/Scranton International Airport"> -<attvalues> -<attvalue for="code" value="AVP"/> -<attvalue for="city" value="Wilkes-Barre/Scranton, PA"/> -<attvalue for="latitude" value="41.338333"/> -<attvalue for="longitude" value="-75.723333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="229" label="Will Rogers World Airport"> -<attvalues> -<attvalue for="code" value="OKC"/> -<attvalue for="city" value="Oklahoma City"/> -<attvalue for="latitude" value="35.393056"/> -<attvalue for="longitude" value="-97.600833"/> -</attvalues> -<viz:color b="245" g="120" r="64"/> -</node> -<node id="230" label="William P Hobby"> -<attvalues> -<attvalue for="code" value="HOU"/> -<attvalue for="city" value="Houston, TX"/> -<attvalue for="latitude" value="29.645556"/> -<attvalue for="longitude" value="-95.278889"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="231" label="Wilmington International"> -<attvalues> -<attvalue for="code" value="ILM"/> -<attvalue for="city" value="Wilmington"/> -<attvalue for="latitude" value="34.270556"/> -<attvalue for="longitude" value="-77.9025"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="232" label="Yakima Air Terminal"> -<attvalues> -<attvalue for="code" value="YKM"/> -<attvalue for="city" value="Yakima"/> -<attvalue for="latitude" value="46.566667"/> -<attvalue for="longitude" value="-120.533333"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="233" label="Yampa Valley"> -<attvalues> -<attvalue for="code" value="HDN"/> -<attvalue for="city" value="Hayden"/> -<attvalue for="latitude" value="40.519444"/> -<attvalue for="longitude" value="-106.869444"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -<node id="234" label="Yeager"> -<attvalues> -<attvalue for="code" value="CRW"/> -<attvalue for="city" value="Charleston"/> -<attvalue for="latitude" value="38.366667"/> -<attvalue for="longitude" value="-81.6"/> -</attvalues> -<viz:color b="247" g="131" r="47"/> -</node> -</nodes> -<edges count="1297"> -<edge id="0" source="0" target="109"/> -<edge id="1" source="1" target="36"/> -<edge id="2" source="1" target="61"/> -<edge id="3" source="2" target="152"/> -<edge id="4" source="3" target="104"/> -<edge id="5" source="4" target="132"/> -<edge id="6" source="4" target="168"/> -<edge id="7" source="5" target="217"/> -<edge id="8" source="7" target="173"/> -<edge id="9" source="7" target="177"/> -<edge id="10" source="8" target="53"/> -<edge id="11" source="9" target="105"/> -<edge id="12" source="9" target="106"/> -<edge id="13" source="9" target="128"/> -<edge id="14" source="9" target="152"/> -<edge id="15" source="10" target="8"/> -<edge id="16" source="10" target="25"/> -<edge id="17" source="10" target="61"/> -<edge id="18" source="10" target="70"/> -<edge id="19" source="10" target="105"/> -<edge id="20" source="10" target="133"/> -<edge id="21" source="10" target="223"/> -<edge id="22" source="11" target="68"/> -<edge id="23" source="11" target="78"/> -<edge id="24" source="11" target="106"/> -<edge id="25" source="11" target="191"/> -<edge id="26" source="12" target="204"/> -<edge id="27" source="13" target="179"/> -<edge id="28" source="14" target="120"/> -<edge id="29" source="14" target="159"/> -<edge id="30" source="14" target="172"/> -<edge id="31" source="18" target="130"/> -<edge id="32" source="19" target="11"/> -<edge id="33" source="19" target="112"/> -<edge id="34" source="20" target="154"/> -<edge id="35" source="21" target="36"/> -<edge id="36" source="21" target="49"/> -<edge id="37" source="21" target="109"/> -<edge id="38" source="21" target="111"/> -<edge id="39" source="22" target="77"/> -<edge id="40" source="22" target="104"/> -<edge id="41" source="22" target="106"/> -<edge id="42" source="22" target="164"/> -<edge id="43" source="24" target="44"/> -<edge id="44" source="24" target="45"/> -<edge id="45" source="25" target="69"/> -<edge id="46" source="27" target="41"/> -<edge id="47" source="27" target="98"/> -<edge id="48" source="27" target="136"/> -<edge id="49" source="27" target="203"/> -<edge id="50" source="28" target="120"/> -<edge id="51" source="30" target="11"/> -<edge id="52" source="30" target="22"/> -<edge id="53" source="30" target="168"/> -<edge id="54" source="30" target="169"/> -<edge id="55" source="31" target="63"/> -<edge id="56" source="34" target="45"/> -<edge id="57" source="34" target="61"/> -<edge id="58" source="35" target="37"/> -<edge id="59" source="35" target="69"/> -<edge id="60" source="35" target="103"/> -<edge id="61" source="35" target="111"/> -<edge id="62" source="36" target="84"/> -<edge id="63" source="36" target="123"/> -<edge id="64" source="37" target="18"/> -<edge id="65" source="37" target="78"/> -<edge id="66" source="37" target="87"/> -<edge id="67" source="37" target="101"/> -<edge id="68" source="37" target="157"/> -<edge id="69" source="37" target="181"/> -<edge id="70" source="37" target="197"/> -<edge id="71" source="37" target="213"/> -<edge id="72" source="38" target="6"/> -<edge id="73" source="38" target="84"/> -<edge id="74" source="41" target="0"/> -<edge id="75" source="41" target="2"/> -<edge id="76" source="41" target="4"/> -<edge id="77" source="41" target="9"/> -<edge id="78" source="41" target="10"/> -<edge id="79" source="41" target="11"/> -<edge id="80" source="41" target="19"/> -<edge id="81" source="41" target="22"/> -<edge id="82" source="41" target="25"/> -<edge id="83" source="41" target="28"/> -<edge id="84" source="41" target="30"/> -<edge id="85" source="41" target="31"/> -<edge id="86" source="41" target="35"/> -<edge id="87" source="41" target="49"/> -<edge id="88" source="41" target="77"/> -<edge id="89" source="41" target="131"/> -<edge id="90" source="41" target="132"/> -<edge id="91" source="41" target="193"/> -<edge id="92" source="41" target="214"/> -<edge id="93" source="41" target="223"/> -<edge id="94" source="41" target="226"/> -<edge id="95" source="42" target="18"/> -<edge id="96" source="43" target="11"/> -<edge id="97" source="43" target="154"/> -<edge id="98" source="44" target="21"/> -<edge id="99" source="44" target="41"/> -<edge id="100" source="44" target="71"/> -<edge id="101" source="44" target="77"/> -<edge id="102" source="44" target="131"/> -<edge id="103" source="45" target="25"/> -<edge id="104" source="45" target="41"/> -<edge id="105" source="45" target="43"/> -<edge id="106" source="45" target="83"/> -<edge id="107" source="45" target="123"/> -<edge id="108" source="45" target="132"/> -<edge id="109" source="45" target="180"/> -<edge id="110" source="47" target="18"/> -<edge id="111" source="48" target="11"/> -<edge id="112" source="48" target="35"/> -<edge id="113" source="48" target="41"/> -<edge id="114" source="48" target="205"/> -<edge id="115" source="49" target="70"/> -<edge id="116" source="49" target="138"/> -<edge id="117" source="49" target="157"/> -<edge id="118" source="49" target="176"/> -<edge id="119" source="49" target="182"/> -<edge id="120" source="50" target="0"/> -<edge id="121" source="50" target="1"/> -<edge id="122" source="50" target="2"/> -<edge id="123" source="50" target="3"/> -<edge id="124" source="50" target="6"/> -<edge id="125" source="50" target="8"/> -<edge id="126" source="50" target="9"/> -<edge id="127" source="50" target="10"/> -<edge id="128" source="50" target="11"/> -<edge id="129" source="50" target="12"/> -<edge id="130" source="50" target="19"/> -<edge id="131" source="50" target="20"/> -<edge id="132" source="50" target="22"/> -<edge id="133" source="50" target="25"/> -<edge id="134" source="50" target="27"/> -<edge id="135" source="50" target="28"/> -<edge id="136" source="50" target="30"/> -<edge id="137" source="50" target="31"/> -<edge id="138" source="50" target="32"/> -<edge id="139" source="50" target="33"/> -<edge id="140" source="50" target="34"/> -<edge id="141" source="50" target="35"/> -<edge id="142" source="50" target="36"/> -<edge id="143" source="50" target="37"/> -<edge id="144" source="50" target="38"/> -<edge id="145" source="50" target="41"/> -<edge id="146" source="50" target="44"/> -<edge id="147" source="50" target="45"/> -<edge id="148" source="50" target="48"/> -<edge id="149" source="50" target="49"/> -<edge id="150" source="51" target="26"/> -<edge id="151" source="53" target="37"/> -<edge id="152" source="53" target="48"/> -<edge id="153" source="53" target="50"/> -<edge id="154" source="53" target="118"/> -<edge id="155" source="53" target="152"/> -<edge id="156" source="53" target="172"/> -<edge id="157" source="53" target="189"/> -<edge id="158" source="53" target="226"/> -<edge id="159" source="55" target="37"/> -<edge id="160" source="55" target="69"/> -<edge id="161" source="55" target="105"/> -<edge id="162" source="56" target="192"/> -<edge id="163" source="57" target="50"/> -<edge id="164" source="58" target="50"/> -<edge id="165" source="59" target="19"/> -<edge id="166" source="59" target="21"/> -<edge id="167" source="59" target="50"/> -<edge id="168" source="59" target="146"/> -<edge id="169" source="59" target="180"/> -<edge id="170" source="61" target="30"/> -<edge id="171" source="61" target="41"/> -<edge id="172" source="61" target="50"/> -<edge id="173" source="61" target="70"/> -<edge id="174" source="61" target="84"/> -<edge id="175" source="61" target="145"/> -<edge id="176" source="62" target="40"/> -<edge id="177" source="63" target="24"/> -<edge id="178" source="65" target="27"/> -<edge id="179" source="65" target="48"/> -<edge id="180" source="65" target="50"/> -<edge id="181" source="65" target="206"/> -<edge id="182" source="68" target="17"/> -<edge id="183" source="68" target="50"/> -<edge id="184" source="68" target="65"/> -<edge id="185" source="68" target="106"/> -<edge id="186" source="69" target="41"/> -<edge id="187" source="69" target="50"/> -<edge id="188" source="69" target="87"/> -<edge id="189" source="69" target="92"/> -<edge id="190" source="69" target="119"/> -<edge id="191" source="69" target="125"/> -<edge id="192" source="69" target="168"/> -<edge id="193" source="69" target="203"/> -<edge id="194" source="69" target="213"/> -<edge id="195" source="70" target="4"/> -<edge id="196" source="70" target="9"/> -<edge id="197" source="70" target="11"/> -<edge id="198" source="70" target="19"/> -<edge id="199" source="70" target="22"/> -<edge id="200" source="70" target="37"/> -<edge id="201" source="70" target="41"/> -<edge id="202" source="70" target="43"/> -<edge id="203" source="70" target="44"/> -<edge id="204" source="70" target="48"/> -<edge id="205" source="70" target="50"/> -<edge id="206" source="70" target="56"/> -<edge id="207" source="70" target="59"/> -<edge id="208" source="70" target="65"/> -<edge id="209" source="70" target="69"/> -<edge id="210" source="70" target="77"/> -<edge id="211" source="70" target="86"/> -<edge id="212" source="70" target="133"/> -<edge id="213" source="70" target="172"/> -<edge id="214" source="70" target="198"/> -<edge id="215" source="70" target="211"/> -<edge id="216" source="71" target="134"/> -<edge id="217" source="72" target="37"/> -<edge id="218" source="72" target="51"/> -<edge id="219" source="72" target="80"/> -<edge id="220" source="72" target="93"/> -<edge id="221" source="73" target="50"/> -<edge id="222" source="74" target="50"/> -<edge id="223" source="74" target="172"/> -<edge id="224" source="74" target="185"/> -<edge id="225" source="75" target="41"/> -<edge id="226" source="75" target="49"/> -<edge id="227" source="75" target="50"/> -<edge id="228" source="75" target="77"/> -<edge id="229" source="75" target="120"/> -<edge id="230" source="75" target="128"/> -<edge id="231" source="75" target="181"/> -<edge id="232" source="76" target="22"/> -<edge id="233" source="77" target="9"/> -<edge id="234" source="77" target="50"/> -<edge id="235" source="77" target="74"/> -<edge id="236" source="77" target="111"/> -<edge id="237" source="77" target="125"/> -<edge id="238" source="78" target="70"/> -<edge id="239" source="78" target="84"/> -<edge id="240" source="79" target="44"/> -<edge id="241" source="79" target="50"/> -<edge id="242" source="80" target="0"/> -<edge id="243" source="80" target="1"/> -<edge id="244" source="80" target="2"/> -<edge id="245" source="80" target="4"/> -<edge id="246" source="80" target="5"/> -<edge id="247" source="80" target="8"/> -<edge id="248" source="80" target="9"/> -<edge id="249" source="80" target="10"/> -<edge id="250" source="80" target="11"/> -<edge id="251" source="80" target="14"/> -<edge id="252" source="80" target="18"/> -<edge id="253" source="80" target="19"/> -<edge id="254" source="80" target="20"/> -<edge id="255" source="80" target="22"/> -<edge id="256" source="80" target="25"/> -<edge id="257" source="80" target="27"/> -<edge id="258" source="80" target="29"/> -<edge id="259" source="80" target="34"/> -<edge id="260" source="80" target="35"/> -<edge id="261" source="80" target="37"/> -<edge id="262" source="80" target="41"/> -<edge id="263" source="80" target="43"/> -<edge id="264" source="80" target="44"/> -<edge id="265" source="80" target="45"/> -<edge id="266" source="80" target="48"/> -<edge id="267" source="80" target="49"/> -<edge id="268" source="80" target="50"/> -<edge id="269" source="80" target="52"/> -<edge id="270" source="80" target="55"/> -<edge id="271" source="80" target="56"/> -<edge id="272" source="80" target="67"/> -<edge id="273" source="80" target="69"/> -<edge id="274" source="80" target="70"/> -<edge id="275" source="80" target="75"/> -<edge id="276" source="80" target="77"/> -<edge id="277" source="80" target="78"/> -<edge id="278" source="80" target="79"/> -<edge id="279" source="80" target="91"/> -<edge id="280" source="80" target="122"/> -<edge id="281" source="80" target="125"/> -<edge id="282" source="80" target="128"/> -<edge id="283" source="80" target="203"/> -<edge id="284" source="80" target="219"/> -<edge id="285" source="80" target="229"/> -<edge id="286" source="81" target="13"/> -<edge id="287" source="82" target="44"/> -<edge id="288" source="82" target="59"/> -<edge id="289" source="82" target="105"/> -<edge id="290" source="82" target="157"/> -<edge id="291" source="82" target="205"/> -<edge id="292" source="82" target="219"/> -<edge id="293" source="82" target="229"/> -<edge id="294" source="83" target="106"/> -<edge id="295" source="84" target="2"/> -<edge id="296" source="84" target="9"/> -<edge id="297" source="84" target="11"/> -<edge id="298" source="84" target="19"/> -<edge id="299" source="84" target="25"/> -<edge id="300" source="84" target="27"/> -<edge id="301" source="84" target="28"/> -<edge id="302" source="84" target="35"/> -<edge id="303" source="84" target="37"/> -<edge id="304" source="84" target="45"/> -<edge id="305" source="84" target="48"/> -<edge id="306" source="84" target="50"/> -<edge id="307" source="84" target="65"/> -<edge id="308" source="84" target="69"/> -<edge id="309" source="84" target="70"/> -<edge id="310" source="84" target="75"/> -<edge id="311" source="84" target="77"/> -<edge id="312" source="84" target="80"/> -<edge id="313" source="84" target="128"/> -<edge id="314" source="84" target="150"/> -<edge id="315" source="84" target="168"/> -<edge id="316" source="84" target="179"/> -<edge id="317" source="84" target="181"/> -<edge id="318" source="84" target="190"/> -<edge id="319" source="84" target="192"/> -<edge id="320" source="85" target="172"/> -<edge id="321" source="86" target="9"/> -<edge id="322" source="86" target="41"/> -<edge id="323" source="86" target="49"/> -<edge id="324" source="86" target="50"/> -<edge id="325" source="86" target="75"/> -<edge id="326" source="86" target="80"/> -<edge id="327" source="86" target="84"/> -<edge id="328" source="87" target="9"/> -<edge id="329" source="87" target="10"/> -<edge id="330" source="87" target="25"/> -<edge id="331" source="87" target="30"/> -<edge id="332" source="87" target="41"/> -<edge id="333" source="87" target="48"/> -<edge id="334" source="87" target="50"/> -<edge id="335" source="87" target="65"/> -<edge id="336" source="87" target="70"/> -<edge id="337" source="87" target="80"/> -<edge id="338" source="87" target="84"/> -<edge id="339" source="87" target="90"/> -<edge id="340" source="87" target="97"/> -<edge id="341" source="87" target="194"/> -<edge id="342" source="87" target="212"/> -<edge id="343" source="87" target="230"/> -<edge id="344" source="88" target="32"/> -<edge id="345" source="88" target="50"/> -<edge id="346" source="88" target="59"/> -<edge id="347" source="88" target="61"/> -<edge id="348" source="88" target="104"/> -<edge id="349" source="89" target="18"/> -<edge id="350" source="90" target="45"/> -<edge id="351" source="90" target="75"/> -<edge id="352" source="90" target="83"/> -<edge id="353" source="92" target="80"/> -<edge id="354" source="92" target="87"/> -<edge id="355" source="92" target="130"/> -<edge id="356" source="93" target="50"/> -<edge id="357" source="93" target="106"/> -<edge id="358" source="93" target="111"/> -<edge id="359" source="93" target="157"/> -<edge id="360" source="93" target="185"/> -<edge id="361" source="94" target="18"/> -<edge id="362" source="95" target="41"/> -<edge id="363" source="95" target="44"/> -<edge id="364" source="95" target="49"/> -<edge id="365" source="95" target="50"/> -<edge id="366" source="95" target="80"/> -<edge id="367" source="96" target="11"/> -<edge id="368" source="96" target="27"/> -<edge id="369" source="96" target="50"/> -<edge id="370" source="96" target="70"/> -<edge id="371" source="96" target="80"/> -<edge id="372" source="96" target="84"/> -<edge id="373" source="96" target="98"/> -<edge id="374" source="96" target="106"/> -<edge id="375" source="96" target="149"/> -<edge id="376" source="97" target="41"/> -<edge id="377" source="97" target="50"/> -<edge id="378" source="97" target="59"/> -<edge id="379" source="97" target="61"/> -<edge id="380" source="97" target="68"/> -<edge id="381" source="97" target="70"/> -<edge id="382" source="97" target="134"/> -<edge id="383" source="98" target="12"/> -<edge id="384" source="98" target="41"/> -<edge id="385" source="98" target="50"/> -<edge id="386" source="98" target="72"/> -<edge id="387" source="98" target="80"/> -<edge id="388" source="98" target="84"/> -<edge id="389" source="98" target="93"/> -<edge id="390" source="99" target="26"/> -<edge id="391" source="100" target="70"/> -<edge id="392" source="101" target="41"/> -<edge id="393" source="101" target="80"/> -<edge id="394" source="101" target="87"/> -<edge id="395" source="101" target="191"/> -<edge id="396" source="102" target="41"/> -<edge id="397" source="102" target="50"/> -<edge id="398" source="102" target="70"/> -<edge id="399" source="102" target="80"/> -<edge id="400" source="102" target="118"/> -<edge id="401" source="102" target="127"/> -<edge id="402" source="102" target="172"/> -<edge id="403" source="102" target="192"/> -<edge id="404" source="102" target="194"/> -<edge id="405" source="103" target="41"/> -<edge id="406" source="103" target="70"/> -<edge id="407" source="103" target="82"/> -<edge id="408" source="104" target="41"/> -<edge id="409" source="104" target="50"/> -<edge id="410" source="104" target="82"/> -<edge id="411" source="104" target="185"/> -<edge id="412" source="104" target="223"/> -<edge id="413" source="105" target="2"/> -<edge id="414" source="105" target="35"/> -<edge id="415" source="105" target="45"/> -<edge id="416" source="105" target="50"/> -<edge id="417" source="105" target="63"/> -<edge id="418" source="105" target="70"/> -<edge id="419" source="105" target="80"/> -<edge id="420" source="105" target="84"/> -<edge id="421" source="105" target="87"/> -<edge id="422" source="105" target="102"/> -<edge id="423" source="105" target="104"/> -<edge id="424" source="105" target="115"/> -<edge id="425" source="105" target="180"/> -<edge id="426" source="105" target="213"/> -<edge id="427" source="106" target="35"/> -<edge id="428" source="106" target="41"/> -<edge id="429" source="106" target="50"/> -<edge id="430" source="106" target="70"/> -<edge id="431" source="106" target="79"/> -<edge id="432" source="106" target="80"/> -<edge id="433" source="106" target="84"/> -<edge id="434" source="106" target="115"/> -<edge id="435" source="107" target="80"/> -<edge id="436" source="109" target="20"/> -<edge id="437" source="109" target="24"/> -<edge id="438" source="109" target="41"/> -<edge id="439" source="109" target="45"/> -<edge id="440" source="109" target="48"/> -<edge id="441" source="109" target="49"/> -<edge id="442" source="109" target="50"/> -<edge id="443" source="109" target="70"/> -<edge id="444" source="109" target="80"/> -<edge id="445" source="109" target="84"/> -<edge id="446" source="109" target="87"/> -<edge id="447" source="109" target="105"/> -<edge id="448" source="109" target="106"/> -<edge id="449" source="109" target="200"/> -<edge id="450" source="110" target="13"/> -<edge id="451" source="110" target="70"/> -<edge id="452" source="110" target="80"/> -<edge id="453" source="111" target="41"/> -<edge id="454" source="111" target="44"/> -<edge id="455" source="111" target="50"/> -<edge id="456" source="111" target="80"/> -<edge id="457" source="111" target="82"/> -<edge id="458" source="111" target="84"/> -<edge id="459" source="111" target="97"/> -<edge id="460" source="111" target="125"/> -<edge id="461" source="111" target="168"/> -<edge id="462" source="111" target="224"/> -<edge id="463" source="112" target="50"/> -<edge id="464" source="112" target="84"/> -<edge id="465" source="112" target="175"/> -<edge id="466" source="114" target="22"/> -<edge id="467" source="114" target="50"/> -<edge id="468" source="115" target="44"/> -<edge id="469" source="115" target="45"/> -<edge id="470" source="115" target="50"/> -<edge id="471" source="115" target="54"/> -<edge id="472" source="115" target="84"/> -<edge id="473" source="115" target="87"/> -<edge id="474" source="115" target="127"/> -<edge id="475" source="115" target="200"/> -<edge id="476" source="115" target="203"/> -<edge id="477" source="117" target="0"/> -<edge id="478" source="117" target="80"/> -<edge id="479" source="118" target="7"/> -<edge id="480" source="118" target="24"/> -<edge id="481" source="118" target="50"/> -<edge id="482" source="118" target="66"/> -<edge id="483" source="118" target="70"/> -<edge id="484" source="118" target="80"/> -<edge id="485" source="118" target="84"/> -<edge id="486" source="118" target="87"/> -<edge id="487" source="118" target="109"/> -<edge id="488" source="118" target="115"/> -<edge id="489" source="119" target="37"/> -<edge id="490" source="119" target="41"/> -<edge id="491" source="119" target="50"/> -<edge id="492" source="119" target="70"/> -<edge id="493" source="119" target="80"/> -<edge id="494" source="119" target="95"/> -<edge id="495" source="119" target="211"/> -<edge id="496" source="120" target="2"/> -<edge id="497" source="120" target="9"/> -<edge id="498" source="120" target="36"/> -<edge id="499" source="120" target="41"/> -<edge id="500" source="120" target="50"/> -<edge id="501" source="120" target="80"/> -<edge id="502" source="120" target="84"/> -<edge id="503" source="120" target="92"/> -<edge id="504" source="120" target="96"/> -<edge id="505" source="120" target="229"/> -<edge id="506" source="121" target="70"/> -<edge id="507" source="122" target="41"/> -<edge id="508" source="122" target="145"/> -<edge id="509" source="122" target="182"/> -<edge id="510" source="123" target="41"/> -<edge id="511" source="123" target="50"/> -<edge id="512" source="123" target="80"/> -<edge id="513" source="123" target="84"/> -<edge id="514" source="123" target="87"/> -<edge id="515" source="124" target="64"/> -<edge id="516" source="125" target="35"/> -<edge id="517" source="125" target="50"/> -<edge id="518" source="125" target="59"/> -<edge id="519" source="125" target="119"/> -<edge id="520" source="126" target="70"/> -<edge id="521" source="127" target="0"/> -<edge id="522" source="127" target="50"/> -<edge id="523" source="127" target="70"/> -<edge id="524" source="127" target="80"/> -<edge id="525" source="127" target="84"/> -<edge id="526" source="127" target="87"/> -<edge id="527" source="127" target="106"/> -<edge id="528" source="127" target="109"/> -<edge id="529" source="127" target="118"/> -<edge id="530" source="127" target="189"/> -<edge id="531" source="128" target="14"/> -<edge id="532" source="128" target="20"/> -<edge id="533" source="128" target="31"/> -<edge id="534" source="128" target="41"/> -<edge id="535" source="128" target="49"/> -<edge id="536" source="128" target="50"/> -<edge id="537" source="128" target="70"/> -<edge id="538" source="128" target="82"/> -<edge id="539" source="128" target="168"/> -<edge id="540" source="128" target="207"/> -<edge id="541" source="129" target="80"/> -<edge id="542" source="130" target="0"/> -<edge id="543" source="130" target="5"/> -<edge id="544" source="130" target="9"/> -<edge id="545" source="130" target="10"/> -<edge id="546" source="130" target="11"/> -<edge id="547" source="130" target="13"/> -<edge id="548" source="130" target="14"/> -<edge id="549" source="130" target="19"/> -<edge id="550" source="130" target="22"/> -<edge id="551" source="130" target="25"/> -<edge id="552" source="130" target="34"/> -<edge id="553" source="130" target="35"/> -<edge id="554" source="130" target="37"/> -<edge id="555" source="130" target="41"/> -<edge id="556" source="130" target="44"/> -<edge id="557" source="130" target="45"/> -<edge id="558" source="130" target="46"/> -<edge id="559" source="130" target="48"/> -<edge id="560" source="130" target="49"/> -<edge id="561" source="130" target="50"/> -<edge id="562" source="130" target="55"/> -<edge id="563" source="130" target="59"/> -<edge id="564" source="130" target="61"/> -<edge id="565" source="130" target="65"/> -<edge id="566" source="130" target="69"/> -<edge id="567" source="130" target="70"/> -<edge id="568" source="130" target="76"/> -<edge id="569" source="130" target="77"/> -<edge id="570" source="130" target="78"/> -<edge id="571" source="130" target="79"/> -<edge id="572" source="130" target="80"/> -<edge id="573" source="130" target="81"/> -<edge id="574" source="130" target="82"/> -<edge id="575" source="130" target="84"/> -<edge id="576" source="130" target="86"/> -<edge id="577" source="130" target="87"/> -<edge id="578" source="130" target="96"/> -<edge id="579" source="130" target="97"/> -<edge id="580" source="130" target="101"/> -<edge id="581" source="130" target="105"/> -<edge id="582" source="130" target="106"/> -<edge id="583" source="130" target="109"/> -<edge id="584" source="130" target="110"/> -<edge id="585" source="130" target="111"/> -<edge id="586" source="130" target="113"/> -<edge id="587" source="130" target="115"/> -<edge id="588" source="130" target="118"/> -<edge id="589" source="130" target="119"/> -<edge id="590" source="130" target="120"/> -<edge id="591" source="130" target="122"/> -<edge id="592" source="130" target="127"/> -<edge id="593" source="130" target="128"/> -<edge id="594" source="131" target="50"/> -<edge id="595" source="131" target="80"/> -<edge id="596" source="131" target="130"/> -<edge id="597" source="131" target="219"/> -<edge id="598" source="132" target="20"/> -<edge id="599" source="132" target="48"/> -<edge id="600" source="132" target="50"/> -<edge id="601" source="132" target="70"/> -<edge id="602" source="132" target="80"/> -<edge id="603" source="132" target="84"/> -<edge id="604" source="132" target="91"/> -<edge id="605" source="132" target="118"/> -<edge id="606" source="132" target="130"/> -<edge id="607" source="133" target="46"/> -<edge id="608" source="133" target="130"/> -<edge id="609" source="134" target="36"/> -<edge id="610" source="134" target="50"/> -<edge id="611" source="134" target="80"/> -<edge id="612" source="134" target="84"/> -<edge id="613" source="134" target="135"/> -<edge id="614" source="134" target="171"/> -<edge id="615" source="134" target="192"/> -<edge id="616" source="134" target="193"/> -<edge id="617" source="135" target="10"/> -<edge id="618" source="135" target="70"/> -<edge id="619" source="135" target="80"/> -<edge id="620" source="135" target="97"/> -<edge id="621" source="136" target="0"/> -<edge id="622" source="136" target="2"/> -<edge id="623" source="136" target="4"/> -<edge id="624" source="136" target="8"/> -<edge id="625" source="136" target="9"/> -<edge id="626" source="136" target="10"/> -<edge id="627" source="136" target="11"/> -<edge id="628" source="136" target="16"/> -<edge id="629" source="136" target="18"/> -<edge id="630" source="136" target="20"/> -<edge id="631" source="136" target="21"/> -<edge id="632" source="136" target="24"/> -<edge id="633" source="136" target="25"/> -<edge id="634" source="136" target="26"/> -<edge id="635" source="136" target="30"/> -<edge id="636" source="136" target="31"/> -<edge id="637" source="136" target="33"/> -<edge id="638" source="136" target="34"/> -<edge id="639" source="136" target="35"/> -<edge id="640" source="136" target="36"/> -<edge id="641" source="136" target="37"/> -<edge id="642" source="136" target="39"/> -<edge id="643" source="136" target="40"/> -<edge id="644" source="136" target="41"/> -<edge id="645" source="136" target="43"/> -<edge id="646" source="136" target="44"/> -<edge id="647" source="136" target="45"/> -<edge id="648" source="136" target="48"/> -<edge id="649" source="136" target="49"/> -<edge id="650" source="136" target="50"/> -<edge id="651" source="136" target="51"/> -<edge id="652" source="136" target="53"/> -<edge id="653" source="136" target="54"/> -<edge id="654" source="136" target="59"/> -<edge id="655" source="136" target="62"/> -<edge id="656" source="136" target="63"/> -<edge id="657" source="136" target="64"/> -<edge id="658" source="136" target="65"/> -<edge id="659" source="136" target="68"/> -<edge id="660" source="136" target="69"/> -<edge id="661" source="136" target="70"/> -<edge id="662" source="136" target="71"/> -<edge id="663" source="136" target="72"/> -<edge id="664" source="136" target="74"/> -<edge id="665" source="136" target="75"/> -<edge id="666" source="136" target="79"/> -<edge id="667" source="136" target="80"/> -<edge id="668" source="136" target="82"/> -<edge id="669" source="136" target="83"/> -<edge id="670" source="136" target="84"/> -<edge id="671" source="136" target="85"/> -<edge id="672" source="136" target="87"/> -<edge id="673" source="136" target="90"/> -<edge id="674" source="136" target="92"/> -<edge id="675" source="136" target="93"/> -<edge id="676" source="136" target="97"/> -<edge id="677" source="136" target="98"/> -<edge id="678" source="136" target="99"/> -<edge id="679" source="136" target="101"/> -<edge id="680" source="136" target="102"/> -<edge id="681" source="136" target="103"/> -<edge id="682" source="136" target="104"/> -<edge id="683" source="136" target="105"/> -<edge id="684" source="136" target="106"/> -<edge id="685" source="136" target="109"/> -<edge id="686" source="136" target="111"/> -<edge id="687" source="136" target="114"/> -<edge id="688" source="136" target="115"/> -<edge id="689" source="136" target="118"/> -<edge id="690" source="136" target="119"/> -<edge id="691" source="136" target="120"/> -<edge id="692" source="136" target="124"/> -<edge id="693" source="136" target="125"/> -<edge id="694" source="136" target="127"/> -<edge id="695" source="136" target="128"/> -<edge id="696" source="136" target="130"/> -<edge id="697" source="136" target="132"/> -<edge id="698" source="136" target="133"/> -<edge id="699" source="136" target="134"/> -<edge id="700" source="136" target="135"/> -<edge id="701" source="136" target="210"/> -<edge id="702" source="137" target="136"/> -<edge id="703" source="137" target="171"/> -<edge id="704" source="138" target="80"/> -<edge id="705" source="138" target="115"/> -<edge id="706" source="138" target="130"/> -<edge id="707" source="139" target="118"/> -<edge id="708" source="140" target="99"/> -<edge id="709" source="140" target="136"/> -<edge id="710" source="141" target="9"/> -<edge id="711" source="141" target="134"/> -<edge id="712" source="141" target="136"/> -<edge id="713" source="141" target="224"/> -<edge id="714" source="142" target="70"/> -<edge id="715" source="143" target="18"/> -<edge id="716" source="144" target="18"/> -<edge id="717" source="145" target="13"/> -<edge id="718" source="145" target="70"/> -<edge id="719" source="145" target="130"/> -<edge id="720" source="146" target="136"/> -<edge id="721" source="146" target="176"/> -<edge id="722" source="147" target="136"/> -<edge id="723" source="148" target="118"/> -<edge id="724" source="149" target="50"/> -<edge id="725" source="149" target="210"/> -<edge id="726" source="149" target="215"/> -<edge id="727" source="150" target="50"/> -<edge id="728" source="151" target="50"/> -<edge id="729" source="151" target="136"/> -<edge id="730" source="152" target="1"/> -<edge id="731" source="152" target="41"/> -<edge id="732" source="152" target="50"/> -<edge id="733" source="152" target="70"/> -<edge id="734" source="152" target="80"/> -<edge id="735" source="152" target="82"/> -<edge id="736" source="152" target="84"/> -<edge id="737" source="152" target="85"/> -<edge id="738" source="152" target="95"/> -<edge id="739" source="152" target="102"/> -<edge id="740" source="152" target="130"/> -<edge id="741" source="152" target="136"/> -<edge id="742" source="152" target="229"/> -<edge id="743" source="153" target="136"/> -<edge id="744" source="154" target="0"/> -<edge id="745" source="154" target="2"/> -<edge id="746" source="154" target="4"/> -<edge id="747" source="154" target="8"/> -<edge id="748" source="154" target="9"/> -<edge id="749" source="154" target="11"/> -<edge id="750" source="154" target="19"/> -<edge id="751" source="154" target="22"/> -<edge id="752" source="154" target="25"/> -<edge id="753" source="154" target="27"/> -<edge id="754" source="154" target="28"/> -<edge id="755" source="154" target="34"/> -<edge id="756" source="154" target="35"/> -<edge id="757" source="154" target="37"/> -<edge id="758" source="154" target="41"/> -<edge id="759" source="154" target="44"/> -<edge id="760" source="154" target="48"/> -<edge id="761" source="154" target="50"/> -<edge id="762" source="154" target="59"/> -<edge id="763" source="154" target="65"/> -<edge id="764" source="154" target="69"/> -<edge id="765" source="154" target="70"/> -<edge id="766" source="154" target="75"/> -<edge id="767" source="154" target="77"/> -<edge id="768" source="154" target="80"/> -<edge id="769" source="154" target="84"/> -<edge id="770" source="154" target="87"/> -<edge id="771" source="154" target="95"/> -<edge id="772" source="154" target="97"/> -<edge id="773" source="154" target="98"/> -<edge id="774" source="154" target="103"/> -<edge id="775" source="154" target="105"/> -<edge id="776" source="154" target="106"/> -<edge id="777" source="154" target="111"/> -<edge id="778" source="154" target="118"/> -<edge id="779" source="154" target="119"/> -<edge id="780" source="154" target="120"/> -<edge id="781" source="154" target="123"/> -<edge id="782" source="154" target="127"/> -<edge id="783" source="154" target="128"/> -<edge id="784" source="154" target="130"/> -<edge id="785" source="154" target="132"/> -<edge id="786" source="154" target="134"/> -<edge id="787" source="154" target="135"/> -<edge id="788" source="154" target="136"/> -<edge id="789" source="154" target="152"/> -<edge id="790" source="155" target="80"/> -<edge id="791" source="156" target="24"/> -<edge id="792" source="157" target="41"/> -<edge id="793" source="157" target="50"/> -<edge id="794" source="157" target="53"/> -<edge id="795" source="157" target="70"/> -<edge id="796" source="157" target="80"/> -<edge id="797" source="157" target="136"/> -<edge id="798" source="157" target="154"/> -<edge id="799" source="159" target="50"/> -<edge id="800" source="159" target="70"/> -<edge id="801" source="159" target="72"/> -<edge id="802" source="159" target="87"/> -<edge id="803" source="159" target="130"/> -<edge id="804" source="159" target="136"/> -<edge id="805" source="159" target="168"/> -<edge id="806" source="160" target="70"/> -<edge id="807" source="160" target="80"/> -<edge id="808" source="161" target="39"/> -<edge id="809" source="161" target="136"/> -<edge id="810" source="162" target="70"/> -<edge id="811" source="162" target="80"/> -<edge id="812" source="163" target="20"/> -<edge id="813" source="163" target="45"/> -<edge id="814" source="163" target="50"/> -<edge id="815" source="163" target="70"/> -<edge id="816" source="163" target="80"/> -<edge id="817" source="163" target="84"/> -<edge id="818" source="163" target="87"/> -<edge id="819" source="163" target="106"/> -<edge id="820" source="163" target="118"/> -<edge id="821" source="163" target="127"/> -<edge id="822" source="163" target="130"/> -<edge id="823" source="163" target="131"/> -<edge id="824" source="163" target="132"/> -<edge id="825" source="163" target="136"/> -<edge id="826" source="163" target="154"/> -<edge id="827" source="163" target="192"/> -<edge id="828" source="163" target="195"/> -<edge id="829" source="164" target="41"/> -<edge id="830" source="164" target="50"/> -<edge id="831" source="164" target="53"/> -<edge id="832" source="164" target="80"/> -<edge id="833" source="164" target="128"/> -<edge id="834" source="164" target="136"/> -<edge id="835" source="164" target="185"/> -<edge id="836" source="164" target="215"/> -<edge id="837" source="165" target="35"/> -<edge id="838" source="165" target="41"/> -<edge id="839" source="165" target="50"/> -<edge id="840" source="165" target="70"/> -<edge id="841" source="165" target="80"/> -<edge id="842" source="165" target="84"/> -<edge id="843" source="165" target="106"/> -<edge id="844" source="165" target="154"/> -<edge id="845" source="168" target="37"/> -<edge id="846" source="168" target="41"/> -<edge id="847" source="168" target="48"/> -<edge id="848" source="168" target="50"/> -<edge id="849" source="168" target="70"/> -<edge id="850" source="168" target="80"/> -<edge id="851" source="168" target="87"/> -<edge id="852" source="168" target="96"/> -<edge id="853" source="168" target="103"/> -<edge id="854" source="168" target="106"/> -<edge id="855" source="168" target="130"/> -<edge id="856" source="168" target="136"/> -<edge id="857" source="168" target="195"/> -<edge id="858" source="169" target="41"/> -<edge id="859" source="169" target="49"/> -<edge id="860" source="169" target="50"/> -<edge id="861" source="169" target="70"/> -<edge id="862" source="169" target="80"/> -<edge id="863" source="169" target="130"/> -<edge id="864" source="169" target="136"/> -<edge id="865" source="169" target="154"/> -<edge id="866" source="169" target="159"/> -<edge id="867" source="170" target="136"/> -<edge id="868" source="171" target="19"/> -<edge id="869" source="171" target="30"/> -<edge id="870" source="171" target="41"/> -<edge id="871" source="171" target="44"/> -<edge id="872" source="171" target="49"/> -<edge id="873" source="171" target="50"/> -<edge id="874" source="171" target="70"/> -<edge id="875" source="171" target="80"/> -<edge id="876" source="171" target="86"/> -<edge id="877" source="171" target="130"/> -<edge id="878" source="171" target="136"/> -<edge id="879" source="171" target="154"/> -<edge id="880" source="171" target="219"/> -<edge id="881" source="172" target="12"/> -<edge id="882" source="172" target="41"/> -<edge id="883" source="172" target="50"/> -<edge id="884" source="172" target="55"/> -<edge id="885" source="172" target="80"/> -<edge id="886" source="172" target="86"/> -<edge id="887" source="172" target="96"/> -<edge id="888" source="172" target="109"/> -<edge id="889" source="172" target="120"/> -<edge id="890" source="172" target="130"/> -<edge id="891" source="172" target="136"/> -<edge id="892" source="172" target="154"/> -<edge id="893" source="172" target="176"/> -<edge id="894" source="172" target="207"/> -<edge id="895" source="172" target="208"/> -<edge id="896" source="173" target="23"/> -<edge id="897" source="173" target="24"/> -<edge id="898" source="173" target="41"/> -<edge id="899" source="173" target="48"/> -<edge id="900" source="173" target="60"/> -<edge id="901" source="173" target="65"/> -<edge id="902" source="173" target="69"/> -<edge id="903" source="173" target="70"/> -<edge id="904" source="173" target="80"/> -<edge id="905" source="173" target="82"/> -<edge id="906" source="173" target="103"/> -<edge id="907" source="173" target="108"/> -<edge id="908" source="173" target="118"/> -<edge id="909" source="173" target="127"/> -<edge id="910" source="173" target="135"/> -<edge id="911" source="173" target="136"/> -<edge id="912" source="173" target="154"/> -<edge id="913" source="173" target="158"/> -<edge id="914" source="173" target="160"/> -<edge id="915" source="173" target="162"/> -<edge id="916" source="173" target="167"/> -<edge id="917" source="174" target="24"/> -<edge id="918" source="175" target="2"/> -<edge id="919" source="175" target="50"/> -<edge id="920" source="175" target="105"/> -<edge id="921" source="175" target="130"/> -<edge id="922" source="175" target="136"/> -<edge id="923" source="176" target="41"/> -<edge id="924" source="176" target="50"/> -<edge id="925" source="176" target="70"/> -<edge id="926" source="176" target="80"/> -<edge id="927" source="176" target="87"/> -<edge id="928" source="176" target="106"/> -<edge id="929" source="176" target="130"/> -<edge id="930" source="176" target="136"/> -<edge id="931" source="176" target="138"/> -<edge id="932" source="176" target="154"/> -<edge id="933" source="176" target="159"/> -<edge id="934" source="176" target="175"/> -<edge id="935" source="176" target="200"/> -<edge id="936" source="177" target="118"/> -<edge id="937" source="177" target="173"/> -<edge id="938" source="178" target="80"/> -<edge id="939" source="178" target="154"/> -<edge id="940" source="179" target="35"/> -<edge id="941" source="179" target="122"/> -<edge id="942" source="179" target="130"/> -<edge id="943" source="179" target="217"/> -<edge id="944" source="180" target="70"/> -<edge id="945" source="180" target="80"/> -<edge id="946" source="180" target="130"/> -<edge id="947" source="180" target="169"/> -<edge id="948" source="180" target="171"/> -<edge id="949" source="181" target="50"/> -<edge id="950" source="181" target="93"/> -<edge id="951" source="181" target="136"/> -<edge id="952" source="182" target="50"/> -<edge id="953" source="182" target="70"/> -<edge id="954" source="182" target="128"/> -<edge id="955" source="182" target="130"/> -<edge id="956" source="182" target="171"/> -<edge id="957" source="183" target="70"/> -<edge id="958" source="183" target="80"/> -<edge id="959" source="183" target="118"/> -<edge id="960" source="183" target="173"/> -<edge id="961" source="184" target="18"/> -<edge id="962" source="185" target="41"/> -<edge id="963" source="185" target="50"/> -<edge id="964" source="185" target="80"/> -<edge id="965" source="185" target="84"/> -<edge id="966" source="185" target="86"/> -<edge id="967" source="185" target="114"/> -<edge id="968" source="185" target="130"/> -<edge id="969" source="185" target="136"/> -<edge id="970" source="185" target="154"/> -<edge id="971" source="185" target="212"/> -<edge id="972" source="186" target="30"/> -<edge id="973" source="186" target="50"/> -<edge id="974" source="186" target="80"/> -<edge id="975" source="187" target="173"/> -<edge id="976" source="188" target="118"/> -<edge id="977" source="188" target="173"/> -<edge id="978" source="189" target="10"/> -<edge id="979" source="189" target="20"/> -<edge id="980" source="189" target="21"/> -<edge id="981" source="189" target="24"/> -<edge id="982" source="189" target="41"/> -<edge id="983" source="189" target="45"/> -<edge id="984" source="189" target="49"/> -<edge id="985" source="189" target="50"/> -<edge id="986" source="189" target="70"/> -<edge id="987" source="189" target="80"/> -<edge id="988" source="189" target="84"/> -<edge id="989" source="189" target="87"/> -<edge id="990" source="189" target="106"/> -<edge id="991" source="189" target="118"/> -<edge id="992" source="189" target="130"/> -<edge id="993" source="189" target="134"/> -<edge id="994" source="189" target="136"/> -<edge id="995" source="189" target="154"/> -<edge id="996" source="189" target="173"/> -<edge id="997" source="189" target="200"/> -<edge id="998" source="190" target="70"/> -<edge id="999" source="190" target="80"/> -<edge id="1000" source="190" target="120"/> -<edge id="1001" source="190" target="130"/> -<edge id="1002" source="190" target="171"/> -<edge id="1003" source="190" target="172"/> -<edge id="1004" source="191" target="50"/> -<edge id="1005" source="191" target="70"/> -<edge id="1006" source="191" target="80"/> -<edge id="1007" source="191" target="134"/> -<edge id="1008" source="191" target="136"/> -<edge id="1009" source="191" target="173"/> -<edge id="1010" source="192" target="9"/> -<edge id="1011" source="192" target="11"/> -<edge id="1012" source="192" target="18"/> -<edge id="1013" source="192" target="24"/> -<edge id="1014" source="192" target="44"/> -<edge id="1015" source="192" target="48"/> -<edge id="1016" source="192" target="50"/> -<edge id="1017" source="192" target="59"/> -<edge id="1018" source="192" target="63"/> -<edge id="1019" source="192" target="66"/> -<edge id="1020" source="192" target="68"/> -<edge id="1021" source="192" target="70"/> -<edge id="1022" source="192" target="71"/> -<edge id="1023" source="192" target="80"/> -<edge id="1024" source="192" target="82"/> -<edge id="1025" source="192" target="83"/> -<edge id="1026" source="192" target="90"/> -<edge id="1027" source="192" target="103"/> -<edge id="1028" source="192" target="111"/> -<edge id="1029" source="192" target="118"/> -<edge id="1030" source="192" target="127"/> -<edge id="1031" source="192" target="135"/> -<edge id="1032" source="192" target="136"/> -<edge id="1033" source="192" target="137"/> -<edge id="1034" source="192" target="148"/> -<edge id="1035" source="192" target="152"/> -<edge id="1036" source="192" target="154"/> -<edge id="1037" source="192" target="160"/> -<edge id="1038" source="192" target="162"/> -<edge id="1039" source="192" target="168"/> -<edge id="1040" source="192" target="172"/> -<edge id="1041" source="192" target="173"/> -<edge id="1042" source="192" target="176"/> -<edge id="1043" source="192" target="181"/> -<edge id="1044" source="192" target="183"/> -<edge id="1045" source="192" target="189"/> -<edge id="1046" source="192" target="191"/> -<edge id="1047" source="193" target="0"/> -<edge id="1048" source="193" target="50"/> -<edge id="1049" source="193" target="53"/> -<edge id="1050" source="193" target="70"/> -<edge id="1051" source="193" target="80"/> -<edge id="1052" source="193" target="130"/> -<edge id="1053" source="193" target="136"/> -<edge id="1054" source="193" target="154"/> -<edge id="1055" source="194" target="25"/> -<edge id="1056" source="194" target="41"/> -<edge id="1057" source="194" target="50"/> -<edge id="1058" source="194" target="70"/> -<edge id="1059" source="194" target="109"/> -<edge id="1060" source="194" target="115"/> -<edge id="1061" source="194" target="118"/> -<edge id="1062" source="194" target="136"/> -<edge id="1063" source="194" target="154"/> -<edge id="1064" source="194" target="173"/> -<edge id="1065" source="194" target="189"/> -<edge id="1066" source="194" target="192"/> -<edge id="1067" source="195" target="41"/> -<edge id="1068" source="195" target="50"/> -<edge id="1069" source="195" target="69"/> -<edge id="1070" source="195" target="70"/> -<edge id="1071" source="195" target="80"/> -<edge id="1072" source="195" target="84"/> -<edge id="1073" source="195" target="102"/> -<edge id="1074" source="195" target="109"/> -<edge id="1075" source="195" target="115"/> -<edge id="1076" source="195" target="118"/> -<edge id="1077" source="195" target="136"/> -<edge id="1078" source="195" target="146"/> -<edge id="1079" source="195" target="154"/> -<edge id="1080" source="195" target="173"/> -<edge id="1081" source="195" target="192"/> -<edge id="1082" source="196" target="118"/> -<edge id="1083" source="197" target="41"/> -<edge id="1084" source="197" target="50"/> -<edge id="1085" source="197" target="80"/> -<edge id="1086" source="197" target="154"/> -<edge id="1087" source="198" target="44"/> -<edge id="1088" source="198" target="50"/> -<edge id="1089" source="198" target="80"/> -<edge id="1090" source="198" target="130"/> -<edge id="1091" source="198" target="136"/> -<edge id="1092" source="198" target="152"/> -<edge id="1093" source="198" target="154"/> -<edge id="1094" source="199" target="50"/> -<edge id="1095" source="199" target="136"/> -<edge id="1096" source="199" target="221"/> -<edge id="1097" source="200" target="15"/> -<edge id="1098" source="200" target="17"/> -<edge id="1099" source="200" target="18"/> -<edge id="1100" source="200" target="23"/> -<edge id="1101" source="200" target="24"/> -<edge id="1102" source="200" target="41"/> -<edge id="1103" source="200" target="48"/> -<edge id="1104" source="200" target="50"/> -<edge id="1105" source="200" target="60"/> -<edge id="1106" source="200" target="63"/> -<edge id="1107" source="200" target="65"/> -<edge id="1108" source="200" target="66"/> -<edge id="1109" source="200" target="68"/> -<edge id="1110" source="200" target="69"/> -<edge id="1111" source="200" target="70"/> -<edge id="1112" source="200" target="71"/> -<edge id="1113" source="200" target="80"/> -<edge id="1114" source="200" target="83"/> -<edge id="1115" source="200" target="84"/> -<edge id="1116" source="200" target="90"/> -<edge id="1117" source="200" target="103"/> -<edge id="1118" source="200" target="116"/> -<edge id="1119" source="200" target="118"/> -<edge id="1120" source="200" target="127"/> -<edge id="1121" source="200" target="130"/> -<edge id="1122" source="200" target="135"/> -<edge id="1123" source="200" target="136"/> -<edge id="1124" source="200" target="137"/> -<edge id="1125" source="200" target="146"/> -<edge id="1126" source="200" target="148"/> -<edge id="1127" source="200" target="154"/> -<edge id="1128" source="200" target="156"/> -<edge id="1129" source="200" target="160"/> -<edge id="1130" source="200" target="162"/> -<edge id="1131" source="200" target="166"/> -<edge id="1132" source="200" target="173"/> -<edge id="1133" source="200" target="174"/> -<edge id="1134" source="200" target="183"/> -<edge id="1135" source="200" target="187"/> -<edge id="1136" source="200" target="188"/> -<edge id="1137" source="200" target="191"/> -<edge id="1138" source="200" target="192"/> -<edge id="1139" source="200" target="193"/> -<edge id="1140" source="200" target="194"/> -<edge id="1141" source="200" target="195"/> -<edge id="1142" source="201" target="113"/> -<edge id="1143" source="201" target="130"/> -<edge id="1144" source="202" target="79"/> -<edge id="1145" source="202" target="136"/> -<edge id="1146" source="202" target="147"/> -<edge id="1147" source="203" target="10"/> -<edge id="1148" source="203" target="41"/> -<edge id="1149" source="203" target="50"/> -<edge id="1150" source="203" target="70"/> -<edge id="1151" source="203" target="84"/> -<edge id="1152" source="203" target="109"/> -<edge id="1153" source="203" target="130"/> -<edge id="1154" source="203" target="136"/> -<edge id="1155" source="203" target="154"/> -<edge id="1156" source="203" target="168"/> -<edge id="1157" source="203" target="173"/> -<edge id="1158" source="203" target="189"/> -<edge id="1159" source="203" target="192"/> -<edge id="1160" source="203" target="200"/> -<edge id="1161" source="204" target="41"/> -<edge id="1162" source="204" target="50"/> -<edge id="1163" source="204" target="57"/> -<edge id="1164" source="204" target="80"/> -<edge id="1165" source="204" target="88"/> -<edge id="1166" source="204" target="136"/> -<edge id="1167" source="204" target="186"/> -<edge id="1168" source="205" target="41"/> -<edge id="1169" source="205" target="50"/> -<edge id="1170" source="205" target="69"/> -<edge id="1171" source="205" target="70"/> -<edge id="1172" source="205" target="80"/> -<edge id="1173" source="205" target="84"/> -<edge id="1174" source="205" target="87"/> -<edge id="1175" source="205" target="130"/> -<edge id="1176" source="205" target="136"/> -<edge id="1177" source="205" target="154"/> -<edge id="1178" source="205" target="173"/> -<edge id="1179" source="205" target="175"/> -<edge id="1180" source="206" target="24"/> -<edge id="1181" source="206" target="102"/> -<edge id="1182" source="206" target="136"/> -<edge id="1183" source="206" target="173"/> -<edge id="1184" source="206" target="192"/> -<edge id="1185" source="206" target="200"/> -<edge id="1186" source="207" target="28"/> -<edge id="1187" source="207" target="45"/> -<edge id="1188" source="207" target="50"/> -<edge id="1189" source="207" target="70"/> -<edge id="1190" source="207" target="130"/> -<edge id="1191" source="207" target="131"/> -<edge id="1192" source="207" target="136"/> -<edge id="1193" source="207" target="169"/> -<edge id="1194" source="208" target="10"/> -<edge id="1195" source="208" target="50"/> -<edge id="1196" source="208" target="149"/> -<edge id="1197" source="209" target="200"/> -<edge id="1198" source="210" target="50"/> -<edge id="1199" source="210" target="80"/> -<edge id="1200" source="210" target="84"/> -<edge id="1201" source="210" target="87"/> -<edge id="1202" source="210" target="111"/> -<edge id="1203" source="210" target="119"/> -<edge id="1204" source="210" target="154"/> -<edge id="1205" source="211" target="20"/> -<edge id="1206" source="211" target="41"/> -<edge id="1207" source="211" target="50"/> -<edge id="1208" source="211" target="84"/> -<edge id="1209" source="211" target="106"/> -<edge id="1210" source="211" target="134"/> -<edge id="1211" source="211" target="154"/> -<edge id="1212" source="212" target="44"/> -<edge id="1213" source="212" target="80"/> -<edge id="1214" source="212" target="111"/> -<edge id="1215" source="212" target="130"/> -<edge id="1216" source="212" target="152"/> -<edge id="1217" source="213" target="20"/> -<edge id="1218" source="213" target="41"/> -<edge id="1219" source="213" target="50"/> -<edge id="1220" source="213" target="70"/> -<edge id="1221" source="213" target="80"/> -<edge id="1222" source="213" target="84"/> -<edge id="1223" source="213" target="87"/> -<edge id="1224" source="213" target="91"/> -<edge id="1225" source="213" target="130"/> -<edge id="1226" source="213" target="136"/> -<edge id="1227" source="213" target="154"/> -<edge id="1228" source="214" target="50"/> -<edge id="1229" source="215" target="20"/> -<edge id="1230" source="215" target="50"/> -<edge id="1231" source="215" target="150"/> -<edge id="1232" source="216" target="173"/> -<edge id="1233" source="216" target="192"/> -<edge id="1234" source="216" target="200"/> -<edge id="1235" source="217" target="41"/> -<edge id="1236" source="217" target="50"/> -<edge id="1237" source="217" target="130"/> -<edge id="1238" source="217" target="145"/> -<edge id="1239" source="218" target="25"/> -<edge id="1240" source="218" target="59"/> -<edge id="1241" source="218" target="70"/> -<edge id="1242" source="218" target="80"/> -<edge id="1243" source="218" target="136"/> -<edge id="1244" source="218" target="154"/> -<edge id="1245" source="218" target="192"/> -<edge id="1246" source="219" target="34"/> -<edge id="1247" source="219" target="41"/> -<edge id="1248" source="219" target="50"/> -<edge id="1249" source="219" target="70"/> -<edge id="1250" source="219" target="130"/> -<edge id="1251" source="219" target="136"/> -<edge id="1252" source="219" target="154"/> -<edge id="1253" source="220" target="50"/> -<edge id="1254" source="221" target="31"/> -<edge id="1255" source="221" target="32"/> -<edge id="1256" source="221" target="41"/> -<edge id="1257" source="221" target="50"/> -<edge id="1258" source="222" target="200"/> -<edge id="1259" source="223" target="4"/> -<edge id="1260" source="223" target="37"/> -<edge id="1261" source="223" target="45"/> -<edge id="1262" source="223" target="50"/> -<edge id="1263" source="223" target="70"/> -<edge id="1264" source="223" target="74"/> -<edge id="1265" source="223" target="80"/> -<edge id="1266" source="223" target="84"/> -<edge id="1267" source="223" target="130"/> -<edge id="1268" source="223" target="136"/> -<edge id="1269" source="223" target="192"/> -<edge id="1270" source="224" target="93"/> -<edge id="1271" source="224" target="136"/> -<edge id="1272" source="225" target="136"/> -<edge id="1273" source="225" target="170"/> -<edge id="1274" source="226" target="50"/> -<edge id="1275" source="226" target="105"/> -<edge id="1276" source="226" target="136"/> -<edge id="1277" source="227" target="36"/> -<edge id="1278" source="227" target="50"/> -<edge id="1279" source="228" target="50"/> -<edge id="1280" source="228" target="130"/> -<edge id="1281" source="228" target="219"/> -<edge id="1282" source="229" target="41"/> -<edge id="1283" source="229" target="50"/> -<edge id="1284" source="229" target="70"/> -<edge id="1285" source="229" target="77"/> -<edge id="1286" source="229" target="130"/> -<edge id="1287" source="229" target="136"/> -<edge id="1288" source="229" target="154"/> -<edge id="1289" source="229" target="176"/> -<edge id="1290" source="230" target="80"/> -<edge id="1291" source="231" target="80"/> -<edge id="1292" source="232" target="200"/> -<edge id="1293" source="233" target="35"/> -<edge id="1294" source="233" target="136"/> -<edge id="1295" source="234" target="50"/> -<edge id="1296" source="234" target="164"/> -</edges> -</graph> -</gexf> diff --git a/gephi-desktop/static/datasets/airlines.gexf.zip b/gephi-desktop/static/datasets/airlines.gexf.zip deleted file mode 100644 index faef047..0000000 Binary files a/gephi-desktop/static/datasets/airlines.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/airlines.graphml.zip b/gephi-desktop/static/datasets/airlines.graphml.zip deleted file mode 100644 index bc30fdf..0000000 Binary files a/gephi-desktop/static/datasets/airlines.graphml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/celegans.gexf.zip b/gephi-desktop/static/datasets/celegans.gexf.zip deleted file mode 100644 index d15c82f..0000000 Binary files a/gephi-desktop/static/datasets/celegans.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/codeminer.gexf.zip b/gephi-desktop/static/datasets/codeminer.gexf.zip deleted file mode 100644 index 9b07318..0000000 Binary files a/gephi-desktop/static/datasets/codeminer.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/comic-hero-network.gdf.zip b/gephi-desktop/static/datasets/comic-hero-network.gdf.zip deleted file mode 100644 index d911221..0000000 Binary files a/gephi-desktop/static/datasets/comic-hero-network.gdf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/cpan-authors.gexf.zip b/gephi-desktop/static/datasets/cpan-authors.gexf.zip deleted file mode 100644 index 128866a..0000000 Binary files a/gephi-desktop/static/datasets/cpan-authors.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/cpan-distributions.gexf.zip b/gephi-desktop/static/datasets/cpan-distributions.gexf.zip deleted file mode 100644 index 92c064d..0000000 Binary files a/gephi-desktop/static/datasets/cpan-distributions.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/diseasome.gexf.zip b/gephi-desktop/static/datasets/diseasome.gexf.zip deleted file mode 100644 index 0e0ad7a..0000000 Binary files a/gephi-desktop/static/datasets/diseasome.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/eurosis.gexf.zip b/gephi-desktop/static/datasets/eurosis.gexf.zip deleted file mode 100644 index afb9000..0000000 Binary files a/gephi-desktop/static/datasets/eurosis.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/french-ipr.gexf.zip b/gephi-desktop/static/datasets/french-ipr.gexf.zip deleted file mode 100644 index fba796c..0000000 Binary files a/gephi-desktop/static/datasets/french-ipr.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/hero-social-network.gephi b/gephi-desktop/static/datasets/hero-social-network.gephi deleted file mode 100644 index f903140..0000000 Binary files a/gephi-desktop/static/datasets/hero-social-network.gephi and /dev/null differ diff --git a/gephi-desktop/static/datasets/hex.dot.zip b/gephi-desktop/static/datasets/hex.dot.zip deleted file mode 100644 index 38ba81c..0000000 Binary files a/gephi-desktop/static/datasets/hex.dot.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/ht2009_15min.gexf.gz b/gephi-desktop/static/datasets/ht2009_15min.gexf.gz deleted file mode 100644 index e78940d..0000000 Binary files a/gephi-desktop/static/datasets/ht2009_15min.gexf.gz and /dev/null differ diff --git a/gephi-desktop/static/datasets/internet_routers-22july06.gml.zip b/gephi-desktop/static/datasets/internet_routers-22july06.gml.zip deleted file mode 100644 index eaac808..0000000 Binary files a/gephi-desktop/static/datasets/internet_routers-22july06.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/java.net.zip b/gephi-desktop/static/datasets/java.net.zip deleted file mode 100644 index dcc2a0f..0000000 Binary files a/gephi-desktop/static/datasets/java.net.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/jazz.net.zip b/gephi-desktop/static/datasets/jazz.net.zip deleted file mode 100644 index d9c4f10..0000000 Binary files a/gephi-desktop/static/datasets/jazz.net.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/karate.gml.zip b/gephi-desktop/static/datasets/karate.gml.zip deleted file mode 100644 index e511fd2..0000000 Binary files a/gephi-desktop/static/datasets/karate.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/lesmiserables.gml.zip b/gephi-desktop/static/datasets/lesmiserables.gml.zip deleted file mode 100644 index 305cefc..0000000 Binary files a/gephi-desktop/static/datasets/lesmiserables.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/netscience.gml.zip b/gephi-desktop/static/datasets/netscience.gml.zip deleted file mode 100644 index 5785ca4..0000000 Binary files a/gephi-desktop/static/datasets/netscience.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/photoviz-dynamic.gexf.zip b/gephi-desktop/static/datasets/photoviz-dynamic.gexf.zip deleted file mode 100644 index 9d06574..0000000 Binary files a/gephi-desktop/static/datasets/photoviz-dynamic.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/polblogs.gml.zip b/gephi-desktop/static/datasets/polblogs.gml.zip deleted file mode 100644 index e635b0c..0000000 Binary files a/gephi-desktop/static/datasets/polblogs.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/power.gml.zip b/gephi-desktop/static/datasets/power.gml.zip deleted file mode 100644 index 16b18ab..0000000 Binary files a/gephi-desktop/static/datasets/power.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/twitter-jan25-stream.gexf.zip b/gephi-desktop/static/datasets/twitter-jan25-stream.gexf.zip deleted file mode 100644 index 22463ae..0000000 Binary files a/gephi-desktop/static/datasets/twitter-jan25-stream.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/us-air97.net.zip b/gephi-desktop/static/datasets/us-air97.net.zip deleted file mode 100644 index 8affb3a..0000000 Binary files a/gephi-desktop/static/datasets/us-air97.net.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/word_adjacencies.gml.zip b/gephi-desktop/static/datasets/word_adjacencies.gml.zip deleted file mode 100644 index b374efc..0000000 Binary files a/gephi-desktop/static/datasets/word_adjacencies.gml.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/wordnet3.net.zip b/gephi-desktop/static/datasets/wordnet3.net.zip deleted file mode 100644 index 960c4bf..0000000 Binary files a/gephi-desktop/static/datasets/wordnet3.net.zip and /dev/null differ diff --git a/gephi-desktop/static/datasets/yeast.gexf.zip b/gephi-desktop/static/datasets/yeast.gexf.zip deleted file mode 100644 index d9f34a5..0000000 Binary files a/gephi-desktop/static/datasets/yeast.gexf.zip and /dev/null differ diff --git a/gephi-desktop/static/docs/User_Manual/Localization/Gephi_Localization.png b/gephi-desktop/static/docs/User_Manual/Localization/Gephi_Localization.png deleted file mode 100644 index 55e45b9..0000000 Binary files a/gephi-desktop/static/docs/User_Manual/Localization/Gephi_Localization.png and /dev/null differ diff --git a/gephi-desktop/static/docs/User_Manual/Troubleshooting/Memory_Modal_Manual_Config.png b/gephi-desktop/static/docs/User_Manual/Troubleshooting/Memory_Modal_Manual_Config.png deleted file mode 100644 index 544df22..0000000 Binary files a/gephi-desktop/static/docs/User_Manual/Troubleshooting/Memory_Modal_Manual_Config.png and /dev/null differ diff --git a/gephi-desktop/static/img/logo.svg b/gephi-desktop/static/img/logo.svg deleted file mode 100644 index 1797bcf..0000000 --- a/gephi-desktop/static/img/logo.svg +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg id="Logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 216 216"> - <defs> - <style> - .cls-1 { - fill: url(#linear-gradient); - } - </style> - <linearGradient id="linear-gradient" x1="80.18" y1="85.83" x2="164.3" y2="137.87" gradientUnits="userSpaceOnUse"> - <stop offset="0" stop-color="#fff"/> - <stop offset="1" stop-color="#9ca6a4"/> - </linearGradient> - </defs> - <path d="M82.51,45h54,0c3.22.02,4.84,1.29,7.68,2.93h0c2.84,1.64,4.75,2.41,6.38,5.18h0s27,46.77,27,46.77h0c1.59,2.8,1.3,4.84,1.3,8.12h0c0,3.28.29,5.32-1.3,8.12h0s-27,46.77-27,46.77h0c-1.63,2.78-3.54,3.54-6.38,5.18h0c-2.84,1.64-4.46,2.91-7.68,2.93h0s-54,0-54,0h0c-3.22-.02-4.84-1.29-7.68-2.93h0c-2.84-1.64-4.75-2.41-6.38-5.18h0s-27-46.77-27-46.77h0c-1.59-2.8-1.3-4.84-1.3-8.12h0c0-3.28-.29-5.32,1.3-8.12h0s27-46.77,27-46.77h0c1.63-2.78,3.54-3.54,6.38-5.18h0c2.84-1.64,4.46-2.91,7.68-2.93h0Z"/> - <path class="cls-1" d="M151.48,109.53c-.27-1.23-.69-2.37-1.25-3.41-.56-1.04-1.29-2-2.19-2.88-.9-.88-1.76-1.48-2.6-1.81-.83-.33-1.77-.5-2.82-.5-.92,0-1.85.16-2.79.47-.94.31-1.87.86-2.79,1.63-.92.77-1.73,1.81-2.44,3.1-.83,1.5-1.36,2.98-1.56,4.45l-2.88,19.95c-1.58-.33-2.73-.77-3.44-1.31-1-.79-1.8-1.92-2.41-3.38-.6-1.46-.91-3.27-.91-5.44,0-1.33.13-2.82.41-4.47.27-1.65.66-3.22,1.16-4.72,1.21-3.38,3.11-5.9,5.69-7.57.71-.37,1.44-.75,2.19-1.13l.19-1.13c-1,0-2.05.14-3.16.41-1.11.27-2.18.7-3.22,1.28-.22.13-.44.26-.65.39-.95.17-2.67,1.41-5.18,3.77l-.21.19c-3.91,3.58-7.01,6.14-9.35,7.66-2.32,1.54-4.39,2.36-6.22,2.46-1.68.09-3.17-.32-4.46-1.25-1.29-.93-2.25-2.26-2.86-4-.26-.75-.43-1.52-.51-2.32-.07-.8-.05-1.68.07-2.62,3.21-1.96,6.25-4.31,9.13-7.03,2.92-2.7,5.76-5.82,8.54-9.37-.15,1.03-.2,1.91-.15,2.65.05.74.17,1.44.38,2.1.5,1.59,1.4,2.83,2.72,3.72,1.31.89,2.85,1.3,4.63,1.25,3.71-.11,7.35-2.29,10.98-6.51,3.73-4.16,5.76-8.8,6.06-13.96,1.39.64,2.44,1.33,3.13,2.07.69.74,1.19,1.72,1.49,2.92.47,1.86.27,3.72-.59,5.6-.84,1.89-2.32,3.74-4.41,5.55-.34.33-.81.73-1.42,1.21-.89.67-1.29,1.16-1.2,1.48.02.09.11.18.26.28.15.1.28.15.4.14.27,0,.87-.31,1.79-.9.92-.59,1.84-1.32,2.74-2.18,1.8-1.69,3.06-3.49,3.78-5.41.73-1.92.85-3.87.35-5.87-.4-1.6-1.13-2.93-2.2-4-1.08-1.07-2.49-1.87-4.24-2.4-.06-.23-.11-.5-.16-.82-.05-.32-.09-.52-.11-.6-.61-2.38-1.89-4.2-3.83-5.45-1.95-1.25-4.52-1.91-7.69-1.97-4.69-.08-9.78,1.38-15.18,4.45-5.32,3.12-10,7.44-14.02,12.98-2.3,3.38-3.9,6.73-4.82,10.04-.89,3.33-1.1,6.57-.64,9.71-.97.32-1.86.56-2.66.72-.8.16-1.59.25-2.36.28-2.82.11-5.46-.72-7.92-2.5-2.47-1.79-4.28-4.17-5.42-7.13-1.7-4.43-1.1-8.86,1.87-13.23,3.06-4.32,7.82-7.34,14.25-9.09-.07-.03-.16-.05-.25-.05-1.75-.26-2.99-.4-3.72-.4-2.68-.02-5.27.57-7.74,1.8-2.46,1.24-4.48,2.96-6.04,5.18-1.43,2.1-2.27,4.42-2.51,6.95-.23,2.54.15,5.08,1.13,7.6,1.47,3.78,3.8,6.83,7,9.15,3.17,2.3,6.52,3.37,10.08,3.23.77-.03,1.53-.11,2.28-.24.75-.12,1.54-.3,2.36-.52.08.22.14.48.2.8.03.1.06.16.07.19l.34.94c.95,2.65,2.47,4.75,4.54,6.27,2.06,1.52,4.32,2.21,6.78,2.07,2-.11,4.14-.83,6.43-2.14,2.2-1.23,4.45-2.95,6.76-5.14-.68,1.5-1.14,3.07-1.36,4.72-2.37,6.51-4.86,11.51-7.54,14.95-3.24,4.34-7.28,6.75-12.18,7.19-4.1.37-7.94-.54-11.56-2.75-3.65-2.22-6.21-5.2-7.68-8.91-1.23-3.09-1.24-5.82-.01-8.18,1.24-2.34,3.32-3.57,6.22-3.71,1.93-.09,3.66.32,5.18,1.24,1.51.92,2.57,2.21,3.18,3.87.8,2.17.53,4.3-.78,6.41-1.29,2.12-3.35,3.66-6.17,4.63.65.18,1.28.31,1.89.38.61.07,1.18.08,1.71.04,2.62-.2,4.55-1.38,5.81-3.52,1.27-2.13,1.44-4.51.49-7.14-.81-2.22-2.34-4.03-4.61-5.44-2.28-1.41-4.7-2.06-7.26-1.94-3.47.16-5.91,1.51-7.3,4.07-1.37,2.58-1.33,5.68.12,9.3,1.75,4.4,4.73,7.84,8.89,10.32,4.12,2.45,8.66,3.44,13.65,2.98,3.91-.36,7.42-1.57,10.53-3.61,3.14-2.02,5.57-4.61,7.29-7.78.44-.81.87-1.81,1.31-2.98.92,2,2.33,3.58,4.23,4.74,1.42.88,3.82,1.65,7.19,2.31l-2.37,13.19h3.93s2.38-13.25,2.38-13.25c2.17,0,4.59-.71,7.26-2.13,2.04-1.08,3.73-2.28,5.07-3.6,1.34-1.31,2.51-2.92,3.54-4.82,1.02-1.9,1.7-3.83,2.03-5.79.12-.75.21-1.31.25-1.69.04-.38.06-.92.06-1.63,0-1.25-.14-2.49-.41-3.72ZM132.38,92.81c-3.43,4.12-6.92,6.25-10.55,6.34-1.09.03-2.11-.32-3.07-1.05-.96-.73-1.61-1.63-1.94-2.71-.55-1.77-.49-3.58.18-5.44.68-1.85,1.95-3.64,3.81-5.37,2.04-1.93,4.17-3.35,6.38-4.29,2.22-.93,4.53-1.38,6.91-1.37.6,0,1.2.05,1.79.14.59.09,1.21.22,1.86.4-.05,4.84-1.85,9.29-5.37,13.35ZM100.4,94.93c1.31-3.04,3.01-5.97,5.11-8.79,3.78-5.05,7.65-8.83,11.55-11.36,3.95-2.5,7.69-3.71,11.18-3.65,2.45.04,4.47.58,6.06,1.61,1.58,1.03,2.62,2.48,3.11,4.35l.29,1.12c-1.2-.21-2.08-.35-2.64-.43-.56-.08-1.06-.12-1.51-.12-5.79-.04-12.31,3.74-19.33,11.49-1.41,1.64-2.48,2.88-3.2,3.71-2.35,2.75-4.66,5.14-6.93,7.17-2.25,2.04-4.41,3.68-6.5,4.91.59-3.61,1.53-6.95,2.81-10.01ZM145.89,118.75c-.25,1.38-.48,2.25-.69,2.63-.67,1.63-1.32,2.9-1.95,3.82-.29.42-.86,1.04-1.7,1.88-1.42,1.46-3.02,2.48-4.77,3.07-.04,0-.96.19-2.76.56l2.33-17.13c.12-1.13.41-2.38.85-3.76.44-1.38.91-2.38,1.41-3.01.33-.38.71-.67,1.13-.88.42-.21.9-.31,1.44-.31.38,0,.84.13,1.38.38.54.25,1.14.82,1.79,1.72.65.9,1.1,1.78,1.35,2.66.25.88.41,1.55.47,2.03.06.48.09,1.26.09,2.35,0,1.29-.13,2.63-.38,4.01Z"/> -</svg> \ No newline at end of file diff --git a/gephi-desktop/tsconfig.json b/gephi-desktop/tsconfig.json deleted file mode 100644 index d024479..0000000 --- a/gephi-desktop/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["@tsconfig/docusaurus/tsconfig.json"], - "compilerOptions": { - "baseUrl": "." - } -} \ No newline at end of file diff --git a/gephi-lite/docs/contribute.md b/gephi-lite/docs/contribute.md deleted file mode 100644 index 982ad03..0000000 --- a/gephi-lite/docs/contribute.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: How to contribute? ---- - -We welcome contributors to enhance this documentation. - -Contributing to the documentation requires to write markdown documents and posting them on [this github repository](https://github.com/gephi/gephi-documentation). - -To fix/edit existing page you can use the `edit this page` button which appears on all pages footers. - -To propose new pages, feel free to open a Github Pull Request. - -If you're interested but need help please contact us on the [Gephi community matrix chatroom](https://matrix.to/#/!XKyOZNGdXvoRWJbPCL:matrix.org). Actually before any consistent contribution (such as creating new pages), it would be better to get in touch with the Gephi Lite beforehand. - -Thank you in advance for your help! diff --git a/gephi-lite/docs/index.md b/gephi-lite/docs/index.md deleted file mode 100644 index 3ffbb29..0000000 --- a/gephi-lite/docs/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Gephi Lite Documentation -sidebar_position: 1 ---- - -This documentation has been written by the Gephi Lite developer team to help users gain better knowledge about Gephi Lite features. - -For beginners we recommend starting by: - -- the official [Gephi Lite quickstart tutorial](https://gephi.org/quickstart/#gephi-lite) -- [Dr. Verónica Espinoza tutorial](https://medium.com/@vespinozag/learn-how-to-make-a-network-in-gephi-lite-and-add-images-to-the-nodes-i-give-you-the-gexf-file-76635f3aab53) - -You can browse tow different sections: - -- [User manual](./user-manual/): description of the main features -- [Integration](./integration/): more advanced section on integrating Gephi Lite in existing web application - -We hope this documentation will help! -_(despite its limitations)_ - -It is unfortunately not exhaustive. -_We tried to focus on the more advanced and less obvious features._ - -It is only available in english. -_We can not support internalization for now._ diff --git a/gephi-lite/docs/integration/_category_.json b/gephi-lite/docs/integration/_category_.json deleted file mode 100644 index ae2d961..0000000 --- a/gephi-lite/docs/integration/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "Integrating Gephi Lite", - "position": 3 -} diff --git a/gephi-lite/docs/integration/deploying.md b/gephi-lite/docs/integration/deploying.md deleted file mode 100644 index 076bde9..0000000 --- a/gephi-lite/docs/integration/deploying.md +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Deploying Gephi Lite -sidebar_position: 2 ---- - -You can easily deploy **Gephi Lite** in your environment. -This guide explains several ways to do it. - -## Using Docker - -We provide an official Docker image of Gephi Lite: [Docker Hub - ouestware/gephi-lite](https://hub.docker.com/r/ouestware/gephi-lite) - -The image contains a built version of Gephi Lite, served by [Nginx](https://nginx.org/) on port `80`. - -To use it, open your terminal and run the following commands: - -```sh -docker pull ouestware/gephi-lite:latest -docker run --name gephi-lite -d -p 80:80 ouestware/gephi-lite:latest -``` - -Then open [http://localhost](http://localhost) in your browser. - -## Using Docker Compose (local development) - -The Gephi Lite repository also provides a `docker-compose.yml` file. It runs Gephi Lite directly from the sources, in -development mode, without installing Node.js on your computer. It is designed for **local development**, not for -production. - -From a clone of the repository (see below), run: - -```sh -docker compose up -``` - -Then open [http://localhost:5173/gephi-lite/](http://localhost:5173/gephi-lite/) in your browser. Run -`docker compose down` to stop it. - -:::info -The sources folder is mounted with the `:z` option, so this also works on SELinux systems (Fedora, etc.). -::: - -## Build from Source - -Gephi Lite is a [React](https://react.dev/) application. To build it, you need [Node.js](https://nodejs.org/en/download) -(version 24, with npm) and [Git](https://git-scm.com/downloads) installed on your computer. - -1. Clone the repository: - -```sh -git clone https://github.com/gephi/gephi-lite.git -cd gephi-lite -``` - -2. Install dependencies: - -```sh -npm install -``` - -3. Build the project: - -```sh -export BASE_URL=/ && npm run build -``` - -:::info -By default, the build process creates a website that must be served under the `/gephi-lite` path (e.g. -[http://localhost/gephi-lite/](http://localhost/gephi-lite/)). - -In the example above, we set the environment variable `BASE_URL` to `/` so the application can be served at the root of -the domain. You can adjust it to any path you prefer. -::: - -Other environment variables can be set at build time: - -- `VITE_GITHUB_PROXY`: URL of the GitHub proxy used for the [GitHub integration](../user-manual/github-auth.md) - (default: `/_github`, see the Nginx example below) -- `VITE_CHECK_LATEST_VERSION`: set it to `true` to show a message on the welcome modal when a newer Gephi Lite version - is available (default: `false`) -- `VITE_VERSION_URL`: URL of the JSON file listing Gephi Lite versions, used by the previous option (default: - `https://lite.gephi.org/versions.json`) - -4. The static files of the Gephi Lite application are built in the folder: - -``` -./packages/gephi-lite/build/ -``` - -You can copy these files to any location, for example `/var/www/html/gephi-lite` or start a web server in this directory: - -With python - -```bash -python -m http.server -Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... -``` - -With NPM - -```bash -npx http-serve -Starting up http-serve for ./ -Available on: - http://127.0.0.1:8081 -``` - -5. Configure your web server (Apache, Nginx, etc.) to serve this folder. - Here’s an **Nginx example**: - -```nginx -server { - listen 80 default_server; - listen [::]:80 default_server; - server_name _; - - # Replace this location with the one where you placed the Gephi Lite files - root /var/www/html/gephi-lite; - - # Required for React applications - location / { - try_files $uri $uri/ =404; - } - - # For GitHub authentication to work - # We need to create a GitHub proxy to `https://github.com/login` that accepts CORS - location /_github/login { - add_header Access-Control-Allow-Origin "*"; - add_header Access-Control-Allow-Methods "GET, POST, OPTIONS"; - add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, user-agent"; - - if ($request_method = OPTIONS) { - return 204; - } - - proxy_pass https://github.com/login; - } -} -``` - -## External resources - -Gephi Lite runs fully in the browser, but some features load resources from other servers: - -- The [map background](../user-manual/map.md) loads its tiles from - [MapLibre demo tiles](https://demotiles.maplibre.org/) by default. Users can point the - [map style](../user-manual/map.md#map-style) to other tiles, for instance ones hosted on your own servers. -- The [GitHub integration](../user-manual/github-auth.md) needs the GitHub proxy described above. -- The new version message calls `VITE_VERSION_URL`, if `VITE_CHECK_LATEST_VERSION` is `true`. diff --git a/gephi-lite/docs/integration/embed.md b/gephi-lite/docs/integration/embed.md deleted file mode 100644 index 8b9c536..0000000 --- a/gephi-lite/docs/integration/embed.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Embed using graph URL -sidebar_position: 3 ---- - -The easiest way to integrate Gephi Lite in an existing web page is to embed it in a iframe. Moreover you can set the iframe to show one graph of your choice as long as you host it in a CORS enabled server. See the [Share Graph as URL documentation](../user-manual/share-graph-as-url.md) to learn more about Graph URL. - -Setting up a Gephi Lite iframe is as simple as adding the right URL in a iframe tag: - -```html -<iframe - width="100%" - height="600px" - allowfullscreen="true" - src="https://lite.gephi.org/?file=https://gist.githubusercontent.com/jacomyal/08b9cdd4c629f64c299eaa8b922bc37b/raw/a85f7bb53a6f6bb17cf3f5c0991142708f120146/arctic-shaded.json" -/> -``` - -This code rendered as: - -<iframe width="100%" height="600px" allowfullscreen="true" src="https://lite.gephi.org/?file=https://gist.githubusercontent.com/jacomyal/08b9cdd4c629f64c299eaa8b922bc37b/raw/a85f7bb53a6f6bb17cf3f5c0991142708f120146/arctic-shaded.json"/> - -:::info - -If you need a more complex interaction with an embed Gephi Lite than loading a graph file, you can also use the [TypeScript driver](./typescript-driver.md) with an iframe. - -::: diff --git a/gephi-lite/docs/integration/index.md b/gephi-lite/docs/integration/index.md deleted file mode 100644 index 3bcc2f9..0000000 --- a/gephi-lite/docs/integration/index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Introduction -sidebar_position: 1 ---- - -TODO: -- Gephi Lite is an open source web application, which offers some opportunities -- It can be used as a graph exploration frontend within (or at least around) existing web applications, and in various ways: - - open a graph file in Gephi Lite - - generate graph datasets on the fly and open them in Gephi Lite \ No newline at end of file diff --git a/gephi-lite/docs/integration/typescript-driver.md b/gephi-lite/docs/integration/typescript-driver.md deleted file mode 100644 index 8bd10c6..0000000 --- a/gephi-lite/docs/integration/typescript-driver.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -title: Integrate using the TypeScript driver -sidebar_position: 4 ---- - -It is possible to **control Gephi Lite** in a tab or an iframe **from another web page**. This feature uses the browser -[Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API). - -:::info -The main constraint of the `BroadcastChannel` API is that both the controlling web page and the controlled Gephi Lite -must be hosted on **the same domain**. Please read the [**Deploying Gephi Lite**](./deploying.md) documentation page to -know more on how to host Gephi Lite on your servers. -::: - -To ease communicating with Gephi Lite, you can use the -[`@gephi/gephi-lite-broadcast`](https://www.npmjs.com/package/@gephi/gephi-lite-broadcast) NPM project from your -TypeScript or JavaScript codebase. At the moment, this driver supports: - -- Read or import a [Graphology](https://github.com/graphology/graphology/) graph -- Read, set or merge the `SerializedGraphDataset` object (that fully describes the dataset) -- Read, set or merge the `AppearanceState` object (that describes everything from the **Appearance** menus in Gephi - Lite) -- Read or set the `FiltersState` object (that describes the filters) -- Read or set the selection (see [Selection](#selection)) -- Listen to events from Gephi Lite (see [Events](#events)) - -## Example - -The easiest way to dive into how to use the driver, is to look at how Gephi Lite itself uses it! Indeed, Gephi Lite -offers users to clone their current workspace in a new tab, using the `@gephi/gephi-lite-broadcast` package. This allows -duplicating a graph to compare two different appearance setups, for instance - or also "saving" a state before applying -some destructive modifications... - -So, let's see -[how Gephi Lite uses the driver](https://github.com/gephi/gephi-lite/blob/main/packages/gephi-lite/src/core/broadcast/utils.ts): - -```typescript -// This is the driver class, that allows all that: -import { GephiLiteDriver } from "@gephi/gephi-lite-broadcast"; -// These are some internal Gephi Lite typings: -import { - AppearanceState, - FiltersState, - GraphDataset, -} from "@gephi/gephi-lite-sdk"; - -export async function openInNewTab({ - dataset, - appearance, - filters, -}: { - dataset: GraphDataset; - appearance: AppearanceState; - filters: FiltersState; -}) { - // 1. Instantiate GephiLiteDriver (no name is given, so a random UUID will be - // used instead): - const driver = new GephiLiteDriver(); - - // 2. Open a new Gephi Lite in a new tab, and wait for it - await driver.openGephiLite({ baseUrl: location.pathname }); - - // 3. Set appearance and filters, then graph data, in the new Gephi Lite - // instance: - await Promise.all([driver.setAppearance(appearance), driver.setFilters(filters)]); - await driver.setGraphDataset(dataset); - - // 4. Now that everything went fine, just destroy the driver (and close the - // Broadcast Channel listener on this side): - driver.destroy(); -} -``` - -:::note -The code has been slightly redacted from its original version: - -- Some code related to the internal logic of Gephi Lite has been removed for simplicity -- Comments have been added to clarify what it does -::: - -Then, this function is called in two different parts: - -- For the `"Duplicate in a new tab"` feature -- For the [Louvain edges ambiguity representation](/user-manual/experimental#louvain-edges-ambiguity) - -## Selection - -Since version 1.1, the driver can read and set the selection in Gephi Lite. The selection is described as a -`SerializedSelectionState` object: - -```typescript -interface SerializedSelectionState { - nodeIds: string[]; - edgeIds: string[]; -} -``` - -```typescript -// Read the current selection: -const { nodeIds, edgeIds } = await driver.getSelection(); - -// Select some nodes: -await driver.setSelection({ nodeIds: ["n1", "n2"], edgeIds: [] }); - -// Clear the selection: -await driver.setSelection({ nodeIds: [], edgeIds: [] }); -``` - -:::warning -Gephi Lite can only select nodes **or** edges at a time, not both: - -- `getSelection` always returns one empty array -- If `setSelection` receives both node and edge IDs, the node IDs win and the edge IDs are ignored - -IDs that don't exist in the graph are ignored. -::: - -## Events - -The driver is an event emitter. Here are the events Gephi Lite sends: - -- `newInstance`: a Gephi Lite instance has opened on the driver's channel (`openGephiLite` uses it to know when the new - instance is ready) -- `selectionUpdate`: the selection has changed (from the user, from `setSelection`, or because selected items were - removed from the graph). The listener receives the new `SerializedSelectionState`. - -```typescript -driver.on("selectionUpdate", ({ nodeIds, edgeIds }) => { - console.log("Selected nodes:", nodeIds); - console.log("Selected edges:", edgeIds); -}); -``` - -:::info -`selectionUpdate` is only sent when the selection actually changes. So, calling `setSelection` with the current -selection (to echo back a selection you just received, for instance) sends no event, and does not create a loop. -::: - -## How it works under the hood - -:::info -This section is quite advanced, and is not necessary to use the driver. It's mostly here so that future maintainers can -get more insights on what's going on in the codebase. -::: - -### The `BroadcastChannel` API - -So, basically, the `BroadcastChannel` allows for browser pages to broadcast messages on a "channel" (each channel being -identified with a given string), that every other browser contexts opened in the same browser and on the same domain at -the time can receive. - -### What Gephi Lite does - -When Gephi Lite starts, it checks if it has a `broadcast` query param (the channel name). If it has, it opens a -`BroadcastChannel` on that channel name, and listens to all messages. It will react to -[`GephiLiteMethodBroadcastMessage`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L181-L195) -messages, that basically contain: - -- a method name -- arguments for that method -- an optional identifier (that will be used for responses) - -When Gephi Lite receives such a message, it will execute the asked method, and, if an identifier is given, will -broadcast the return of the method on the channel, in a -[`ReplyMessage`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L86-L89). - -Gephi Lite also broadcasts [events](#events) on the channel, as -[`EventBroadcastMessage`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L102-L109) -messages, containing the event name and its data. The driver re-emits them, so that you can listen to them with -`driver.on(...)`. - -### What the driver does - -The [`@gephi/gephi-lite-broadcast`](https://www.npmjs.com/package/@gephi/gephi-lite-broadcast) package is mostly some -sugar to avoid having to write the messages by hand. Also, it waits for a reply from the related Gephi Lite instance -before resolving some promise, which helps to know whether things went well, basically. - -So, when some method from the driver is called, for instance `const graph = await driver.getGraph();`, here is what -happens: - -1. The driver calls - [its internal method](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/driver.ts#L120-L122): - `this.callMethod<GetGraphMethod>("getGraph")` and returns a new result promise -2. It creates a unique `messageID` and emits a - [`MethodBroadcastMessage`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L91-L97), - using `this.channel.postMessage({ ... })` -3. It then waits for a - [`MethodReplyMessage`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L98-L100) - message from the Gephi Lite instance -4. If the reply comes, it resolves the result promise with the reply's payload -5. If it doesn't (after some `timeout`), it rejects the result promise with a timeout error - -### Implementing a new method for the driver - -There are still some missing methods from the Gephi Lite driver, unfortunately. Here is a quick guide (mostly for -maintainers) on how to implement a new method: - -1. A new "Method type", extending - [`BaseMethod`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L63-L67) - must be added in - [`broadcast/src/types.ts`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L146-L163), - and added to the - [`GephiLiteMethod`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L165) and - [`GephiLiteMethodBroadcastMessage`](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/types.ts#L181) - union types. This will determine the arguments and response types of the new method. -2. A new "shortcut method" must be added directly to the - [`GephiLiteDriver` class](https://github.com/gephi/gephi-lite/blob/main/packages/broadcast/src/driver.ts#L106-L156). - This will help TypeScript users discover this new method. It also can deal with serializing/deserializing - inputs/outputs. -3. Finally, the actual code that tells Gephi Lite how it should handle these events must be added in the - [`BROADCAST_METHODS` collection](https://github.com/gephi/gephi-lite/blob/main/packages/gephi-lite/src/core/broadcast/client.ts#L36-L41), - under the `BaseMethod`'s name. Hopefully, at this point, the typings will ensure the inputs and outputs are properly - handled. - -Et voilà! That's all it takes to implement a new Gephi Lite driver method. diff --git a/gephi-lite/docs/user-manual/_category_.json b/gephi-lite/docs/user-manual/_category_.json deleted file mode 100644 index ac39b08..0000000 --- a/gephi-lite/docs/user-manual/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "label": "User Manual", - "position": 2 -} diff --git a/gephi-lite/docs/user-manual/assets/dates-filtering.webm b/gephi-lite/docs/user-manual/assets/dates-filtering.webm deleted file mode 100644 index d6b82b9..0000000 Binary files a/gephi-lite/docs/user-manual/assets/dates-filtering.webm and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/file-open-old-version.png b/gephi-lite/docs/user-manual/assets/file-open-old-version.png deleted file mode 100644 index 04a2d33..0000000 Binary files a/gephi-lite/docs/user-manual/assets/file-open-old-version.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/gist_make_public.png b/gephi-lite/docs/user-manual/assets/gist_make_public.png deleted file mode 100644 index e945c17..0000000 Binary files a/gephi-lite/docs/user-manual/assets/gist_make_public.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-code.png b/gephi-lite/docs/user-manual/assets/github-code.png deleted file mode 100644 index 3ff6b49..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-code.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-done.png b/gephi-lite/docs/user-manual/assets/github-done.png deleted file mode 100644 index b4ad574..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-done.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-login.png b/gephi-lite/docs/user-manual/assets/github-login.png deleted file mode 100644 index befff1b..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-login.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-modal.png b/gephi-lite/docs/user-manual/assets/github-modal.png deleted file mode 100644 index d32b0e2..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-modal.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-open-gist.png b/gephi-lite/docs/user-manual/assets/github-open-gist.png deleted file mode 100644 index 483001d..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-open-gist.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-save.png b/gephi-lite/docs/user-manual/assets/github-save.png deleted file mode 100644 index 9a5e30c..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-save.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-save_as.png b/gephi-lite/docs/user-manual/assets/github-save_as.png deleted file mode 100644 index 8d79916..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-save_as.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github-validation.png b/gephi-lite/docs/user-manual/assets/github-validation.png deleted file mode 100644 index 77dc7db..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github-validation.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github_raw_button.png b/gephi-lite/docs/user-manual/assets/github_raw_button.png deleted file mode 100644 index 9a81cfd..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github_raw_button.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/github_raw_url.png b/gephi-lite/docs/user-manual/assets/github_raw_url.png deleted file mode 100644 index 66886c8..0000000 Binary files a/gephi-lite/docs/user-manual/assets/github_raw_url.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/layout-quality.png b/gephi-lite/docs/user-manual/assets/layout-quality.png deleted file mode 100644 index 8391d80..0000000 Binary files a/gephi-lite/docs/user-manual/assets/layout-quality.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/louvain-edges-ambiguity.png b/gephi-lite/docs/user-manual/assets/louvain-edges-ambiguity.png deleted file mode 100644 index d97e234..0000000 Binary files a/gephi-lite/docs/user-manual/assets/louvain-edges-ambiguity.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/map-example.png b/gephi-lite/docs/user-manual/assets/map-example.png deleted file mode 100644 index 6c92fa8..0000000 Binary files a/gephi-lite/docs/user-manual/assets/map-example.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/map-settings.png b/gephi-lite/docs/user-manual/assets/map-settings.png deleted file mode 100644 index f10fdba..0000000 Binary files a/gephi-lite/docs/user-manual/assets/map-settings.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/map-style.png b/gephi-lite/docs/user-manual/assets/map-style.png deleted file mode 100644 index f5bb209..0000000 Binary files a/gephi-lite/docs/user-manual/assets/map-style.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/node-images.png b/gephi-lite/docs/user-manual/assets/node-images.png deleted file mode 100644 index 5fb1fb0..0000000 Binary files a/gephi-lite/docs/user-manual/assets/node-images.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/assets/script-editor.png b/gephi-lite/docs/user-manual/assets/script-editor.png deleted file mode 100644 index 56b0468..0000000 Binary files a/gephi-lite/docs/user-manual/assets/script-editor.png and /dev/null differ diff --git a/gephi-lite/docs/user-manual/custom-scripts.md b/gephi-lite/docs/user-manual/custom-scripts.md deleted file mode 100644 index 37c23f7..0000000 --- a/gephi-lite/docs/user-manual/custom-scripts.md +++ /dev/null @@ -1,174 +0,0 @@ ---- -title: Custom scripts -sidebar_position: 4 ---- - -Gephi-Lite does not have a plugin marketplace, but it includes a native scripting language: JavaScript. -In many places, this lets you write JavaScript code instead of using the standard features. - -## Nodes/Edges filtering - -From the **Filters** menu, choosing **Custom script** opens the script editor, allowing you to implement this function: - -```js -/** - * Define a custom filter function. - * The function is executed for each node. - * If it returns true, the node is included in the result set; otherwise, it is excluded. - * - * @param {string} id ID of the item - * @param {GraphNode} attributes Attributes of the item - * @param {AbstractGraph<GraphNode, GraphEdge>} graph Graphology instance (https://graphology.github.io/) - * @return {boolean} TRUE if the item should be kept in the graph, FALSE to filter it - */ -function nodeFilter(id, attributes, graph) { - // - // Your code goes here - // - return true; -} -``` - -When filtering edges, the function is named `edgeFilter`, and `attributes` holds the edge attributes (`GraphEdge`). - -### Examples - -- Keep nodes that have a property 'age' greater than `18`: - -```js -function nodeFilter(id, attributes, graph) { - return attributes.age > 18; -} -``` - -- Keep nodes that have a property 'age' below `18` and a degree below `10`: - -```js -function nodeFilter(id, attributes, graph) { - return attributes.age < 18 && graph.degree(id) < 10; -} -``` - -- Keep nodes on which the property 'job' is defined: - -```js -function nodeFilter(id, attributes, graph) { - return attributes.job !== undefined; -} -``` - -- Keep edges that have a property 'cooccurrence' greater than `5`: - -```js -function edgeFilter(id, attributes, graph) { - return attributes.cooccurrence > 5; -} -``` - -- Keep edges whose target node has a degree greater than `5`: - -```js -function edgeFilter(id, attributes, graph) { - return graph.degree(graph.target(id)) > 5; -} -``` - -## Custom layout - -In the **Layout** menu, selecting **Custom layout** opens the script editor, where you can implement this function: - -```js -/** - * Function that returns coordinates for the specified node. - * - * @param {string} id The ID of the node - * @param {GraphNode} attributes Attributes of the node - * @param {number} index The index position of the node in the graph - * @param {AbstractGraph<GraphNode, GraphEdge>} graph The graphology instance (https://graphology.github.io/) - * @returns {x: number, y: number} The computed coordinates of the node - */ -function nodeCoordinates(id, attributes, index, graph) { - // - // Your code goes here - // - return { x: Math.random() * 1000, y: Math.random() * 1000 }; -} -``` - -### Examples - -- Random layout on a 1000x1000 space (the default function): - -```js -function nodeCoordinates(id, attributes, index, graph) { - return { x: Math.random() * 1000, y: Math.random() * 1000 }; -} -``` - -- Circular layout: - -```js -function nodeCoordinates(id, attributes, index, graph) { - return { - x: Math.cos((index * (Math.PI * 2)) / graph.order) * 500, - y: Math.sin((index * (Math.PI * 2)) / graph.order) * 500, - }; -} -``` - -## Scripted node/edge attribute - -On the **Data** page, choosing **Create nodes scripted attribute** in the **Data creation** menu opens the script -editor, allowing you to implement this function: - -```js -/** - * Function that returns a new attribute value for the specified node. - * - * @param {string} id The ID of the node - * @param {GraphNode} attributes Attributes of the node - * @param {number} index The index position of the node in the graph - * @param {AbstractGraph<GraphNode, GraphEdge>} graph Graphology instance (https://graphology.github.io/) - * @returns number|string|boolean|null|undefined" The value of the new node's attribute - */ -function addNodeAttribute(id, attributes, index, graph) { - // - // Your code goes here - // - return Math.random(); -} -``` - -**Create edges scripted attribute** works the same way, with a function named `addEdgeAttribute`. - -### Examples - -- If you have an attribute named 'valid' which takes `0` or `1`, and you want to cast it into a boolean: - -```js -function addNodeAttribute(id, attributes, index, graph) { - return attributes.valid === 1; -} -``` - -- If you have attributes named 'firstname' and 'lastname', and you want to concatenate them (useful for graph labels): - -```js -function addNodeAttribute(id, attributes, index, graph) { - return (attributes.firstname || "") + " " + (attributes.lastname || ""); -} -``` - -## Script editor - -The script editor is displayed in a modal. - -![Script editor](./assets/script-editor.png) - -The editor is based on [Monaco](https://microsoft.github.io/monaco-editor/), so if you use VS Code, it should feel -familiar. Types are defined for each function parameter (such as `attributes` or `graph`), and the -[Graphology](https://graphology.github.io/) types are loaded, enabling autocompletion on the `graph` methods. - -The documentation comment at the top of the function cannot be edited. - -Press `Ctrl+Enter` to save and run your function. diff --git a/gephi-lite/docs/user-manual/differences-with-gephi.mdx b/gephi-lite/docs/user-manual/differences-with-gephi.mdx deleted file mode 100644 index 9627721..0000000 --- a/gephi-lite/docs/user-manual/differences-with-gephi.mdx +++ /dev/null @@ -1,138 +0,0 @@ ---- -title: Differences with Gephi -sidebar_position: 2 ---- - -## What makes Gephi Lite _light_? - -When the Gephi team decided to launch a new web "spinoff" of Gephi based on [various previous and existing experiences](https://archive.fosdem.org/2024/schedule/event/fosdem-2024-3253-bridging-research-and-open-source-the-genesis-of-gephi-lite/), we decided against calling it "Gephi Web", because: - -- The user interface would not be the exact same (in a good way, because web technologies are easier than the current Java Gephi stack for custom user interfaces development) -- It would not handle the same scales, not even closely (in a bad way, because this time, JavaScript as way less control on memory, CPU and GPU usage than Java) -- The features would probably not even be the exact same - -We decided to go for **Gephi Lite**, meaning: - -- It would be **lighter** in terms of features, and would target less expert users -- It would have a **lighter** user interface, with less information and noise -- It would handle **lighter** graphs - -## Dynamic graph appearance - -One core difference between Gephi and Gephi Lite is that Gephi Lite handles the graph appearance **dynamically**, rather than statically. - -The reason of this is that we wanted to have captions in Gephi Lite from day one, and for this, we need to keep track of why are nodes and edges rendered the way they are. - -### Gephi behaves like Photoshop - -In Gephi, when users colorize nodes for instance, it changes the colors the stored color value of each node in the data model, and does not try to remember why. This makes it very easy for users to do exactly what the want (like "I want this specific node to be red" or "I have a very expert use case, where nodes are not colored the same way according to their type" for instance). It's like using Photoshop: Pixels have one value, and users can modify that value _exactly_ the way they want, - -The main tradeoff is that Gephi can't "explain" why nodes and edges are rendered the way they are, so there can't be any caption. - -### Gephi Lite behaves like Excel - -In Gephi Lite, when users update nodes colors from the _Appearance_ panel, it updates the nodes coloring rules in the data model. Then, any time anything changes in the graph data, the nodes are dynamically colored, before the graph is rendered to the stage. It's like using Excel with formulas: Users can apply different way to describe what should be in a cell, and the value in it will _reactively_ be updated. - -#### **Advantages** - -This allows basically two main things: - -1. Gephi Lite has a **dynamic caption** -2. When using **dynamic attributes** (like node degrees for sizes), when they become updated (because of data updates of filters modifications), the graph appearance is **instantly impacted** - -#### **Main cost** - -Users can only modify nodes and edges appearance in a way that Gephi Lite can **explain** through its caption. - -There is a way out of this system, though: It is possible to directly use a **data column** for a given **visual variable**. That is exactly what happens by default when a GEXF from Gephi is loaded, for instance: - -- There is a node attribute, named `color`, of type "color", containing color strings, that are used to color nodes; -- There is a node attribute, named `size`, of type "number", containing positive numbers, that are used for nodes sizes; -- etc... - -## The graph algorithms are not the same - -Gephi Lite has been made possible by two JavaScript libraries written by people close to Gephi: - -- [sigma.js](https://www.sigmajs.org/), a WebGL-based graph rendering engine -- [graphology](https://graphology.github.io/), a JavaScript graph model - -Graphology has been written by [Guillaume Plique](https://yomguithereal.github.io/), partly to enable JavaScript client application and server scripts, to **analyze networks** for social sciences. To do this, he implemented [various graph algorithms](https://graphology.github.io/standard-library/), including many that are already inside Gephi. - -But some algorithms can exist in Gephi and not in graphology, and some algorithms implemented in graphology can be missing in Gephi too. That explains why the lists of available algorithms can differ between Gephi and Gephi Lite. - -## Additional features - -Since Gephi Lite is a web application, that enabled various feature opportunities, some of which are already implemented. Here are some features that Gephi Lite offer, that you cannot find in Gephi: - -### Cloud-like behavior with GitHub - -This feature allows connecting to GitHub from Gephi Lite, and save and load graphs as [GitHub Gists](https://gist.github.com/). - -:::info - -Please read the [GitHub Integration documentation](./github-auth.md) to know more. - -::: - -### Custom scripts - -This feature allows writing some JavaScript code directly from Gephi Lite's UI, to apply simple layouts, filter nodes / edges, or update / create new data. - -:::info - -Please read the [Custom scripts documentation](./custom-scripts.md) to know more. - -::: - -### Experimental features - -As Gephi Lite is built with modern web technologies, it makes it quite easy to draft and develop new features. This is a good opportunity for the Gephi team to **try new features** in Gephi Lite, that might end up as plugins or core features in Gephi later. -:::info - -Please read the [Experimental features documentation](./experimental.md) to know more. - -::: - -### Node images - -<figure> -![](./assets/node-images.png) -<figcaption>A [Spotify artists network](https://medium.com/@vespinozag/learn-how-to-make-a-network-in-gephi-lite-and-add-images-to-the-nodes-i-give-you-the-gexf-file-76635f3aab53) with artists pictures displayed on the nodes, made by [Dr. Veronica Espinoza](https://medium.com/@vespinozag)</figcaption> -</figure> - -As [sigma.js](https://www.sigmajs.org) does support [node images](https://www.sigmajs.org/storybook/?path=/story/sigma-node-image--node-images), the cost was too low not implement this in Gephi Lite. So, users can open the `Appearance > Nodes` menu, and select a URL field in the `Images` section. - -### Captions - -[As described earlier](#dynamic-graph-appearance), Gephi Lite does apply the graph appearance rules dynamically, which makes it able to generate a dynamic caption of the visual variables used to render the graph. - -## Missing features - -On the other side, some core features from Gephi are not implemented in Gephi Lite, either because we did not find a way to do it in a "lite-enough" way, or because we did not find the time yet. - -Here are the main ones: - -### "Preview" tab and SVG / PDF exports - -One of the main ends of Gephi is to **generate a proper map image of a graph**. This is implemented from a `Preview` panel, where users can determine how the nodes and edges must appear in the exported image. - -The particular part might be implemented in the future in Gephi Lite, but probably directly in the `Graph` tab. Indeed, it does not seem "light enough" to have a second very similar interface as the current `Appearance` menu. - -Also, at the moment, Gephi Lite only supports image export - and only because sigma.js offers [a way to do](https://www.sigmajs.org/storybook/?path=/story/sigma-export-image--available-options) this already. Graphology does allow [export SVG images](https://graphology.github.io/standard-library/svg.html) of graphs, but the code is not customizable enough yet to be used in Gephi Lite. It might come in the future, though. - -### Timeline - -Gephi allows animating a timeline through a dynamic graph. In a dynamic graph, nodes and edges can have a "temporal existence" (i.e. they only exist on some periods of time), and nodes and edges attributes values can vary along time. - -Gephi Lite does not support dynamic graph. The closest feature Gephi Lite does offer is the dynamic dates filtering range, on nodes / edges date attributes as below: - -import VideoDynamicDegree from "./assets/dates-filtering.webm"; - -<video preload="metadata" controls="controls" width="100%"> - <source src={VideoDynamicDegree} type='video/webm; codecs="av01.0.08M.08.0.110.01.01.01.0"' /> -</video> - -### Plugins - -One of the biggest features of Gephi is the possibility to **implement and share plugins**, to allow Gephi to do more things. As Gephi Lite is a full-client web application, we did not find any simple way to implement something similar. The best we have for now are the [custom scripts](./custom-scripts.md), and this might evolve in the future. \ No newline at end of file diff --git a/gephi-lite/docs/user-manual/experimental.md b/gephi-lite/docs/user-manual/experimental.md deleted file mode 100644 index a5b0470..0000000 --- a/gephi-lite/docs/user-manual/experimental.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Experimental features -sidebar_position: 4 ---- - -As Gephi Lite is built with modern web technologies, it makes it quite easy to draft and develop new features. This is a good opportunity for the Gephi team to **try new features** in Gephi Lite, that might end up as plugins or core features in Gephi later. Two such experimental features have been implemented already. - -## Connected-closeness - -![Layout quality evaluation in Gephi Lite](./assets/layout-quality.png) - -At [Gephi Week 2024](https://gephi.wordpress.com/2024/06/13/gephi-week-2024-peek-from-the-inside/), the team decided to try to implement a way to visualize Mathieu Jacomy's **connected-closeness** in Gephi Lite. This metric aims at evaluating how successfully a layout does bring together in the plan connected pairs of nodes, while keeping disconnected pairs distant. - -The way it's implemented in Gephi Lite is that users can toggle connected-closeness from the `Layout > Layout Quality` menu. Then, a grid of size Δmax will constantly be displayed, and the caption will show how to read it. - -You can read more about the connected-closeness: -- In the related paper, [_Connected-closeness: A Visual Quantification of Distances in Network Layouts_](https://jgaa.info/index.php/jgaa/article/view/paper626) -- In a very detailed Observable notebook, [_Highlights on connected-closeness_](https://observablehq.com/@jacomyma/highlights-on-connected-closeness) - -## Louvain edges ambiguity - -![Louvain edges ambiguity in Gephi Lite](./assets/louvain-edges-ambiguity.png) - -At [Gephi Week 2022](https://gephi.wordpress.com/2022/10/16/gephi-week-2022-debriefing/) this time, some people started to work on a way to evaluate how _ambiguous_ community detection algorithms can be. This led to a dedicated workshop in december 2024, where a team gathered to keep digging. - -This ended up in a way to evaluate how consistently the [Louvain method for community detection](https://en.wikipedia.org/wiki/Louvain_method) does put extremities of each edge in the same community or not. And various other metrics are derived from this, to map where does the _ambiguity_ lies in the graph. - -Stay tuned, hopefully more documentation might come later about this! \ No newline at end of file diff --git a/gephi-lite/docs/user-manual/file-formats.md b/gephi-lite/docs/user-manual/file-formats.md deleted file mode 100644 index a7c44ba..0000000 --- a/gephi-lite/docs/user-manual/file-formats.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: File formats -sidebar_position: 2 ---- - -## GEXF - -[GEXF](https://gexf.net/) is an XML format which has been created by the Gephi community to enhance Graph data interoperability. - -Gephi Lite supports reading and writing GEXF (version 1.2 or 1.3) files. - -It's the format of choice to exchange Graphs with [Gephi](https://gephi.org/desktop). - -:::warning - -Gephi Lite does not support those GEXF specifications: - -- [dynamics](https://gexf.net/dynamics.html) -- [hierarchy](https://gexf.net/hierarchy.html) -- [phylogeny](https://gexf.net/phylogeny.html) -- [viz:shape](https://gexf.net/viz.html) - -::: - -## GraphML - -Gephi Lite can read [GraphML](http://graphml.graphdrawing.org/) files. - -:::warning -Gephi Lite does not support writing GraphML. -::: - -:::info -Gephi Lite GEXF and GraphML support are both fueled by the [Graphology library](https://graphology.github.io/standard-library/). Enhancing GEXF or GraphML support would require enhancing Graphology modules. -::: - -## Graphology JSON - -Gephi Lite can read [Graphology](https://graphology.github.io/) graphs serialized as JSON (with -[`graph.export()`](https://graphology.github.io/serialization.html)), in a file with the `.json` extension. - -This is handy to load graphs built with Graphology scripts, in Node.js or in the browser. - -:::warning -Gephi Lite does not support writing Graphology JSON. Use the Gephi Lite workspace format instead. -::: - -## Gephi Lite workspace - -On top of the data exchange formats (GEXF and GraphML), Gephi Lite proposes its own internal workspace format. - -This file is a JSON file which represents not only the graph data but also the Gephi Lite application workspace state: - -- Appearance state: how visual attributes were set, including the background (such as the - [map style](./map.md#map-style)) -- Filter state: filters to apply on the graph -- Layout state: the last layout run with its parameters, and the layout quality settings - -To sum it up, the Gephi Lite workspace file format will save/load the application state together with the graph data. - -The current version of the format is described as the -[Gephi Lite workspace JSON schema specification](https://gephi.org/gephi-lite/gephi-lite-format.schema.json). - -### Files from other Gephi Lite versions - -Workspace files are versioned. Gephi Lite fully opens files saved with the same major and minor version only (for -instance, Gephi Lite 1.1.x opens files from 1.1.x). - -When a file comes from another version, Gephi Lite shows an error, with an **Open anyway** button. The file then opens -in a degraded mode: the graph data (nodes, edges, their attributes and positions) is imported, but the appearance, -filters and layout state are lost. - -![Error when opening a file from an older Gephi Lite version](./assets/file-open-old-version.png) - -When such a file is opened [from a URL](./share-graph-as-url.md), it is opened in degraded mode directly, with a warning -notification. - -<!-- HERE WE COULD ADD A WHICH FORMAT TO CHOSE SECTION WHERE WE SPEAK ABOUT CAPTION --> diff --git a/gephi-lite/docs/user-manual/github-auth.md b/gephi-lite/docs/user-manual/github-auth.md deleted file mode 100644 index e69a652..0000000 --- a/gephi-lite/docs/user-manual/github-auth.md +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: GitHub Integration -sidebar_position: 3 ---- - -Gephi Lite is serverless. Unless you chose to, no data will leave your computer when using Gephi Lite. It's a graph editor which can open file from your local computer or any public graph available on the internet. - -However, many people now prefer working in the cloud with their favorite applications. -That’s why we provide an optional **GitHub integration**. -If you want to use it you have to first authenticate using your GitHub account. Once onde you’ll be able to open and save graphs directly from [Github Gist](https://gist.github.com/). - -Using Github Gist allow you to save your graph on Github Cloud but also to share then publicly if you want. - -## Authentication - -:::info -Gephi Lite uses GitHub OAuth [Device Flow](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#device-flow). -::: - -1. Open the `Workspace` menu (top left of the screen) and click on the `Link to GitHub` item. - The following modal should be displayed: - - ![Gephi Lite modal for GitHub authentication](./assets/github-modal.png) - -2. Copy the displayed code and click on the `Open GitHub` button. - This opens a GitHub page in a new browser window. - - ![GitHub device activation](./assets/github-login.png) - -3. Sign in to GitHub and click `Continue`. The **Device Activation** page will appear, asking you to enter the code. - - ![GitHub code](./assets/github-code.png) - -4. Enter the code and click `Continue`. The **Authorization** page will then appear asking to confirm your acknowledgment to let Gephi-Lite create gists on your behalf. - - ![GitHub validation authorization](./assets/github-validation.png) - -5. Verify that the authorization request is from the `Gephi` organization and for the `Gephi-Lite` project. - If correct, and if you agree to allow Gephi Lite access to your Gists, click `Authorize gephi`. - - ![GitHub authorization done](./assets/github-done.png) - -6. Once authorized, you can close the window and return to Gephi Lite. - If the modal is closed, your Gephi Lite instance is now connected to GitHub. - -## Open a graph from GitHub - -1. Open the `Workspace` menu and click on the `Open from GitHub` item. - A new panel will appear on the left side. - -2. Click on `Open a file from GitHub`. A table will be displayed with a list of your Gists (most recent at the top). - - ![List of GitHub gists](./assets/github-open-gist.png) - -:::info -Gephi Lite filters gists by filename extension. Only files with `.json`, `.gexf`, or `.graphml` are listed. -::: - -3. Select a file by clicking on its row in the table, then click the `Open` button. - -## Save a graph previously opened from GitHub - -If you opened a gephi-lite graph file from GitHub, saving modifications is straightforward: - -1. Open the `Workspace` menu. -2. Click on the `Save` item. - - ![Save GitHub graph](./assets/github-save.png) - -This will update your GitHub gist with the changes, creating a new revision. - -:::info -If you opened a `.gexf` or `.graphml` file from GitHub, the `Save` option will not be available. -In that case, use **Save As** instead (see below). -::: - -## Save a graph to your GitHub profile - -If you are connected to GitHub, you can save any graph to your account: - -1. Open the `Workspace` menu. -2. Click on the `Save As` item. -3. In the modal, select `Save on GitHub As` from the left menu. - - ![Save as GitHub graph](./assets/github-save_as.png) - -4. Fill in the form and validate it. - -🎉 Congrats! Your graph is now saved in your GitHub gists. - -You can reopen in any computer as long as you authenticate to your github account. - -You can also share your Gist hosted file with someone by sharing an URL to Gephi Lite. Learn how to do that in the [Share Graph as URL documentation](./share-graph-as-url.md). Heads up, if you want to share it make sure to enable the `Create a public gist` option when saving your graph. diff --git a/gephi-lite/docs/user-manual/index.md b/gephi-lite/docs/user-manual/index.md deleted file mode 100644 index 02f4759..0000000 --- a/gephi-lite/docs/user-manual/index.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: User Manual -sidebar_position: 1 ---- - -This User Manual will cover some technicalities about Gephi Lite. - -For ressource limitation reasons, we did not cover (yet) the core features which are similar to Gephi. We focused so far on the _lite-specific_ features. - -We would be glad to cover all feature in this documentation. If you'd like to help please read the [contribute documentation](../contribute.md). diff --git a/gephi-lite/docs/user-manual/map.md b/gephi-lite/docs/user-manual/map.md deleted file mode 100644 index 9b0383d..0000000 --- a/gephi-lite/docs/user-manual/map.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Geographic layout and map background -sidebar_position: 6 ---- - -Since version 1.1, Gephi Lite can place nodes from their geographic coordinates, and display a map behind the graph. - -![Airports network placed on a world map in Gephi Lite](./assets/map-example.png) - -## Geographic layout - -The **Geographic** layout is in the `Layout` panel. It positions nodes according to their latitude and longitude. - -It needs two **number** node attributes: one for the latitude, one for the longitude. Gephi Lite tries to prefill them, -from attributes named like `lat` or `latitude`, and `lng`, `lon`, `long` or `longitude`. - -### Parameters - -![Geographic layout parameters in the Layout panel](./assets/map-settings.png) - -- **Projection**: how coordinates are projected on the plane: - - `Web Mercator` (default): the only one that allows displaying a [map background](#map-background) - - `Equirectangular` - - `Equal Earth` - - `Natural Earth 1` -- **Latitude field** and **Longitude field**: the node attributes holding the coordinates -- **Missing coordinates**: what to do with nodes that don't have valid coordinates: - - `Keep current position` (default): these nodes don't move - - `Place in grid (left of map)`: these nodes are arranged in a grid, on the left of the geolocated nodes - - `Neighbors barycenter + grid`: each of these nodes is placed at the barycenter of its geolocated neighbors. Nodes - with no geolocated neighbors go in the grid. -- **Scaling ratio**: multiplies all the resulting coordinates (default: `10`) - -:::info -The geographic layout runs once: it does not keep running like ForceAtlas2. You can still drag nodes. -::: - -## Map background - -When the last layout run is the **Geographic** layout with the **Web Mercator** projection, the map background is -automatically enabled. A map button also appears in the graph controls, at the bottom right, to toggle it on and off. - -When the map is displayed, node and edge sizes are adapted so that the graph stays readable on top of it. - -:::warning -If you run another layout, or the geographic layout with another projection, the map background is disabled, since nodes -positions don't match the map anymore. -::: - -## Map style - -The map is rendered using [MapLibre](https://maplibre.org/). Its look is described by a JSON style, following the -[MapLibre Style Spec](https://maplibre.org/maplibre-style-spec/). - -To edit it, open `Appearance > Background`, and click the `Edit` button in the **Map background** section. This opens a -JSON editor, prefilled with the current style. The style must be a valid JSON object. - -![Map style editor](./assets/map-style.png) - -Once a custom style is set, a reset button appears next to the `Edit` button, to go back to the default style. - -The map style is part of the appearance, so it is saved in -[Gephi Lite workspace files](./file-formats.md#gephi-lite-workspace). - -### Default style - -By default, Gephi Lite uses the [MapLibre demo tiles](https://demotiles.maplibre.org/). They show countries, their -borders, and their names. The colors follow Gephi Lite's light or dark theme. - -### Using other tiles - -You can point the style `sources` to any vector or raster tiles source supported by MapLibre. For instance, here is a -minimal style using [OpenStreetMap](https://www.openstreetmap.org/) raster tiles: - -```json -{ - "version": 8, - "sources": { - "osm": { - "type": "raster", - "tiles": ["https://tile.openstreetmap.org/{z}/{x}/{y}.png"], - "tileSize": 256, - "attribution": "© OpenStreetMap contributors" - } - }, - "layers": [{ "id": "osm", "type": "raster", "source": "osm" }] -} -``` - -MapLibre also supports [PMTiles](https://docs.protomaps.com/pmtiles/) archives. They are single files that can be -hosted on any static server, without a tiles server. Use the `pmtiles://` prefix in the source URL: - -```json -{ - "sources": { - "my-tiles": { - "type": "vector", - "url": "pmtiles://https://example.com/my-tiles.pmtiles" - } - } -} -``` - -If the map cannot be loaded (invalid style, unreachable tiles...), Gephi Lite shows error notifications, and the -details are logged in the browser console. diff --git a/gephi-lite/docs/user-manual/share-graph-as-url.md b/gephi-lite/docs/user-manual/share-graph-as-url.md deleted file mode 100644 index a22c07e..0000000 --- a/gephi-lite/docs/user-manual/share-graph-as-url.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Share Graphs as URL -sidebar_position: 5 ---- - -Gephi Lite can open any Gexf, GraphMl or Gephi-Lite JSON file which is hosted on the web. - -To automatically load a graph, add the query parameter `file` followed by the URL of your graph file. - -**Format:** https://lite.gephi.org/?file=URL_TO_YOUR_GRAPH - -Here’s a sample link that opens the classic _Les Misérables_ dataset: - -https://lite.gephi.org/?file=https://raw.githubusercontent.com/gephi/gephi-lite/refs/heads/main/packages/gephi-lite/public/samples/Les%20Miserables.gexf - -Click the link and you’ll see the graph load automatically. - -Your `URL_TO_YOUR_FILE` can point to any supported [file formats](./file-formats.md): - -- a GEXF file, in which case your filename must end with`.gexf` extension -- a GraphML file, in which case your filename must end with`.graphml` extension -- a Gephi Lite JSON file format, in which case your filename must end with `.json` extension - -Here are a few more examples of Gephi Lite graph urls: - -A GEXF file: [https://lite.gephi.org/?file=https%3A%2F%2Fwww.ouestware.com%2Ftalks%2FGephiLite%40FOSDEM2024%2Fgephi-lite.gexf](https://lite.gephi.org/?file=https%3A%2F%2Fwww.ouestware.com%2Ftalks%2FGephiLite%40FOSDEM2024%2Fgephi-lite.gexf) - -A GraphML file: [https://lite.gephi.org/?file=https://raw.githubusercontent.com/gephi/gephi-lite/refs/heads/main/packages/gephi-lite/public/samples/airlines.graphml -](https://lite.gephi.org/?file=https://raw.githubusercontent.com/gephi/gephi-lite/refs/heads/main/packages/gephi-lite/public/samples/airlines.graphml) - -:::warning -To use this feature you must host your graph file on a server which authorizes [Cross-origin resource sharing (CORS)](https://developer.mozilla.org/fr/docs/Web/HTTP/Guides/CORS). - -In short, this means that the server publishing your network file must either allow any domains (`Access-Control-Allow-Origin: *`) or lite.gephi.org domain (`Access-Control-Allow-Origin: lite.gephi.org`) to access the file. - -Remember to set the HTTP `Access-Control-Allow-Origin` header on your own server if you want to share graph files in Gephi Lite. -::: - -To our knowledge the only free hosting services which have an open CORS policy are provided by GitHub: - -- Github repository: any graph file in a public github repository can be loaded into Gephi Lite using the `raw` link -- Gist: graph files hosted as Github Gist are also accessible (it's what Gephi Lite uses for the [Github Integration](./github-auth) feature) - -## Find the right URL from Github repository - -In the Gephi Lite Github repository you'll find the `Les Miserables.gexf` file in the samples directory: https://github.com/gephi/gephi-lite/blob/main/packages/gephi-lite/public/samples/Les%20Miserables.gexf - -![Github screenshot of Les Miserables.gexf file](./assets/github_raw_button.png) - -On this Github page spot the `Raw` button on the top right corner of the file content panel. This button is a link to the `raw` URL of the file, i.e. an URL to the content of the file and not to the Github page showing you the file. - -This the URL you have to use to share your network with others using Gephi Lite. - -![Content of Les Miserables.gexf file hosted on Github](./assets/github_raw_url.png) - -Either use your web browser `copy link` feature (right-click on the button) or click on it and then copy the URL of the content. - -This how you can retrieve the `raw` URL from Github. For this `Les miserables.gexf` file the right link to open it directly in Gephi Lite is: - -https://lite.gpehi.org/?file=https://raw.githubusercontent.com/gephi/gephi-lite/refs/heads/main/packages/gephi-lite/public/samples/Les%20Miserables.gexf - -## Find the right URL from Github Gist - -:::info -The easiest way to use Github Gist with Gephi Lite is to use the integrated [Github integration feature](./github-auth.md). -::: - -If you want to share a Github Gist, you have to make sure that: - -1. the gist filename contains the right extension : `.gexf`, `.graphml` or `.json` -2. the Github Gist is public - -To learn how to create a public gist, see [Official Fist documentation](https://docs.github.com/en/get-started/writing-on-github/editing-and-sharing-content-with-gists/creating-gists), - -To make a private Gist public open the Gist Edit page and spot the `Make public` button on th right side of the page header: - -![a private Gist Edit page screenshot](./assets/gist_make_public.png) diff --git a/gephi-lite/docusaurus.config.ts b/gephi-lite/docusaurus.config.ts deleted file mode 100644 index 6854666..0000000 --- a/gephi-lite/docusaurus.config.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { themes } from "prism-react-renderer"; - -import type { Config } from "@docusaurus/types"; -import defaultConfig from "../docusaurus.common"; - -const config: Config = { - ...defaultConfig, - title: "Gephi Lite Documentation", - tagline: "The Open Graph Viz Platform", - url: "https://docs.gephi.org/", - baseUrl: "/lite", -}; - -config.presets = [ - [ - "classic", - { - docs: { - routeBasePath: "/", - sidebarPath: require.resolve("./sidebars.ts"), - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: "https://github.com/gephi/gephi-documentation/tree/master/gephi-lite", - }, - theme: { - customCss: [require.resolve("./../public/style.css"), require.resolve("./src/custom.css")], - }, - }, - ], -]; - -config.themeConfig.navbar = { - title: "Gephi Lite", - logo: { - alt: "Gephi Lite", - src: "img/logo.svg", - }, - items: [ - { - href: "http://docs.gephi.org/", - label: "Gephi Documentations", - position: "right", - }, - { - href: "https://gephi.org", - label: "Gephi Website", - position: "right", - }, - { - href: "https://github.com/gephi/gephi-lite", - label: "GitHub", - position: "right", - }, - ], -}; - -module.exports = config; diff --git a/gephi-lite/package.json b/gephi-lite/package.json deleted file mode 100644 index 103cea2..0000000 --- a/gephi-lite/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "@gephi-documentation/lite", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start --port 3002 --no-open", - "build": "docusaurus build --out-dir ../build/lite", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve --port 3002", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=22" - } -} diff --git a/gephi-lite/sidebars.ts b/gephi-lite/sidebars.ts deleted file mode 100644 index 00fe6c2..0000000 --- a/gephi-lite/sidebars.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; - -/** - * Creating a sidebar enables you to: - * - create an ordered group of docs - * - render a sidebar for each doc of that group - * - provide next/previous navigation - * - * The sidebars can be generated from the filesystem, or explicitly defined here. - * - * Create as many sidebars as you want. - */ - -const sidebars: SidebarsConfig = { - docs: [{ type: "autogenerated", dirName: "." }], -}; - -export default sidebars; diff --git a/gephi-lite/src/custom.css b/gephi-lite/src/custom.css deleted file mode 100644 index be61b71..0000000 --- a/gephi-lite/src/custom.css +++ /dev/null @@ -1,20 +0,0 @@ -:root { - --ifm-color-primary: #003f53; - --ifm-color-primary-dark: #00394b; - --ifm-color-primary-darker: #003647; - --ifm-color-primary-darkest: #002c3a; - --ifm-color-primary-light: #00455b; - --ifm-color-primary-lighter: #00485f; - --ifm-color-primary-lightest: #00526c; - --ifm-link-color: var(--ifm-color-primary); -} - -[data-theme='dark'] { - --ifm-color-primary: #54bfdf; - --ifm-color-primary-dark: #3ab5da; - --ifm-color-primary-darker: #2db0d8; - --ifm-color-primary-darkest: #2293b5; - --ifm-color-primary-light: #6ec9e4; - --ifm-color-primary-lighter: #7bcee6; - --ifm-color-primary-lightest: #a2dcee; -} \ No newline at end of file diff --git a/gephi-lite/static/img/logo.svg b/gephi-lite/static/img/logo.svg deleted file mode 100644 index 87fa49a..0000000 --- a/gephi-lite/static/img/logo.svg +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg id="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 216 216" width="64" height="64"> - <defs> - <style> - .cls-1 { - fill: #fff; - } - - .cls-2 { - fill: #01799e; - } - </style> - </defs> - <path class="cls-2" d="M156.89,149.94c-27.01,3.85-66.99,11.69-111.99,21.06,4.98-36.27,12.76-73.44,21.99-111.06,35.37-7.68,70.04-12.67,104.01-14.94-6.98,33.66-11.53,68.71-14.01,104.94Z"/> - <path class="cls-1" d="M148.2,109.53c-.27-1.23-.69-2.37-1.25-3.41-.56-1.04-1.29-2-2.19-2.88-.9-.88-1.76-1.48-2.6-1.81-.83-.33-1.77-.5-2.82-.5-.92,0-1.85.16-2.79.47-.94.31-1.87.86-2.79,1.63-.92.77-1.73,1.81-2.44,3.1-.83,1.5-1.36,2.98-1.56,4.45l-2.88,19.95c-1.58-.33-2.73-.77-3.44-1.31-1-.79-1.8-1.92-2.41-3.38-.6-1.46-.91-3.27-.91-5.44,0-1.33.13-2.82.41-4.47.27-1.65.66-3.22,1.16-4.72,1.21-3.38,3.11-5.9,5.69-7.57.71-.37,1.44-.75,2.19-1.13l.19-1.13c-1,0-2.05.14-3.16.41-1.11.27-2.18.7-3.22,1.28-.22.13-.44.26-.65.39-.95.17-2.67,1.41-5.18,3.77l-.21.19c-3.91,3.58-7.01,6.14-9.35,7.66-2.32,1.54-4.39,2.36-6.22,2.46-1.68.09-3.17-.32-4.46-1.25-1.29-.93-2.25-2.26-2.86-4-.26-.75-.43-1.52-.51-2.32-.07-.8-.05-1.68.07-2.62,3.21-1.96,6.25-4.31,9.13-7.03,2.92-2.7,5.76-5.82,8.54-9.37-.15,1.03-.2,1.91-.15,2.65.05.74.17,1.44.38,2.1.5,1.59,1.4,2.83,2.72,3.72,1.31.89,2.85,1.3,4.63,1.25,3.71-.11,7.35-2.29,10.98-6.51,3.73-4.16,5.76-8.8,6.06-13.96,1.39.64,2.44,1.33,3.13,2.07.69.74,1.19,1.72,1.49,2.92.47,1.86.27,3.72-.59,5.6-.84,1.89-2.32,3.74-4.41,5.55-.34.33-.81.73-1.42,1.21-.89.67-1.29,1.16-1.2,1.48.02.09.11.18.26.28.15.1.28.15.4.14.27,0,.87-.31,1.79-.9.92-.59,1.84-1.32,2.74-2.18,1.8-1.69,3.06-3.49,3.78-5.41.73-1.92.85-3.87.35-5.87-.4-1.6-1.13-2.93-2.2-4-1.08-1.07-2.49-1.87-4.24-2.4-.06-.23-.11-.5-.16-.82-.05-.32-.09-.52-.11-.6-.61-2.38-1.89-4.2-3.83-5.45-1.95-1.25-4.52-1.91-7.69-1.97-4.69-.08-9.78,1.38-15.18,4.45-5.32,3.12-10,7.44-14.02,12.98-2.3,3.38-3.9,6.73-4.82,10.04-.89,3.33-1.1,6.57-.64,9.71-.97.32-1.86.56-2.66.72-.8.16-1.59.25-2.36.28-2.82.11-5.46-.72-7.92-2.5-2.47-1.79-4.28-4.17-5.42-7.13-1.7-4.43-1.1-8.86,1.87-13.23,3.06-4.32,7.82-7.34,14.25-9.09-.07-.03-.16-.05-.25-.05-1.75-.26-2.99-.4-3.72-.4-2.68-.02-5.27.57-7.74,1.8-2.46,1.24-4.48,2.96-6.04,5.18-1.43,2.1-2.27,4.42-2.51,6.95-.23,2.54.15,5.08,1.13,7.6,1.47,3.78,3.8,6.83,7,9.15,3.17,2.3,6.52,3.37,10.08,3.23.77-.03,1.53-.11,2.28-.24.75-.12,1.54-.3,2.36-.52.08.22.14.48.2.8.03.1.06.16.07.19l.34.94c.95,2.65,2.47,4.75,4.54,6.27,2.06,1.52,4.32,2.21,6.78,2.07,2-.11,4.14-.83,6.43-2.14,2.2-1.23,4.45-2.95,6.76-5.14-.68,1.5-1.14,3.07-1.36,4.72-2.37,6.51-4.86,11.51-7.54,14.95-3.24,4.34-7.28,6.75-12.18,7.19-4.1.37-7.94-.54-11.56-2.75-3.65-2.22-6.21-5.2-7.68-8.91-1.23-3.09-1.24-5.82-.01-8.18,1.24-2.34,3.32-3.57,6.22-3.71,1.93-.09,3.66.32,5.18,1.24,1.51.92,2.57,2.21,3.18,3.87.8,2.17.53,4.3-.78,6.41-1.29,2.12-3.35,3.66-6.17,4.63.65.18,1.28.31,1.89.38.61.07,1.18.08,1.71.04,2.62-.2,4.55-1.38,5.81-3.52,1.27-2.13,1.44-4.51.49-7.14-.81-2.22-2.34-4.03-4.61-5.44-2.28-1.41-4.7-2.06-7.26-1.94-3.47.16-5.91,1.51-7.3,4.07-1.37,2.58-1.33,5.68.12,9.3,1.75,4.4,4.73,7.84,8.89,10.32,4.12,2.45,8.66,3.44,13.65,2.98,3.91-.36,7.42-1.57,10.53-3.61,3.14-2.02,5.57-4.61,7.29-7.78.44-.81.87-1.81,1.31-2.98.92,2,2.33,3.58,4.23,4.74,1.42.88,3.82,1.65,7.19,2.31l-2.37,13.19h3.93s2.38-13.25,2.38-13.25c2.17,0,4.59-.71,7.26-2.13,2.04-1.08,3.73-2.28,5.07-3.6,1.34-1.31,2.51-2.92,3.54-4.82,1.02-1.9,1.7-3.83,2.03-5.79.12-.75.21-1.31.25-1.69.04-.38.06-.92.06-1.63,0-1.25-.14-2.49-.41-3.72ZM129.1,92.81c-3.43,4.12-6.92,6.25-10.55,6.34-1.09.03-2.11-.32-3.07-1.05-.96-.73-1.61-1.63-1.94-2.71-.55-1.77-.49-3.58.18-5.44.68-1.85,1.95-3.64,3.81-5.37,2.04-1.93,4.17-3.35,6.38-4.29,2.22-.93,4.53-1.38,6.91-1.37.6,0,1.2.05,1.79.14.59.09,1.21.22,1.86.4-.05,4.84-1.85,9.29-5.37,13.35ZM97.12,94.93c1.31-3.04,3.01-5.97,5.11-8.79,3.78-5.05,7.65-8.83,11.55-11.36,3.95-2.5,7.69-3.71,11.18-3.65,2.45.04,4.47.58,6.06,1.61,1.58,1.03,2.62,2.48,3.11,4.35l.29,1.12c-1.2-.21-2.08-.35-2.64-.43-.56-.08-1.06-.12-1.51-.12-5.79-.04-12.31,3.74-19.33,11.49-1.41,1.64-2.48,2.88-3.2,3.71-2.35,2.75-4.66,5.14-6.93,7.17-2.25,2.04-4.41,3.68-6.5,4.91.59-3.61,1.53-6.95,2.81-10.01ZM142.61,118.75c-.25,1.38-.48,2.25-.69,2.63-.67,1.63-1.32,2.9-1.95,3.82-.29.42-.86,1.04-1.7,1.88-1.42,1.46-3.02,2.48-4.77,3.07-.04,0-.96.19-2.76.56l2.33-17.13c.12-1.13.41-2.38.85-3.76.44-1.38.91-2.38,1.41-3.01.33-.38.71-.67,1.13-.88.42-.21.9-.31,1.44-.31.38,0,.84.13,1.38.38.54.25,1.14.82,1.79,1.72.65.9,1.1,1.78,1.35,2.66.25.88.41,1.55.47,2.03.06.48.09,1.26.09,2.35,0,1.29-.13,2.63-.38,4.01Z"/> -</svg> \ No newline at end of file diff --git a/gephi-lite/tsconfig.json b/gephi-lite/tsconfig.json deleted file mode 100644 index d024479..0000000 --- a/gephi-lite/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["@tsconfig/docusaurus/tsconfig.json"], - "compilerOptions": { - "baseUrl": "." - } -} \ No newline at end of file diff --git a/gephi-desktop/static/img/Gephi 2016.svg b/img/Gephi 2016.svg similarity index 100% rename from gephi-desktop/static/img/Gephi 2016.svg rename to img/Gephi 2016.svg diff --git a/gephi-desktop/static/img/docusaurus.png b/img/docusaurus.png similarity index 100% rename from gephi-desktop/static/img/docusaurus.png rename to img/docusaurus.png diff --git a/gephi-desktop/static/img/favicon.ico b/img/favicon.ico similarity index 100% rename from gephi-desktop/static/img/favicon.ico rename to img/favicon.ico diff --git a/img/logo.svg b/img/logo.svg new file mode 100644 index 0000000..3abf01f --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + version="1.1" + id="Calque_1" + x="0px" + y="0px" + width="203.96201" + height="203.96201" + viewBox="0 0 203.962 203.962" + enable-background="new 0 0 595.28 841.89" + xml:space="preserve" + sodipodi:docname="logo.svg" + inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"><defs + id="defs23" /><sodipodi:namedview + id="namedview21" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + showgrid="false" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + inkscape:zoom="0.9882526" + inkscape:cx="293.95318" + inkscape:cy="340.49999" + inkscape:window-width="1920" + inkscape:window-height="1017" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="Calque_1" /> +<circle + fill="#3e393c" + cx="101.981" + cy="101.981" + r="101.981" + id="circle2" /> +<g + id="g8" + transform="translate(-4.0379944,-81.195999)"> + <g + id="g6"> + <path + fill="#ffffff" + d="m 182.135,186.074 c -0.512,-2.324 -1.3,-4.471 -2.364,-6.439 -1.064,-1.969 -2.442,-3.78 -4.137,-5.435 -1.694,-1.655 -3.329,-2.796 -4.905,-3.427 -1.577,-0.63 -3.349,-0.945 -5.319,-0.945 -1.734,0 -3.488,0.296 -5.26,0.887 -1.773,0.591 -3.527,1.616 -5.26,3.074 -1.734,1.458 -3.27,3.409 -4.609,5.854 -1.576,2.837 -2.561,5.636 -2.955,8.395 l -5.438,37.676 c -2.993,-0.63 -5.159,-1.456 -6.498,-2.481 -1.89,-1.495 -3.406,-3.621 -4.548,-6.377 -1.142,-2.755 -1.712,-6.181 -1.712,-10.275 0,-2.519 0.254,-5.333 0.767,-8.444 0.512,-3.111 1.24,-6.083 2.186,-8.918 2.284,-6.378 5.867,-11.141 10.75,-14.291 1.338,-0.708 2.717,-1.418 4.135,-2.127 l 0.354,-2.126 c -1.891,0 -3.879,0.257 -5.965,0.769 -2.087,0.513 -4.114,1.318 -6.083,2.421 -0.42,0.249 -0.83,0.497 -1.23,0.742 -1.786,0.316 -5.049,2.664 -9.78,7.125 l -0.399,0.358 c -7.385,6.753 -13.242,11.595 -17.655,14.474 -4.379,2.901 -8.283,4.451 -11.737,4.641 -3.182,0.173 -5.985,-0.612 -8.418,-2.362 -2.441,-1.753 -4.243,-4.275 -5.406,-7.562 -0.497,-1.409 -0.817,-2.87 -0.955,-4.383 -0.137,-1.512 -0.093,-3.164 0.13,-4.954 6.065,-3.708 11.803,-8.14 17.233,-13.284 5.517,-5.09 10.885,-10.99 16.132,-17.691 -0.275,1.938 -0.369,3.604 -0.283,4.998 0.086,1.394 0.326,2.717 0.715,3.964 0.94,3.006 2.652,5.349 5.133,7.026 2.471,1.673 5.385,2.457 8.745,2.362 7.004,-0.199 13.875,-4.325 20.743,-12.295 7.042,-7.852 10.883,-16.621 11.443,-26.356 2.633,1.201 4.603,2.502 5.912,3.911 1.303,1.406 2.241,3.241 2.812,5.51 0.883,3.511 0.508,7.034 -1.105,10.582 -1.594,3.563 -4.374,7.055 -8.332,10.483 -0.644,0.62 -1.535,1.385 -2.674,2.293 -1.676,1.258 -2.43,2.189 -2.265,2.793 0.046,0.165 0.208,0.341 0.489,0.527 0.28,0.187 0.536,0.276 0.763,0.27 0.514,-0.014 1.638,-0.583 3.378,-1.705 1.746,-1.117 3.471,-2.492 5.18,-4.122 3.398,-3.185 5.779,-6.59 7.134,-10.222 1.374,-3.617 1.604,-7.306 0.668,-11.077 -0.75,-3.018 -2.133,-5.537 -4.157,-7.56 -2.03,-2.028 -4.696,-3.538 -8,-4.531 -0.11,-0.432 -0.216,-0.947 -0.309,-1.544 -0.095,-0.598 -0.162,-0.978 -0.204,-1.14 -1.159,-4.502 -3.568,-7.929 -7.242,-10.286 -3.689,-2.368 -8.536,-3.611 -14.524,-3.719 -8.864,-0.16 -18.462,2.612 -28.667,8.398 -10.038,5.895 -18.892,14.051 -26.48,24.521 -4.348,6.388 -7.374,12.716 -9.109,18.964 -1.678,6.286 -2.069,12.403 -1.202,18.337 -1.833,0.607 -3.507,1.06 -5.021,1.355 -1.516,0.298 -3.002,0.475 -4.461,0.529 -5.334,0.204 -10.313,-1.366 -14.953,-4.725 -4.666,-3.375 -8.086,-7.871 -10.236,-13.473 -3.215,-8.372 -2.077,-16.729 3.537,-24.992 5.773,-8.155 14.762,-13.866 26.92,-17.161 -0.141,-0.058 -0.302,-0.089 -0.481,-0.09 -3.296,-0.493 -5.638,-0.748 -7.023,-0.761 -5.063,-0.046 -9.944,1.084 -14.621,3.407 -4.646,2.34 -8.452,5.596 -11.408,9.775 -2.709,3.967 -4.288,8.342 -4.747,13.121 -0.435,4.794 0.284,9.587 2.137,14.362 2.768,7.134 7.184,12.899 13.221,17.275 5.99,4.347 12.322,6.371 19.038,6.098 1.456,-0.058 2.891,-0.206 4.311,-0.444 1.418,-0.235 2.905,-0.564 4.458,-0.985 0.148,0.412 0.271,0.915 0.371,1.508 0.064,0.18 0.106,0.298 0.127,0.354 l 0.636,1.77 c 1.8,5.012 4.665,8.966 8.583,11.849 3.894,2.871 8.157,4.166 12.803,3.9 3.77,-0.214 7.813,-1.564 12.15,-4.037 4.149,-2.331 8.396,-5.578 12.76,-9.704 -1.288,2.825 -2.147,5.796 -2.567,8.917 -4.476,12.3 -9.186,21.739 -14.243,28.231 -6.128,8.196 -13.755,12.748 -23.006,13.573 -7.738,0.691 -14.997,-1.028 -21.822,-5.191 -6.884,-4.198 -11.734,-9.815 -14.512,-16.819 -2.318,-5.845 -2.338,-11 -0.027,-15.44 2.351,-4.415 6.279,-6.746 11.752,-7.014 3.649,-0.178 6.911,0.605 9.775,2.341 2.856,1.731 4.857,4.167 6.013,7.313 1.506,4.1 1.007,8.129 -1.467,12.108 -2.441,4.002 -6.321,6.919 -11.659,8.739 1.229,0.344 2.417,0.581 3.562,0.708 1.145,0.129 2.223,0.155 3.235,0.077 4.947,-0.377 8.594,-2.6 10.967,-6.651 2.408,-4.029 2.724,-8.521 0.921,-13.49 -1.523,-4.198 -4.418,-7.617 -8.698,-10.266 -4.303,-2.665 -8.877,-3.891 -13.704,-3.667 -6.545,0.305 -11.155,2.86 -13.794,7.692 -2.59,4.863 -2.504,10.724 0.223,17.557 3.313,8.302 8.925,14.811 16.786,19.492 7.786,4.632 16.36,6.495 25.783,5.625 7.392,-0.683 14.004,-2.962 19.878,-6.809 5.932,-3.806 10.516,-8.706 13.762,-14.689 0.823,-1.539 1.648,-3.414 2.475,-5.624 1.741,3.771 4.401,6.762 7.997,8.956 2.677,1.655 7.207,3.11 13.586,4.371 l -4.467,24.907 7.415,-0.004 4.488,-25.021 c 4.098,0 8.668,-1.339 13.713,-4.018 3.861,-2.047 7.052,-4.312 9.576,-6.793 2.521,-2.48 4.748,-5.513 6.679,-9.098 1.93,-3.583 3.211,-7.227 3.841,-10.929 0.236,-1.418 0.395,-2.481 0.473,-3.19 0.078,-0.709 0.119,-1.734 0.119,-3.073 -0.001,-2.362 -0.258,-4.705 -0.77,-7.029 z m -36.082,-31.588 c -6.472,7.783 -13.075,11.802 -19.933,11.98 -2.058,0.054 -3.99,-0.607 -5.796,-1.983 -1.812,-1.38 -3.033,-3.087 -3.663,-5.125 -1.032,-3.336 -0.924,-6.762 0.34,-10.265 1.284,-3.489 3.676,-6.874 7.191,-10.147 3.849,-3.64 7.874,-6.335 12.051,-8.099 4.196,-1.75 8.549,-2.609 13.041,-2.587 1.138,0.005 2.267,0.094 3.388,0.261 1.121,0.169 2.293,0.419 3.515,0.752 -0.094,9.149 -3.498,17.538 -10.134,25.213 z m -60.386,4 c 2.471,-5.74 5.685,-11.274 9.655,-16.603 7.144,-9.544 14.445,-16.678 21.808,-21.462 7.462,-4.716 14.522,-6.998 21.106,-6.89 4.631,0.075 8.451,1.09 11.454,3.039 2.991,1.942 4.944,4.677 5.867,8.214 l 0.553,2.122 c -2.261,-0.394 -3.921,-0.663 -4.978,-0.808 -1.057,-0.143 -2.006,-0.219 -2.847,-0.224 -10.931,-0.075 -23.251,7.058 -36.501,21.701 -2.666,3.104 -4.675,5.444 -6.044,7.009 -4.44,5.192 -8.797,9.71 -13.092,13.539 -4.249,3.859 -8.335,6.954 -12.279,9.268 1.122,-6.824 2.887,-13.125 5.298,-18.905 z m 85.898,44.997 c -0.475,2.602 -0.91,4.255 -1.305,4.965 -1.266,3.073 -2.491,5.476 -3.677,7.21 -0.554,0.788 -1.622,1.97 -3.202,3.546 -2.689,2.758 -5.695,4.689 -9.016,5.791 -0.08,0 -1.819,0.355 -5.219,1.064 l 4.409,-32.357 c 0.236,-2.131 0.769,-4.5 1.6,-7.105 0.829,-2.604 1.718,-4.5 2.666,-5.685 0.631,-0.71 1.343,-1.263 2.133,-1.658 0.79,-0.395 1.698,-0.592 2.726,-0.592 0.71,0 1.58,0.237 2.607,0.709 1.026,0.473 2.152,1.556 3.376,3.251 1.225,1.695 2.074,3.369 2.548,5.023 0.474,1.654 0.77,2.936 0.889,3.841 0.118,0.906 0.178,2.384 0.178,4.433 -0.001,2.442 -0.239,4.964 -0.713,7.564 z" + id="path4" /> + </g> +</g> + + + + + +</svg> diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg new file mode 100644 index 0000000..af961c4 --- /dev/null +++ b/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,171 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1088" height="687.962" viewBox="0 0 1088 687.962"> + <title>Easy to Use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg new file mode 100644 index 0000000..94b5cf0 --- /dev/null +++ b/img/undraw_docusaurus_react.svg @@ -0,0 +1,170 @@ + + Powered by React + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg new file mode 100644 index 0000000..d9161d3 --- /dev/null +++ b/img/undraw_docusaurus_tree.svg @@ -0,0 +1,40 @@ + + Focus on What Matters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html index 16e3a0e..12d3f40 100644 --- a/index.html +++ b/index.html @@ -1,38 +1,16 @@ - - - - - Gephi Documentations - - - - - -
- -
- - - -
-
-
- - + + + + + +Introduction | Gephi Documentation + + + + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b457c98..0000000 --- a/package-lock.json +++ /dev/null @@ -1,19205 +0,0 @@ -{ - "name": "@gephi-documentation/root", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@gephi-documentation/root", - "version": "0.0.0", - "workspaces": [ - "gephi-desktop", - "gephi-lite" - ], - "dependencies": { - "@docusaurus/core": "^3.8.1", - "@docusaurus/preset-classic": "^3.8.1", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.1.1", - "copyfiles": "^2.4.1", - "docusaurus-plugin-matomo": "^0.0.8", - "prism-react-renderer": "^2.4.1", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.8.1", - "concurrently": "^9.2.0", - "rimraf": "^6.0.1", - "typescript": "5.9.2", - "vite": "^7.1.2" - }, - "engines": { - "node": ">=22" - } - }, - "gephi-desktop": { - "name": "@gephi-documentation/desktop", - "version": "0.0.0", - "engines": { - "node": ">=22" - } - }, - "gephi-lite": { - "name": "@gephi-documentation/lite", - "version": "0.0.0", - "engines": { - "node": ">=22" - } - }, - "gephi-project": { - "name": "@gephi-documentation/gephi-project", - "version": "0.0.0", - "extraneous": true, - "engines": { - "node": ">=22" - } - }, - "node_modules/@algolia/abtesting": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.1.0.tgz", - "integrity": "sha512-sEyWjw28a/9iluA37KLGu8vjxEIlb60uxznfTUmXImy7H5NvbpSO6yYgmgH5KiD7j+zTUUihiST0jEP12IoXow==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", - "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", - "@algolia/autocomplete-shared": "1.17.9" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", - "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", - "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.9" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", - "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.35.0.tgz", - "integrity": "sha512-uUdHxbfHdoppDVflCHMxRlj49/IllPwwQ2cQ8DLC4LXr3kY96AHBpW0dMyi6ygkn2MtFCc6BxXCzr668ZRhLBQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.35.0.tgz", - "integrity": "sha512-SunAgwa9CamLcRCPnPHx1V2uxdQwJGqb1crYrRWktWUdld0+B2KyakNEeVn5lln4VyeNtW17Ia7V7qBWyM/Skw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.35.0.tgz", - "integrity": "sha512-ipE0IuvHu/bg7TjT2s+187kz/E3h5ssfTtjpg1LbWMgxlgiaZIgTTbyynM7NfpSJSKsgQvCQxWjGUO51WSCu7w==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.35.0.tgz", - "integrity": "sha512-UNbCXcBpqtzUucxExwTSfAe8gknAJ485NfPN6o1ziHm6nnxx97piIbcBQ3edw823Tej2Wxu1C0xBY06KgeZ7gA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.35.0.tgz", - "integrity": "sha512-/KWjttZ6UCStt4QnWoDAJ12cKlQ+fkpMtyPmBgSS2WThJQdSV/4UWcqCUqGH7YLbwlj3JjNirCu3Y7uRTClxvA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.35.0.tgz", - "integrity": "sha512-8oCuJCFf/71IYyvQQC+iu4kgViTODbXDk3m7yMctEncRSRV+u2RtDVlpGGfPlJQOrAY7OONwJlSHkmbbm2Kp/w==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.35.0.tgz", - "integrity": "sha512-FfmdHTrXhIduWyyuko1YTcGLuicVbhUyRjO3HbXE4aP655yKZgdTIfMhZ/V5VY9bHuxv/fGEh3Od1Lvv2ODNTg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" - }, - "node_modules/@algolia/ingestion": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.35.0.tgz", - "integrity": "sha512-gPzACem9IL1Co8mM1LKMhzn1aSJmp+Vp434An4C0OBY4uEJRcqsLN3uLBlY+bYvFg8C8ImwM9YRiKczJXRk0XA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.35.0.tgz", - "integrity": "sha512-w9MGFLB6ashI8BGcQoVt7iLgDIJNCn4OIu0Q0giE3M2ItNrssvb8C0xuwJQyTy1OFZnemG0EB1OvXhIHOvQwWw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.35.0.tgz", - "integrity": "sha512-AhrVgaaXAb8Ue0u2nuRWwugt0dL5UmRgS9LXe0Hhz493a8KFeZVUE56RGIV3hAa6tHzmAV7eIoqcWTQvxzlJeQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.35.0.tgz", - "integrity": "sha512-diY415KLJZ6x1Kbwl9u96Jsz0OstE3asjXtJ9pmk1d+5gPuQ5jQyEsgC+WmEXzlec3iuVszm8AzNYYaqw6B+Zw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.35.0.tgz", - "integrity": "sha512-uydqnSmpAjrgo8bqhE9N1wgcB98psTRRQXcjc4izwMB7yRl9C8uuAQ/5YqRj04U0mMQ+fdu2fcNF6m9+Z1BzDQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.35.0.tgz", - "integrity": "sha512-RgLX78ojYOrThJHrIiPzT4HW3yfQa0D7K+MQ81rhxqaNyNBu4F1r+72LNHYH/Z+y9I1Mrjrd/c/Ue5zfDgAEjQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", - "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.3", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", - "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", - "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", - "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", - "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", - "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", - "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", - "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", - "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", - "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", - "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", - "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", - "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", - "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", - "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", - "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", - "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", - "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", - "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", - "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", - "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", - "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", - "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", - "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", - "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", - "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", - "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", - "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", - "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", - "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", - "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", - "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", - "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", - "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", - "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", - "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", - "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", - "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz", - "integrity": "sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", - "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz", - "integrity": "sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", - "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", - "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", - "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.0", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.3", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-dotall-regex": "^7.27.1", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.27.1", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.27.1", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.0", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.3", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", - "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.27.1", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", - "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", - "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.3.tgz", - "integrity": "sha512-LKYxD2CIfocUFNREQ1yk+dW+8OH8CRqmgatBZYXb+XhuObO8wsDpEoCNri5bKld9cnj8xukqZjxSX8p1YiRF8Q==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.43.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", - "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.3", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.2", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", - "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/cascade-layer-name-parser": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz", - "integrity": "sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", - "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", - "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", - "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", - "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", - "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/media-query-list-parser": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", - "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz", - "integrity": "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz", - "integrity": "sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-function": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz", - "integrity": "sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-color-mix-variadic-function-arguments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz", - "integrity": "sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-content-alt-text": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz", - "integrity": "sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-exponential-functions": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-2.0.9.tgz", - "integrity": "sha512-abg2W/PI3HXwS/CZshSa79kNWNZHdJPMBXeZNyPQFbbj8sKO3jXxOt/wF7juJVjyDTc6JrvaUZYFcSBZBhaxjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-4.0.0.tgz", - "integrity": "sha512-usBzw9aCRDvchpok6C+4TXC57btc4bJtmKQWOHQxOVKen1ZfVqBUuCZ/wuqdX5GHsD0NRSr9XTP+5ID1ZZQBXw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gamut-mapping": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz", - "integrity": "sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-gradients-interpolation-method": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz", - "integrity": "sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz", - "integrity": "sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz", - "integrity": "sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-initial": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz", - "integrity": "sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz", - "integrity": "sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-light-dark-function": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz", - "integrity": "sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-float-and-clear": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-3.0.0.tgz", - "integrity": "sha512-SEmaHMszwakI2rqKRJgE+8rpotFfne1ZS6bZqBoQIicFyV+xT1UF42eORPxJkVJVrH9C0ctUgwMSn3BLOIZldQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overflow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overflow/-/postcss-logical-overflow-2.0.0.tgz", - "integrity": "sha512-spzR1MInxPuXKEX2csMamshR4LRaSZ3UXVaRGjeQxl70ySxOhMpP2252RAFsg8QyyBXBzuVOOdx1+bVO5bPIzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-overscroll-behavior": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-overscroll-behavior/-/postcss-logical-overscroll-behavior-2.0.0.tgz", - "integrity": "sha512-e/webMjoGOSYfqLunyzByZj5KKe5oyVg/YSbie99VEaSDE2kimFm0q1f6t/6Jo+VVCQ/jbe2Xy+uX+C4xzWs4w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-resize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-3.0.0.tgz", - "integrity": "sha512-DFbHQOFW/+I+MY4Ycd/QN6Dg4Hcbb50elIJCfnwkRTCX05G11SwViI5BbBlg9iHRl4ytB7pmY5ieAFk3ws7yyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-logical-viewport-units": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-3.0.4.tgz", - "integrity": "sha512-q+eHV1haXA4w9xBwZLKjVKAWn3W2CMqmpNpZUk5kRprvSiBEGMgrNH3/sJZ8UA3JgyHaOt3jwT9uFa4wLX4EqQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-minmax": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-2.0.9.tgz", - "integrity": "sha512-af9Qw3uS3JhYLnCbqtZ9crTvvkR+0Se+bBqSr7ykAnl9yKhk6895z9rf+2F4dClIDJWxgn0iZZ1PSdkhrbs2ig==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-3.0.5.tgz", - "integrity": "sha512-zhAe31xaaXOY2Px8IYfoVTB3wglbJUVigGphFLj6exb7cjZRH9A6adyE22XfFK3P2PzwRk0VDeTJmaxpluyrDg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-4.0.0.tgz", - "integrity": "sha512-jMYDdqrQQxE7k9+KjstC3NbsmC063n1FTPLCgCRS2/qHUbHM0mNy9pIn4QIiQGs9I/Bg98vMqw7mJXBxa0N88A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", - "integrity": "sha512-HlEoG0IDRoHXzXnkV4in47dzsxdsjdz6+j7MLjaACABX2NfvjFS6XVAnpaDyGesz9gK2SC7MbNwdCHusObKJ9Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz", - "integrity": "sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz", - "integrity": "sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-random-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-random-function/-/postcss-random-function-2.0.1.tgz", - "integrity": "sha512-q+FQaNiRBhnoSNo+GzqGOIBKoHQ43lYz0ICrV+UudfWnEF6ksS6DsBIJSISKQT2Bvu3g4k6r7t0zYrk5pDlo8w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-relative-color-syntax": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz", - "integrity": "sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-4.0.1.tgz", - "integrity": "sha512-IMi9FwtH6LMNuLea1bjVMQAsUhFxJnyLSgOp/cpv5hrzWmrUYU5fm0EguNDIIOHUqzXode8F/1qkC/tEo/qN8Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@csstools/postcss-sign-functions": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@csstools/postcss-sign-functions/-/postcss-sign-functions-1.1.4.tgz", - "integrity": "sha512-P97h1XqRPcfcJndFdG95Gv/6ZzxUBBISem0IDqPZ7WMvc/wlO+yU0c5D/OCpZ5TJoTt63Ok3knGk64N+o6L2Pg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-4.0.9.tgz", - "integrity": "sha512-h9btycWrsex4dNLeQfyU3y3w40LMQooJWFMm/SK9lrKguHDcFl4VMkncKKoXi2z5rM9YGWbUQABI8BT2UydIcA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz", - "integrity": "sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-4.0.9.tgz", - "integrity": "sha512-Hnh5zJUdpNrJqK9v1/E3BbrQhaDTj5YiX7P61TOvUhoDHnUmsNNxcDAgkQ32RrcWx9GVUvfUNPcUkn8R3vIX6A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-calc": "^2.1.4", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz", - "integrity": "sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@csstools/utilities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@csstools/utilities/-/utilities-2.0.0.tgz", - "integrity": "sha512-5VdOr0Z71u+Yp3ozOx8T11N703wIFGVRgOWbOZMKgglPJsWA54MRIoMNVMa7shUToIhx5J8vX4sOZgD2XiihiQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", - "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", - "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.9", - "@algolia/autocomplete-preset-algolia": "1.17.9", - "@docsearch/css": "3.9.0", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 20.0.0", - "react": ">= 16.8.0 < 20.0.0", - "react-dom": ">= 16.8.0 < 20.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/babel": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz", - "integrity": "sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/bundler": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.1.tgz", - "integrity": "sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.8.1", - "@docusaurus/cssnano-preset": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.3", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.11.0", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.2", - "null-loader": "^4.0.1", - "postcss": "^8.5.4", - "postcss-loader": "^7.3.4", - "postcss-preset-env": "^10.2.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^6.0.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.1.tgz", - "integrity": "sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.8.1", - "@docusaurus/bundler": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "execa": "5.1.1", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.6", - "tinypool": "^1.0.2", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^4.15.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.1.tgz", - "integrity": "sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.5.4", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.1.tgz", - "integrity": "sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.1.tgz", - "integrity": "sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.1.tgz", - "integrity": "sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.8.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.1.tgz", - "integrity": "sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "cheerio": "1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.1.tgz", - "integrity": "sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "schema-dts": "^1.1.2", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.1.tgz", - "integrity": "sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.1.tgz", - "integrity": "sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.1.tgz", - "integrity": "sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^2.3.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.1.tgz", - "integrity": "sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.1.tgz", - "integrity": "sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.1.tgz", - "integrity": "sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.1.tgz", - "integrity": "sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/plugin-svgr": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.1.tgz", - "integrity": "sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@svgr/core": "8.1.0", - "@svgr/webpack": "^8.1.0", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.1.tgz", - "integrity": "sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/plugin-content-blog": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/plugin-content-pages": "3.8.1", - "@docusaurus/plugin-css-cascade-layers": "3.8.1", - "@docusaurus/plugin-debug": "3.8.1", - "@docusaurus/plugin-google-analytics": "3.8.1", - "@docusaurus/plugin-google-gtag": "3.8.1", - "@docusaurus/plugin-google-tag-manager": "3.8.1", - "@docusaurus/plugin-sitemap": "3.8.1", - "@docusaurus/plugin-svgr": "3.8.1", - "@docusaurus/theme-classic": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-search-algolia": "3.8.1", - "@docusaurus/types": "3.8.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.1.tgz", - "integrity": "sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/plugin-content-blog": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/plugin-content-pages": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-translations": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.45", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.5.4", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.1.tgz", - "integrity": "sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.8.1", - "@docusaurus/module-type-aliases": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz", - "integrity": "sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.9.0", - "@docusaurus/core": "3.8.1", - "@docusaurus/logger": "3.8.1", - "@docusaurus/plugin-content-docs": "3.8.1", - "@docusaurus/theme-common": "3.8.1", - "@docusaurus/theme-translations": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-validation": "3.8.1", - "algoliasearch": "^5.17.1", - "algoliasearch-helper": "^3.22.6", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.1.tgz", - "integrity": "sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/types": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.1.tgz", - "integrity": "sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.1.tgz", - "integrity": "sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/types": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "escape-string-regexp": "^4.0.0", - "execa": "5.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "p-queue": "^6.6.2", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.1.tgz", - "integrity": "sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.8.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.1.tgz", - "integrity": "sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.8.1", - "@docusaurus/utils": "3.8.1", - "@docusaurus/utils-common": "3.8.1", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", - "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", - "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", - "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", - "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", - "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", - "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", - "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", - "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", - "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", - "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", - "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", - "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", - "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", - "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", - "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", - "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", - "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", - "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", - "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", - "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", - "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", - "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", - "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", - "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", - "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", - "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@gephi-documentation/desktop": { - "resolved": "gephi-desktop", - "link": true - }, - "node_modules/@gephi-documentation/lite": { - "resolved": "gephi-lite", - "link": true - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", - "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.30", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", - "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", - "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-scope": "^1.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "recma-build-jsx": "^1.0.0", - "recma-jsx": "^1.0.0", - "recma-stringify": "^1.0.0", - "rehype-recma": "^1.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", - "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.3.tgz", - "integrity": "sha512-UmTdvXnLlqQNOCJnyksjPs1G4GqXNGW1LrzCe8+8QoaLhhDeTXYBgJ3k6x61WIhlHX2U+VzEJ55TtIjR/HTySA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.3.tgz", - "integrity": "sha512-8NoxqLpXm7VyeI0ocidh335D6OKT0UJ6fHdnIxf3+6oOerZZc+O7r+UhvROji6OspyPm+rrIdb1gTXtVIqn+Sg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.3.tgz", - "integrity": "sha512-csnNavqZVs1+7/hUKtgjMECsNG2cdB8F7XBHP6FfQjqhjF8rzMzb3SLyy/1BG7YSfQ+bG75Ph7DyedbUqwq1rA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.3.tgz", - "integrity": "sha512-r2MXNjbuYabSIX5yQqnT8SGSQ26XQc8fmp6UhlYJd95PZJkQD1u82fWP7HqvGUf33IsOC6qsiV+vcuD4SDP6iw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.3.tgz", - "integrity": "sha512-uluObTmgPJDuJh9xqxyr7MV61Imq+0IvVsAlWyvxAaBSNzCcmZlhfYcRhCdMaCsy46ccZa7vtDDripgs9Jkqsw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.3.tgz", - "integrity": "sha512-AVJXEq9RVHQnejdbFvh1eWEoobohUYN3nqJIPI4mNTMpsyYN01VvcAClxflyk2HIxvLpRcRggpX1m9hkXkpC/A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.3.tgz", - "integrity": "sha512-byyflM+huiwHlKi7VHLAYTKr67X199+V+mt1iRgJenAI594vcmGGddWlu6eHujmcdl6TqSNnvqaXJqZdnEWRGA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.3.tgz", - "integrity": "sha512-aLm3NMIjr4Y9LklrH5cu7yybBqoVCdr4Nvnm8WB7PKCn34fMCGypVNpGK0JQWdPAzR/FnoEoFtlRqZbBBLhVoQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.3.tgz", - "integrity": "sha512-VtilE6eznJRDIoFOzaagQodUksTEfLIsvXymS+UdJiSXrPW7Ai+WG4uapAc3F7Hgs791TwdGh4xyOzbuzIZrnw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.3.tgz", - "integrity": "sha512-dG3JuS6+cRAL0GQ925Vppafi0qwZnkHdPeuZIxIPXqkCLP02l7ka+OCyBoDEv8S+nKHxfjvjW4OZ7hTdHkx8/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.3.tgz", - "integrity": "sha512-iU8DxnxEKJptf8Vcx4XvAUdpkZfaz0KWfRrnIRrOndL0SvzEte+MTM7nDH4A2Now4FvTZ01yFAgj6TX/mZl8hQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.3.tgz", - "integrity": "sha512-VrQZp9tkk0yozJoQvQcqlWiqaPnLM6uY1qPYXvukKePb0fqaiQtOdMJSxNFUZFsGw5oA5vvVokjHrx8a9Qsz2A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.3.tgz", - "integrity": "sha512-uf2eucWSUb+M7b0poZ/08LsbcRgaDYL8NCGjUeFMwCWFwOuFcZ8D9ayPl25P3pl+D2FH45EbHdfyUesQ2Lt9wA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.3.tgz", - "integrity": "sha512-7tnUcDvN8DHm/9ra+/nF7lLzYHDeODKKKrh6JmZejbh1FnCNZS8zMkZY5J4sEipy2OW1d1Ncc4gNHUd0DLqkSg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.3.tgz", - "integrity": "sha512-MUpAOallJim8CsJK+4Lc9tQzlfPbHxWDrGXZm2z6biaadNpvh3a5ewcdat478W+tXDoUiHwErX/dOql7ETcLqg==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.3.tgz", - "integrity": "sha512-F42IgZI4JicE2vM2PWCe0N5mR5vR0gIdORPqhGQ32/u1S1v3kLtbZ0C/mi9FFk7C5T0PgdeyWEPajPjaUpyoKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.3.tgz", - "integrity": "sha512-oLc+JrwwvbimJUInzx56Q3ujL3Kkhxehg7O1gWAYzm8hImCd5ld1F2Gry5YDjR21MNb5WCKhC9hXgU7rRlyegQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.3.tgz", - "integrity": "sha512-lOrQ+BVRstruD1fkWg9yjmumhowR0oLAAzavB7yFSaGltY8klttmZtCLvOXCmGE9mLIn8IBV/IFrQOWz5xbFPg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.3.tgz", - "integrity": "sha512-vvrVKPRS4GduGR7VMH8EylCBqsDcw6U+/0nPDuIjXQRbHJc6xOBj+frx8ksfZAh6+Fptw5wHrN7etlMmQnPQVg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.3.tgz", - "integrity": "sha512-fi3cPxCnu3ZeM3EwKZPgXbWoGzm2XHgB/WShKI81uj8wG0+laobmqy5wbgEwzstlbLu4MyO8C19FyhhWseYKNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", - "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.10.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.13.tgz", - "integrity": "sha512-zePQJSW5QkwSHKRApqWCVKeKoSOt4xvEnLENZPjyvm9Ezdf/EyDeJM7jqLzOwjVICQQzvLZ63T55MKdJB5H6ww==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prismjs": { - "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.1.10", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.10.tgz", - "integrity": "sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==", - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "license": "ISC" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/algoliasearch": { - "version": "5.35.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.35.0.tgz", - "integrity": "sha512-Y+moNhsqgLmvJdgTsO4GZNgsaDWv8AOGAaPeIeHKlDn/XunoAqYbA+XNpBd1dW8GOXAUDyxC9Rxc7AV4kpFcIg==", - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.1.0", - "@algolia/client-abtesting": "5.35.0", - "@algolia/client-analytics": "5.35.0", - "@algolia/client-common": "5.35.0", - "@algolia/client-insights": "5.35.0", - "@algolia/client-personalization": "5.35.0", - "@algolia/client-query-suggestions": "5.35.0", - "@algolia/client-search": "5.35.0", - "@algolia/ingestion": "1.35.0", - "@algolia/monitoring": "1.35.0", - "@algolia/recommend": "5.35.0", - "@algolia/requester-browser-xhr": "5.35.0", - "@algolia/requester-fetch": "5.35.0", - "@algolia/requester-node-http": "5.35.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz", - "integrity": "sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw==", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/astring": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", - "license": "MIT", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.21", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4", - "caniuse-lite": "^1.0.30001702", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.1.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", - "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", - "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", - "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.25.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", - "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001733", - "electron-to-chromium": "^1.5.199", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001735", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", - "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/concurrently": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.0.tgz", - "integrity": "sha512-IsB/fiXTupmagMW4MNp2lx2cdSN2FfZq78vF90LBB+zZHArbIQZjQtzXCiXnvTxCZSvXanTqFLWBjw2UkLx1SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/config-chain/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "license": "MIT", - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } - }, - "node_modules/copyfiles/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/copyfiles/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/copyfiles/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/copyfiles/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/copyfiles/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/copyfiles/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/copyfiles/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/core-js": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz", - "integrity": "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.0.tgz", - "integrity": "sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.25.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.45.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.0.tgz", - "integrity": "sha512-OtwjqcDpY2X/eIIg1ol/n0y/X8A9foliaNt1dSK0gV3J2/zw+89FcNG3mPK+N8YWts4ZFUPxnrAzsxs/lf8yDA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-blank-pseudo": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz", - "integrity": "sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz", - "integrity": "sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz", - "integrity": "sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", - "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", - "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.3.1.tgz", - "integrity": "sha512-XnDRQMXucLueX92yDe0LPKupXetWoFOgawr4O4X41l5TltgK2NVbJJVDnnOywDYfW1sTJ28AcXGKOqdRKwCcmQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ], - "license": "MIT-0" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-plugin-matomo": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-matomo/-/docusaurus-plugin-matomo-0.0.8.tgz", - "integrity": "sha512-YSaDdjxI7uN1FuNLSGrQy4BmDEXwwyL6vac7GfmS7wFBLck/Ias5jHqENPBHXe36m2cYzyesGPQL1EsS9vanwA==", - "license": "MIT", - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "@docusaurus/core": "^2.0.0-alpha.56 || ^3.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.203", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz", - "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esast-util-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/esast-util-from-js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", - "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "acorn": "^8.0.0", - "esast-util-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/esbuild": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", - "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.9", - "@esbuild/android-arm": "0.25.9", - "@esbuild/android-arm64": "0.25.9", - "@esbuild/android-x64": "0.25.9", - "@esbuild/darwin-arm64": "0.25.9", - "@esbuild/darwin-x64": "0.25.9", - "@esbuild/freebsd-arm64": "0.25.9", - "@esbuild/freebsd-x64": "0.25.9", - "@esbuild/linux-arm": "0.25.9", - "@esbuild/linux-arm64": "0.25.9", - "@esbuild/linux-ia32": "0.25.9", - "@esbuild/linux-loong64": "0.25.9", - "@esbuild/linux-mips64el": "0.25.9", - "@esbuild/linux-ppc64": "0.25.9", - "@esbuild/linux-riscv64": "0.25.9", - "@esbuild/linux-s390x": "0.25.9", - "@esbuild/linux-x64": "0.25.9", - "@esbuild/netbsd-arm64": "0.25.9", - "@esbuild/netbsd-x64": "0.25.9", - "@esbuild/openbsd-arm64": "0.25.9", - "@esbuild/openbsd-x64": "0.25.9", - "@esbuild/openharmony-arm64": "0.25.9", - "@esbuild/sunos-x64": "0.25.9", - "@esbuild/win32-arm64": "0.25.9", - "@esbuild/win32-ia32": "0.25.9", - "@esbuild/win32-x64": "0.25.9" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-scope": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", - "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz", - "integrity": "sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/file-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/file-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", - "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", - "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", - "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^9.0.0", - "property-information": "^7.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz", - "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz", - "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-attach-comments": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-js": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", - "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^7.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", - "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.4.tgz", - "integrity": "sha512-V/PZeWsqhfpE27nKeX9EO2sbR+D17A+tLf6qU+ht66jdUsN0QLKJN27Z+1+gHrVMKgndBahes0PU6rRihDgHTw==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", - "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", - "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "license": "MIT", - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", - "license": "MIT" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", - "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz", - "integrity": "sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", - "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", - "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-label": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", - "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-factory-space/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-title": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/micromark-util-character/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", - "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", - "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", - "integrity": "sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "license": "ISC", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.2.tgz", - "integrity": "sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/null-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/null-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/null-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/path-to-regexp": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz", - "integrity": "sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz", - "integrity": "sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz", - "integrity": "sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz", - "integrity": "sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-custom-media": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz", - "integrity": "sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/media-query-list-parser": "^4.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-properties": { - "version": "14.0.6", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz", - "integrity": "sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz", - "integrity": "sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/cascade-layer-name-parser": "^2.0.5", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz", - "integrity": "sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz", - "integrity": "sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz", - "integrity": "sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-focus-within": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz", - "integrity": "sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz", - "integrity": "sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-image-set-function": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz", - "integrity": "sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/utilities": "^2.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-lab-function": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz", - "integrity": "sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/css-color-parser": "^3.0.10", - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/utilities": "^2.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-8.1.0.tgz", - "integrity": "sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", - "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", - "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nesting": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", - "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/selector-resolve-nested": "^3.1.0", - "@csstools/selector-specificity": "^5.0.0", - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", - "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^7.0.0" - } - }, - "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz", - "integrity": "sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz", - "integrity": "sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-10.0.0.tgz", - "integrity": "sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-preset-env": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.4.tgz", - "integrity": "sha512-q+lXgqmTMdB0Ty+EQ31SuodhdfZetUlwCA/F0zRcd/XdxjzI+Rl2JhZNz5US2n/7t9ePsvuhCnEN4Bmu86zXlA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "@csstools/postcss-cascade-layers": "^5.0.2", - "@csstools/postcss-color-function": "^4.0.10", - "@csstools/postcss-color-mix-function": "^3.0.10", - "@csstools/postcss-color-mix-variadic-function-arguments": "^1.0.0", - "@csstools/postcss-content-alt-text": "^2.0.6", - "@csstools/postcss-exponential-functions": "^2.0.9", - "@csstools/postcss-font-format-keywords": "^4.0.0", - "@csstools/postcss-gamut-mapping": "^2.0.10", - "@csstools/postcss-gradients-interpolation-method": "^5.0.10", - "@csstools/postcss-hwb-function": "^4.0.10", - "@csstools/postcss-ic-unit": "^4.0.2", - "@csstools/postcss-initial": "^2.0.1", - "@csstools/postcss-is-pseudo-class": "^5.0.3", - "@csstools/postcss-light-dark-function": "^2.0.9", - "@csstools/postcss-logical-float-and-clear": "^3.0.0", - "@csstools/postcss-logical-overflow": "^2.0.0", - "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", - "@csstools/postcss-logical-resize": "^3.0.0", - "@csstools/postcss-logical-viewport-units": "^3.0.4", - "@csstools/postcss-media-minmax": "^2.0.9", - "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.5", - "@csstools/postcss-nested-calc": "^4.0.0", - "@csstools/postcss-normalize-display-values": "^4.0.0", - "@csstools/postcss-oklab-function": "^4.0.10", - "@csstools/postcss-progressive-custom-properties": "^4.1.0", - "@csstools/postcss-random-function": "^2.0.1", - "@csstools/postcss-relative-color-syntax": "^3.0.10", - "@csstools/postcss-scope-pseudo-class": "^4.0.1", - "@csstools/postcss-sign-functions": "^1.1.4", - "@csstools/postcss-stepped-value-functions": "^4.0.9", - "@csstools/postcss-text-decoration-shorthand": "^4.0.2", - "@csstools/postcss-trigonometric-functions": "^4.0.9", - "@csstools/postcss-unset-value": "^4.0.0", - "autoprefixer": "^10.4.21", - "browserslist": "^4.25.0", - "css-blank-pseudo": "^7.0.1", - "css-has-pseudo": "^7.0.2", - "css-prefers-color-scheme": "^10.0.0", - "cssdb": "^8.3.0", - "postcss-attribute-case-insensitive": "^7.0.1", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^7.0.10", - "postcss-color-hex-alpha": "^10.0.0", - "postcss-color-rebeccapurple": "^10.0.0", - "postcss-custom-media": "^11.0.6", - "postcss-custom-properties": "^14.0.6", - "postcss-custom-selectors": "^8.0.5", - "postcss-dir-pseudo-class": "^9.0.1", - "postcss-double-position-gradients": "^6.0.2", - "postcss-focus-visible": "^10.0.1", - "postcss-focus-within": "^9.0.1", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^6.0.0", - "postcss-image-set-function": "^7.0.0", - "postcss-lab-function": "^7.0.10", - "postcss-logical": "^8.1.0", - "postcss-nesting": "^13.0.2", - "postcss-opacity-percentage": "^3.0.0", - "postcss-overflow-shorthand": "^6.0.0", - "postcss-page-break": "^3.0.4", - "postcss-place": "^10.0.0", - "postcss-pseudo-class-any-link": "^10.0.1", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^8.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz", - "integrity": "sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "license": "MIT", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz", - "integrity": "sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", - "license": "MIT", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", - "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.1.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz", - "integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.1" - } - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "name": "@slorber/react-helmet-async", - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-json-view-lite": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.2.tgz", - "integrity": "sha512-m7uTsXDgPQp8R9bJO4HD/66+i218eyQPAb+7/dGQpwg8i4z2afTFqtHJPQFHvJfgDCjGQ1HSGlL3HtrZDa3Tdg==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recma-build-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-jsx": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", - "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", - "license": "MIT", - "dependencies": { - "acorn-jsx": "^5.0.0", - "estree-util-to-js": "^2.0.0", - "recma-parse": "^1.0.0", - "recma-stringify": "^1.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/recma-parse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "esast-util-from-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-to-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-recma": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "hast-util-to-estree": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-directive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz", - "integrity": "sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", - "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.46.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.3.tgz", - "integrity": "sha512-RZn2XTjXb8t5g13f5YclGoilU/kwT696DIkY3sywjdZidNSi3+vseaQov7D7BZXVJCPv3pDWUN69C78GGbXsKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.46.3", - "@rollup/rollup-android-arm64": "4.46.3", - "@rollup/rollup-darwin-arm64": "4.46.3", - "@rollup/rollup-darwin-x64": "4.46.3", - "@rollup/rollup-freebsd-arm64": "4.46.3", - "@rollup/rollup-freebsd-x64": "4.46.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.46.3", - "@rollup/rollup-linux-arm-musleabihf": "4.46.3", - "@rollup/rollup-linux-arm64-gnu": "4.46.3", - "@rollup/rollup-linux-arm64-musl": "4.46.3", - "@rollup/rollup-linux-loongarch64-gnu": "4.46.3", - "@rollup/rollup-linux-ppc64-gnu": "4.46.3", - "@rollup/rollup-linux-riscv64-gnu": "4.46.3", - "@rollup/rollup-linux-riscv64-musl": "4.46.3", - "@rollup/rollup-linux-s390x-gnu": "4.46.3", - "@rollup/rollup-linux-x64-gnu": "4.46.3", - "@rollup/rollup-linux-x64-musl": "4.46.3", - "@rollup/rollup-win32-arm64-msvc": "4.46.3", - "@rollup/rollup-win32-ia32-msvc": "4.46.3", - "@rollup/rollup-win32-x64-msvc": "4.46.3", - "fsevents": "~2.3.2" - } - }, - "node_modules/rtlcss": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", - "license": "MIT" - }, - "node_modules/schema-dts": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", - "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", - "license": "Apache-2.0" - }, - "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", - "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-js": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", - "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", - "license": "MIT", - "dependencies": { - "style-to-object": "1.0.9" - } - }, - "node_modules/style-to-object": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", - "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.4" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", - "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.43.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", - "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.14.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", - "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/url-loader/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/url-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vite": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", - "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.25.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.14" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/watchpack": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", - "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.101.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", - "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.3", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", - "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", - "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index e17a321..0000000 --- a/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@gephi-documentation/root", - "version": "0.0.0", - "private": true, - "type": "module", - "workspaces": [ - "gephi-desktop", - "gephi-lite" - ], - "scripts": { - "start": "concurrently \"vite --config vite.config.ts\" \"npm run start --workspace @gephi-documentation/desktop\" \"npm run start --workspace @gephi-documentation/lite\"", - "build": "npm run build --workspaces --if-present && copyfiles ./index.html build && copyfiles -u 1 public/* build/", - "preview": "vite --config vite.preview.ts", - "clean": "npm run clear && rimraf ./build", - "clear": "npm run clear --workspaces --if-present" - }, - "dependencies": { - "@docusaurus/core": "^3.8.1", - "@docusaurus/preset-classic": "^3.8.1", - "@mdx-js/react": "^3.1.0", - "clsx": "^2.1.1", - "copyfiles": "^2.4.1", - "docusaurus-plugin-matomo": "^0.0.8", - "prism-react-renderer": "^2.4.1", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.8.1", - "concurrently": "^9.2.0", - "rimraf": "^6.0.1", - "typescript": "5.9.2", - "vite": "^7.1.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "engines": { - "node": ">=22" - } -} diff --git a/public/.nojekyll b/public/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/public/logo-desktop.svg b/public/logo-desktop.svg deleted file mode 100644 index 1797bcf..0000000 --- a/public/logo-desktop.svg +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/public/logo-gephi.svg b/public/logo-gephi.svg deleted file mode 100644 index 8f122ce..0000000 --- a/public/logo-gephi.svg +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/public/logo-lite.svg b/public/logo-lite.svg deleted file mode 100644 index 67a41d4..0000000 --- a/public/logo-lite.svg +++ /dev/null @@ -1,16 +0,0 @@ - - \ No newline at end of file diff --git a/public/style.css b/public/style.css deleted file mode 100644 index 72f1fdb..0000000 --- a/public/style.css +++ /dev/null @@ -1,115 +0,0 @@ -@import url("https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,200..900;1,200..900&family=Montserrat+Alternates:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"); - -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - -/* You can override the default Infima variables here. */ -:root { - --ifm-font-weight-semibold: normal; - --ifm-heading-font-weight: normal; - - --ifm-footer-link-hover-color: lightgray; - - --ifm-color-primary: #555555; - --ifm-color-primary-dark: #4d4d4d; - --ifm-color-primary-darker: #484848; - --ifm-color-primary-darkest: #3b3b3b; - --ifm-color-primary-light: #5e5e5e; - --ifm-color-primary-lighter: #626262; - --ifm-color-primary-lightest: #6e6e6e; - --ifm-font-family-base: "Source Sans 3", "Helvetica Neue", Helvetica, Arial, sans-serif; - --ifm-link-color: var(--ifm-color-primary); - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - --ifm-code-color: var(--ifm-color-primary-darkest); -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #dddddd; - --ifm-color-primary-dark: #c7c7c7; - --ifm-color-primary-darker: #bcbcbc; - --ifm-color-primary-darkest: #9b9b9b; - --ifm-color-primary-light: #f3f3f3; - --ifm-color-primary-lighter: #fefefe; - --ifm-color-primary-lightest: #ffffff; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); - --ifm-code-color: var(--ifm-color-primary-light); -} - -code { - color: var(--ifm-code-color); -} - -.navbar--fixed-top { - position: sticky; - top: 0; - z-index: var(--ifm-z-index-fixed); -} - -.navbar { - background-color: var(--ifm-navbar-background-color); - box-shadow: var(--ifm-navbar-shadow); - display: flex; - height: var(--ifm-navbar-height); - padding: var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal); -} - -.navbar__brand { - align-items: center; - color: var(--ifm-navbar-link-color); - display: flex; - margin-right: 1rem; - min-width: 0; - text-decoration: none; -} - -.navbar__title { - font-weight: normal; - font-family: "Montserrat Alternates", var(--ifm-font-family-base); -} -.navbar__logo img { - height: 32px; - width: 32px; -} - -.projects { - display: flex; - gap: 5em; - margin-top: 5em; - justify-content: center; -} - -.projects > .project { - position: relative; - padding: 1em; - display: flex; - flex-direction: column; - text-align: center; - border: 1px solid var(--docusaurus-highlighted-code-line-bg); - border-radius: 0.25em; - box-shadow: 5px 5px 5px var(--docusaurus-highlighted-code-line-bg); -} - -.projects > .project:hover { - border: 1px solid #000; - box-shadow: 5px 5px 10px #000; -} - -.projects .project img.logo { - height: 300px; - width: 300px; -} - -.projects .project .link:after { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1; - content: ""; -} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..931ec94 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://docs.gephi.org/tagsweekly0.5https://docs.gephi.org/tags/clusterweekly0.5https://docs.gephi.org/tags/code-styleweekly0.5https://docs.gephi.org/tags/developmentweekly0.5https://docs.gephi.org/tags/guiweekly0.5https://docs.gephi.org/tags/layoutweekly0.5https://docs.gephi.org/tags/startupweekly0.5https://docs.gephi.org/tags/troubleshootingweekly0.5https://docs.gephi.org/tags/videoweekly0.5https://docs.gephi.org/weekly0.5https://docs.gephi.org/Developer_Documentation/weekly0.5https://docs.gephi.org/Developer_Documentation/code_styleweekly0.5https://docs.gephi.org/Developer_Documentation/developer_handbookweekly0.5https://docs.gephi.org/Developer_Documentation/how_to_build_gephiweekly0.5https://docs.gephi.org/Developer_Documentation/localizationweekly0.5https://docs.gephi.org/Plugins/weekly0.5https://docs.gephi.org/Plugins/Add_a_module_panelweekly0.5https://docs.gephi.org/Plugins/Add_a_submenuweekly0.5https://docs.gephi.org/Plugins/Build_a_plugin_without_Gephi_source_codeweekly0.5https://docs.gephi.org/Plugins/code_sharing_strategyweekly0.5https://docs.gephi.org/Plugins/de%CC%81marrage-rapide-frweekly0.5https://docs.gephi.org/Plugins/exportweekly0.5https://docs.gephi.org/Plugins/Extend_Data_Laboratoryweekly0.5https://docs.gephi.org/Plugins/filterweekly0.5https://docs.gephi.org/Plugins/generatorweekly0.5https://docs.gephi.org/Plugins/graphstreamingweekly0.5https://docs.gephi.org/Plugins/importweekly0.5https://docs.gephi.org/Plugins/layoutweekly0.5https://docs.gephi.org/Plugins/Plugin_Quick_Startweekly0.5https://docs.gephi.org/Plugins/preview-rendererweekly0.5https://docs.gephi.org/Plugins/Spigot_importer_with_Wizardweekly0.5https://docs.gephi.org/Plugins/statisticsweekly0.5https://docs.gephi.org/Plugins/update-a-pluginweekly0.5https://docs.gephi.org/User_Manual/datasetsweekly0.5https://docs.gephi.org/User_Manual/guiweekly0.5https://docs.gephi.org/User_Manual/Import_CSV_Dataweekly0.5https://docs.gephi.org/User_Manual/Import_Dynamic_Dataweekly0.5https://docs.gephi.org/User_Manual/Official_Videos/01-first-contact-with-gephiweekly0.5https://docs.gephi.org/User_Manual/Official_Videos/02-layouts-clusters-and-where-to-find-themweekly0.5https://docs.gephi.org/User_Manual/troubleshootingweekly0.5https://docs.gephi.org/User_Manual/vocabularyweekly0.5 \ No newline at end of file diff --git a/tags/cluster/index.html b/tags/cluster/index.html new file mode 100644 index 0000000..2a49599 --- /dev/null +++ b/tags/cluster/index.html @@ -0,0 +1,16 @@ + + + + + +One doc tagged with "Cluster" | Gephi Documentation + + + + +
+

One doc tagged with "Cluster"

View All Tags
+ + + + \ No newline at end of file diff --git a/tags/code-style/index.html b/tags/code-style/index.html new file mode 100644 index 0000000..dae2b91 --- /dev/null +++ b/tags/code-style/index.html @@ -0,0 +1,16 @@ + + + + + +One doc tagged with "Code Style" | Gephi Documentation + + + + +
+

One doc tagged with "Code Style"

View All Tags

Code Style

The source code uses the CheckStyle tool to keep the code style consistent.

+ + + + \ No newline at end of file diff --git a/tags/development/index.html b/tags/development/index.html new file mode 100644 index 0000000..374f070 --- /dev/null +++ b/tags/development/index.html @@ -0,0 +1,16 @@ + + + + + +One doc tagged with "Development" | Gephi Documentation + + + + +
+

One doc tagged with "Development"

View All Tags

Code Style

The source code uses the CheckStyle tool to keep the code style consistent.

+ + + + \ No newline at end of file diff --git a/tags/gui/index.html b/tags/gui/index.html new file mode 100644 index 0000000..e8c74bb --- /dev/null +++ b/tags/gui/index.html @@ -0,0 +1,16 @@ + + + + + +One doc tagged with "GUI" | Gephi Documentation + + + + + + + + + \ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..b8998d3 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,16 @@ + + + + + +Tags | Gephi Documentation + + + + + + + + + \ No newline at end of file diff --git a/tags/layout/index.html b/tags/layout/index.html new file mode 100644 index 0000000..3a6c00c --- /dev/null +++ b/tags/layout/index.html @@ -0,0 +1,16 @@ + + + + + +One doc tagged with "Layout" | Gephi Documentation + + + + +
+

One doc tagged with "Layout"

View All Tags
+ + + + \ No newline at end of file diff --git a/tags/startup/index.html b/tags/startup/index.html new file mode 100644 index 0000000..c325484 --- /dev/null +++ b/tags/startup/index.html @@ -0,0 +1,16 @@ + + + + + +2 docs tagged with "Startup" | Gephi Documentation + + + + + + + + + \ No newline at end of file diff --git a/tags/troubleshooting/index.html b/tags/troubleshooting/index.html new file mode 100644 index 0000000..22b5e19 --- /dev/null +++ b/tags/troubleshooting/index.html @@ -0,0 +1,16 @@ + + + + + +One doc tagged with "Troubleshooting" | Gephi Documentation + + + + +
+

One doc tagged with "Troubleshooting"

View All Tags
+ + + + \ No newline at end of file diff --git a/tags/video/index.html b/tags/video/index.html new file mode 100644 index 0000000..5431284 --- /dev/null +++ b/tags/video/index.html @@ -0,0 +1,16 @@ + + + + + +2 docs tagged with "Video" | Gephi Documentation + + + + +
+

2 docs tagged with "Video"

View All Tags
+ + + + \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts deleted file mode 100644 index 30f7984..0000000 --- a/vite.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { defineConfig } from "vite"; - -export default defineConfig({ - server: { - hmr: false, - proxy: { - "/desktop": "http://localhost:3001/", - "/lite": "http://localhost:3002/", - }, - }, -}); diff --git a/vite.preview.ts b/vite.preview.ts deleted file mode 100644 index c2bb819..0000000 --- a/vite.preview.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { defineConfig } from "vite"; - -export default defineConfig({ - root: "./build", - server: { - hmr: false, - port: 5174, - }, -});