diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index acd585cb..199fcf6b 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -123,4 +123,10 @@ jobs: with: wait-on-timeout: 20 command: npm run test - browser: chrome \ No newline at end of file + browser: chrome + - name: Upload screenshots + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: cypress-screenshots-${{ matrix.install-variant }}-py${{ matrix.python-version }}-${{ matrix.os }} + path: cypress/screenshots diff --git a/IDAES-UI/src/components/flowsheet_main_component/stream_table_component/stream_table_header/stream_table_header.tsx b/IDAES-UI/src/components/flowsheet_main_component/stream_table_component/stream_table_header/stream_table_header.tsx index 64a7731d..6914a043 100644 --- a/IDAES-UI/src/components/flowsheet_main_component/stream_table_component/stream_table_header/stream_table_header.tsx +++ b/IDAES-UI/src/components/flowsheet_main_component/stream_table_component/stream_table_header/stream_table_header.tsx @@ -34,7 +34,7 @@ export default function StreamTableHeader(){ minimizePanel('streamTable', setPanelState)} diff --git a/docs/README.txt b/docs/README.txt new file mode 100644 index 00000000..7d707efa --- /dev/null +++ b/docs/README.txt @@ -0,0 +1,4 @@ +README for IDAES-UI docs +========================= + + diff --git a/docs/_static/fv/fv-arch.png b/docs/_static/fv/fv-arch.png deleted file mode 100644 index c4a4a110..00000000 Binary files a/docs/_static/fv/fv-arch.png and /dev/null differ diff --git a/docs/_static/fv/fv-basic-flow.png b/docs/_static/fv/fv-basic-flow.png deleted file mode 100644 index 47ce9f1c..00000000 Binary files a/docs/_static/fv/fv-basic-flow.png and /dev/null differ diff --git a/docs/_static/fv/fv1.png b/docs/_static/fv/fv1.png deleted file mode 100644 index 9751e8e2..00000000 Binary files a/docs/_static/fv/fv1.png and /dev/null differ diff --git a/docs/_static/fv/fv2.png b/docs/_static/fv/fv2.png deleted file mode 100644 index 7f68b8a8..00000000 Binary files a/docs/_static/fv/fv2.png and /dev/null differ diff --git a/docs/_static/fv/fv3.png b/docs/_static/fv/fv3.png deleted file mode 100644 index ab6796bb..00000000 Binary files a/docs/_static/fv/fv3.png and /dev/null differ diff --git a/docs/_static/fv/fvb1.png b/docs/_static/fv/fvb1.png deleted file mode 100644 index 67fc7a1f..00000000 Binary files a/docs/_static/fv/fvb1.png and /dev/null differ diff --git a/docs/_static/fv/fvg1.png b/docs/_static/fv/fvg1.png deleted file mode 100644 index 1d18fef7..00000000 Binary files a/docs/_static/fv/fvg1.png and /dev/null differ diff --git a/docs/_static/fv/fvr1.png b/docs/_static/fv/fvr1.png deleted file mode 100644 index 53ff60fd..00000000 Binary files a/docs/_static/fv/fvr1.png and /dev/null differ diff --git a/docs/_static/fv/fvr2.png b/docs/_static/fv/fvr2.png deleted file mode 100644 index 054be2f9..00000000 Binary files a/docs/_static/fv/fvr2.png and /dev/null differ diff --git a/docs/_static/fv/fvr3.png b/docs/_static/fv/fvr3.png deleted file mode 100644 index 942bc440..00000000 Binary files a/docs/_static/fv/fvr3.png and /dev/null differ diff --git a/docs/_static/fv/fvr4.png b/docs/_static/fv/fvr4.png deleted file mode 100644 index 882f5c37..00000000 Binary files a/docs/_static/fv/fvr4.png and /dev/null differ diff --git a/docs/_static/fv/fvst1.png b/docs/_static/fv/fvst1.png deleted file mode 100644 index 640ea359..00000000 Binary files a/docs/_static/fv/fvst1.png and /dev/null differ diff --git a/docs/_static/fv/fvst2.png b/docs/_static/fv/fvst2.png deleted file mode 100644 index 3b21b426..00000000 Binary files a/docs/_static/fv/fvst2.png and /dev/null differ diff --git a/docs/_static/fv/fvst3.png b/docs/_static/fv/fvst3.png deleted file mode 100644 index 024d935b..00000000 Binary files a/docs/_static/fv/fvst3.png and /dev/null differ diff --git a/docs/_static/sample_fv.png b/docs/_static/sample_fv.png deleted file mode 100644 index 323a1a7c..00000000 Binary files a/docs/_static/sample_fv.png and /dev/null differ diff --git a/docs/collab.md b/docs/collab.md new file mode 100644 index 00000000..534439cb --- /dev/null +++ b/docs/collab.md @@ -0,0 +1,22 @@ +# Collaborating institutions + +IDAES is a collaboration between several national laboratories and universities: + +## National Laboratories + +![NETL](/static/institution_logos/netl.png){w=200px} +![LBNL](/static/institution_logos/lbnl.jpg){w=200px} +![SNL](/static/institution_logos/snl.png){w=200px} + +## Universities + +![CMU](/static/institution_logos/cmu.png){w=200px} +![UND](/static/institution_logos/und.png){w=200px} +![WVU](/static/institution_logos/wvu.png){w=200px} +![GATech](/static/institution_logos/gatech.png){w=200px} + +## Sponsor + +This work was sponsored by the Department of Energy, Fossil Energy and Carbon Management + +![DOE logo](/static/institution_logos/doe.jpg){w=400px} diff --git a/docs/conf.py b/docs/conf.py index c7eeffdd..dbf69639 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,11 +20,12 @@ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # HTML +static_dir = "static" html_theme = "sphinx_book_theme" -html_static_path = ["_static"] -html_logo = "_static/logo.png" +html_static_path = [static_dir] +html_logo = "static/logo.png" html_theme_options = { - "logo": {"image_light": "_static/logo.png", "image_dark": "_static/logo.png"}, + "logo": {"image_light": f"{static_dir}/logo.png", "image_dark": f"{static_dir}/logo.png"}, "repository_provider": "github", "repository_url": "https://github.com/IDAES/idaes-ui", "use_repository_button": True, @@ -35,7 +36,14 @@ myst_heading_anchors = 3 myst_enable_extensions = [ "deflist", # definition lists + "attrs_inline", # inline attributes on images using MD syntax + "substitution", # for global substitutions; see myst_substitutions ] +myst_substitutions = { + # Change these two lines to rename the Flowsheet Visualizer (!) + "vistitle": "Flowsheet Visualizer", + "visabbr": "FV", +} # Autodoc autosummary_generate = True diff --git a/docs/contacts.md b/docs/contacts.md new file mode 100644 index 00000000..33d7593d --- /dev/null +++ b/docs/contacts.md @@ -0,0 +1,18 @@ +# Contacts and Links + +The IDAES UIs are part of the IDAES Integrated Platform, so links and contacts for that platform are all relevant to the UI: + +**Q&A** +* Main IDAES support mailing list: [idaes-support@idaes.org](mailto:idaes-support@lbl.gov) +* [IDAES project web page](https://idaes.org/) +* [GitHub Discussion page](https://github.com/IDAES/idaes-pse/discussions) +* [UI-specific discussions on GitHub](https://github.com/IDAES/idaes-pse/discussions/1367) + +**Documentation** +* [IDAES main documentation](https://idaes-pse.readthedocs.io/en/stable/) +* [IDAES UI documentation](https://idaes-ui.readthedocs.io/) (includes this page) + +**GitHub repositories** +* [IDAES-UI](https://github.com/IDAES/idaes-ui) - User interfaces +* [IDAES-PSE](https://github.com/IDAES/idaes-pse) - Modeling libraries, core and apps +* [Examples](https://github.com/IDAES/examples) diff --git a/docs/design.md b/docs/developer/fv.md similarity index 68% rename from docs/design.md rename to docs/developer/fv.md index 6b83773d..6a98f571 100644 --- a/docs/design.md +++ b/docs/developer/fv.md @@ -1,7 +1,11 @@ -# Design +# {{ vistitle }} for Developers -Currently there is one IDAES UI, the Flowsheet Visualizer (FV). -The architecture and design of the FV uses a pattern that is shared +**TODO** +* Overall design diagram +* How to make changes + +Currently there is one IDAES UI, the {{ vistitle }} ({{ visabbr }}). +The architecture and design of the {{ visabbr }} uses a pattern that is shared across other UIs in other Advanced Process Systems Engineering applications based on the IDAES Integrated Platform (IDAES-IP), e.g. WaterTAP and PARETO. The basics of this design are illustrated below. @@ -10,6 +14,3 @@ run on the desktop by an individual user or as a service across users. A secondary goal is to build a common set of front-end and back-end UI support libraries that can unify and accelerate application development across the IDAES-IP. - -![IDAES Web Application Architecture diagram](_static/fv/fv-arch.png) - diff --git a/docs/developer/index.md b/docs/developer/index.md new file mode 100644 index 00000000..c6f71bcf --- /dev/null +++ b/docs/developer/index.md @@ -0,0 +1,10 @@ +(developer-documentation)= +# Developer Documentation + +```{toctree} +--- +hidden: true +--- +install +fv +``` diff --git a/docs/install.md b/docs/developer/install.md similarity index 59% rename from docs/install.md rename to docs/developer/install.md index de602e4f..77bc0d73 100644 --- a/docs/install.md +++ b/docs/developer/install.md @@ -1,27 +1,13 @@ -# Installation +# Developer Installation -Below are installation instructions for installing IDAES UIs. -More details on overall IDAES installation and usage -are on the [IDAES documentation](https://idaes-pse.readthedocs.io/en/stable/) site. - -## User installation - -If you want to use the UIs (not develop new code), -then use `pip` to install the software as part of the -IDAES Integrated Platform (IDAES-IP). - -```shell -pip install "idaes-pse[ui]" -``` - -## Developer installation +## Install If you want to install for development 1) Clone the [GitHub repository](https://github.com/IDAES/idaes-ui) 2) From the root of the cloned repo run: `pip install -r requirements-dev.txt` -### Building the docs +## Building the docs For developers, to build this documentation locally: diff --git a/docs/fv-view_fs_tb.png b/docs/fv-view_fs_tb.png new file mode 100644 index 00000000..fa39e356 Binary files /dev/null and b/docs/fv-view_fs_tb.png differ diff --git a/docs/fv.md b/docs/fv.md deleted file mode 100644 index 73770adc..00000000 --- a/docs/fv.md +++ /dev/null @@ -1,106 +0,0 @@ -# Flowsheet Visualizer -The main UI for IDAES is the Flowsheet Visualizer (FV). - -## Overview - -The FV displays IDAES *flowsheets* (connected components representing a system or -sub-system to be optimized). -The FV uses web technologies (HTML, CSS, JavaScript). - -![Screenshot of the Flowsheet Visualizer](_static/sample_fv.png) - -## Usage - -### See an example flowsheet -An example flowsheet is included and can be viewed with the following terminal command: - -```shell -python -m idaes_ui.fv.example -``` - -### Visualize your flowsheet -To use the FV to visualize your own flowsheet: -* From within a **Jupyter Notebook**: -```python -# create the flowsheet and put in variable 'flowsheet' -flowsheet.visualize("Flowsheet Name") -``` -* From within a **Python script**, add a keyword argument if you want the visualizer to keep running: -```python -# create the flowsheet and put in variable 'flowsheet' -flowsheet.visualize("Flowsheet Name", loop_forever=True) -``` - -## Features -Below is a walk-through of the features of the Flowsheet Visualizer tool. - -### Main window -The main window has a diagram panel at the top and a "stream table" panel below it. - -![Overview](_static/fv/fv1.png) - -### Resize the main panels -You can change the size of each panel with the "resize" tool in the lower right corner. - -![Text](_static/fv/fv2.png) - -### Zoom the diagram -At the top right are controls that allow zooming in and out for the diagram, as well as "fitting" the diagram in the window. - -![Text](_static/fv/fv3.png) - -### Manipulate the diagram - -#### Move components -You can move the components representing IDAES unit models by clicking and dragging them. - -![Text](_static/fv/fvr1.png) - -#### Rotate components -If you use the "right click" on a component, it will rotate 90 degrees clockwise. - -![Text](_static/fv/fvr2.png) - -#### Add elbows to connections -To add additional elbows in a connection between two components, click on the line that connects them. - -![Text](_static/fv/fvr3.png) - -#### Remove elbows from connections -To remove an elbow in a line, double-click on it. - -![Text](_static/fv/fvr4.png) - -### Group components -For large and complex diagrams, moving components one at a time can become tedious. -To help, the Flowsheet Visualizer allows you to group elements by dragging a rectangle -around them. Then the selected components can be moved as a group. - -![Text](_static/fv/fvg1.png) - - -### Stream table - -The stream table shows values of variables for the "streams" connecting components. -A small colored dot indicates fixed (vs. free) variables. - -Streams can be rearranged by dragging their header left or right. - -![Text](_static/fv/fvst1.png) - -#### Stream/diagram "brushing" - -To help see where the streams are in the diagram, the Flowsheet Visualizer -uses a technique called, in statistics, "brushing" to visually link the two elements. - -Selecting a stream in the table, by hovering over its column with a mouse, will -highlight the corresponding line in the diagram. -Similarly, selecting a line in the diagram will highlight the corresponding -stream in the stream table. - -* ![Text](_static/fv/fvst3.png) - -#### Hide/show streams -You can select fields to hide/show in the stream table -- particularly useful when you have many streams. - -![Text](_static/fv/fvst2.png) diff --git a/docs/index.md b/docs/index.md index 5758b02b..a07311cd 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,20 +1,25 @@ # IDAES User Interface Documentation This documentation describes user interfaces (UIs) for the -Institute for Design of Advanced Energy Systems (IDAES) -Integrated Platform, which are distributed through the [idaes-pse](https://pypi.org/project/idaes-pse/) -package on PyPI. +Institute for Design of Advanced Energy Systems (IDAES) +Integrated Platform. + +This documentation is divided into two main sections: + +[User Documentation](#user-documentation) +: For those who wish to use the UIs, including IDAES and other model developers who are using, e.g., the {{ vistitle }} UI for debugging. + +[Developer Documentation](#developer-documentation) +: For those who wish to change, add to, or extend the IDAES UIs by changing the UI code itself. ```{toctree} --- -maxdepth: 1 +hidden: true --- -install.md -fv.md -design.md +user/index +developer/index +collab +contacts ``` - - -*Diagram showing the basic workflow for model developers using the IDAES visualization tools* - +Links and contact information for both users and developers are on the [Contacts](#contacts) page. diff --git a/docs/pytest.ini b/docs/pytest.ini new file mode 100644 index 00000000..1902f147 --- /dev/null +++ b/docs/pytest.ini @@ -0,0 +1,8 @@ +[pytest] +minversion = 8.0 +addopts = -q --disable-warnings --strict +testpaths = + tests +markers = + unit + screenshot \ No newline at end of file diff --git a/docs/sample visualization.json b/docs/sample visualization.json new file mode 100644 index 00000000..2b3cf078 --- /dev/null +++ b/docs/sample visualization.json @@ -0,0 +1 @@ +{"model": {"stream_table": {"index": [0, 1, 2, 3, 4], "columns": ["Variable", "Units", "s_inlet_2_1", "s_inlet_1_1", "s01", "s02"], "data": [["flow_mol", {"raw": "mole / second", "html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}"}, [1.0, "unfixed"], [1.0, "unfixed"], [1.0, "unfixed"], [1.0, "unfixed"]], ["mole_frac_comp benzene", {"raw": "dimensionless", "html": "", "latex": ""}, [0.5, "unfixed"], [0.5, "unfixed"], [0.5, "unfixed"], [0.5, "unfixed"]], ["mole_frac_comp toluene", {"raw": "dimensionless", "html": "", "latex": ""}, [0.5, "unfixed"], [0.5, "unfixed"], [0.5, "unfixed"], [0.5, "unfixed"]], ["temperature", {"raw": "kelvin", "html": "K", "latex": "\\mathrm{K}"}, [298.15, "unfixed"], [298.15, "unfixed"], [298.15, "unfixed"], [298.15, "unfixed"]], ["pressure", {"raw": "pascal", "html": "Pa", "latex": "\\mathrm{Pa}"}, [101325, "unfixed"], [101325, "unfixed"], [101325, "unfixed"], [101325, "unfixed"]]]}, "id": "sample-visualization", "unit_models": {"M01": {"type": "mixer", "image": "/images/icons/mixer.svg", "performance_contents": {}, "stream_contents": {"0": {"Variable": "flow_mol", "Units": {"raw": "mole / second", "html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}"}, "inlet_1": 1.0, "inlet_2": 1.0, "Outlet": 1.0}, "1": {"Variable": "mole_frac_comp benzene", "Units": {"raw": "dimensionless", "html": "", "latex": ""}, "inlet_1": 0.5, "inlet_2": 0.5, "Outlet": 0.5}, "2": {"Variable": "mole_frac_comp toluene", "Units": {"raw": "dimensionless", "html": "", "latex": ""}, "inlet_1": 0.5, "inlet_2": 0.5, "Outlet": 0.5}, "3": {"Variable": "temperature", "Units": {"raw": "kelvin", "html": "K", "latex": "\\mathrm{K}"}, "inlet_1": 298.15, "inlet_2": 298.15, "Outlet": 298.15}, "4": {"Variable": "pressure", "Units": {"raw": "pascal", "html": "Pa", "latex": "\\mathrm{Pa}"}, "inlet_1": 101325.0, "inlet_2": 101325.0, "Outlet": 101325.0}}}, "H02": {"type": "heater", "image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Variable": "Heat Duty", "Value": 0.0}}, "stream_contents": {"0": {"Variable": "flow_mol", "Units": {"raw": "mole / second", "html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}"}, "Inlet": 1.0, "Outlet": 1.0}, "1": {"Variable": "mole_frac_comp benzene", "Units": {"raw": "dimensionless", "html": "", "latex": ""}, "Inlet": 0.5, "Outlet": 0.5}, "2": {"Variable": "mole_frac_comp toluene", "Units": {"raw": "dimensionless", "html": "", "latex": ""}, "Inlet": 0.5, "Outlet": 0.5}, "3": {"Variable": "temperature", "Units": {"raw": "kelvin", "html": "K", "latex": "\\mathrm{K}"}, "Inlet": 298.15, "Outlet": 298.15}, "4": {"Variable": "pressure", "Units": {"raw": "pascal", "html": "Pa", "latex": "\\mathrm{Pa}"}, "Inlet": 101325.0, "Outlet": 101325.0}}}, "F03": {"type": "flash", "image": "/images/icons/flash.svg", "performance_contents": {"0": {"Variable": "Heat Duty", "Value": 0.0}, "1": {"Variable": "Pressure Change", "Value": 0.0}}, "stream_contents": {"0": {"Variable": "flow_mol", "Units": {"raw": "mole / second", "html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}"}, "Inlet": 1.0, "Vapor Outlet": 0.5, "Liquid Outlet": 0.5}, "1": {"Variable": "mole_frac_comp benzene", "Units": {"raw": "dimensionless", "html": "", "latex": ""}, "Inlet": 0.5, "Vapor Outlet": 0.5, "Liquid Outlet": 0.5}, "2": {"Variable": "mole_frac_comp toluene", "Units": {"raw": "dimensionless", "html": "", "latex": ""}, "Inlet": 0.5, "Vapor Outlet": 0.5, "Liquid Outlet": 0.5}, "3": {"Variable": "temperature", "Units": {"raw": "kelvin", "html": "K", "latex": "\\mathrm{K}"}, "Inlet": 298.15, "Vapor Outlet": 298.15, "Liquid Outlet": 298.15}, "4": {"Variable": "pressure", "Units": {"raw": "pascal", "html": "Pa", "latex": "\\mathrm{Pa}"}, "Inlet": 101325.0, "Vapor Outlet": 101325.0, "Liquid Outlet": 101325.0}}}, "liq_outlet_1": {"type": "product", "image": "/images/icons/product.svg"}, "vap_outlet_1": {"type": "product", "image": "/images/icons/product.svg"}, "inlet_1_1": {"type": "feed", "image": "/images/icons/feed.svg"}, "inlet_2_1": {"type": "feed", "image": "/images/icons/feed.svg"}}, "arcs": {"s01": {"source": "M01", "dest": "H02", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132"}, "s02": {"source": "H02", "dest": "F03", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132"}, "s_liq_outlet_1": {"source": "F03", "dest": "liq_outlet_1", "label": "product info"}, "s_vap_outlet_1": {"source": "F03", "dest": "vap_outlet_1", "label": "product info"}, "s_inlet_1_1": {"source": "inlet_1_1", "dest": "M01", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132"}, "s_inlet_2_1": {"source": "inlet_2_1", "dest": "M01", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132"}}}, "routing_config": {"s01": {"cell_index": 2, "cell_config": {"gap": {"source": {"x": 30, "y": 0}, "destination": {"x": -30, "y": 0}}}}, "s02": {"cell_index": 4, "cell_config": {"gap": {"source": {"x": 30, "y": 0}, "destination": {"x": -30, "y": 0}}}}, "s_liq_outlet_1": {"cell_index": 6, "cell_config": {"gap": {"source": {"x": 30, "y": 0}, "destination": {"x": -30, "y": 0}}}}, "s_vap_outlet_1": {"cell_index": 8, "cell_config": {"gap": {"source": {"x": 30, "y": 0}, "destination": {"x": -30, "y": 0}}}}, "s_inlet_1_1": {"cell_index": 10, "cell_config": {"gap": {"source": {"x": 30, "y": 0}, "destination": {"x": -30, "y": 0}}}}, "s_inlet_2_1": {"cell_index": 12, "cell_config": {"gap": {"source": {"x": 30, "y": 0}, "destination": {"x": -30, "y": 0}}}}}, "cells": [{"type": "standard.Image", "position": {"x": 150, "y": 0}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "M01", "z": 1, "ports": {"groups": {"in": {"position": {"name": "left", "args": {}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}, "out": {"position": {"name": "left", "args": {"x": 48, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "out", "id": 0}, {"group": "in", "id": 9}, {"group": "in", "id": 11}]}, "attrs": {"image": {"xlinkHref": "/images/icons/mixer.svg"}, "label": {"text": "M01"}, "root": {"title": "mixer"}}}, {"type": "standard.Image", "position": {"x": 300, "y": 0}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "H02", "z": 1, "ports": {"groups": {"in": {"position": {"name": "left", "args": {"x": 6, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}, "out": {"position": {"name": "left", "args": {"x": 43, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "in", "id": 1}, {"group": "out", "id": 2}]}, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "H02"}, "root": {"title": "heater"}}}, {"type": "standard.Link", "source": {"id": "M01", "port": 0}, "target": {"id": "H02", "port": 1}, "router": {"name": "manhattan", "padding": 10}, "connector": {"name": "jumpover", "attrs": {"line": {"stroke": "#5c9adb"}}}, "id": "s01", "attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "stroke": "white", "stroke-width": 0, "fill-opacity": 0}, "text": {"text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "fill": "black", "text-anchor": "left", "display": "none"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s01"}}}], "z": 2}, {"type": "standard.Image", "position": {"x": 450, "y": 0}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "F03", "z": 1, "ports": {"groups": {"bottom": {"position": {"name": "bottom", "args": {"x": 25, "y": 50, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}, "in": {"position": {"name": "left", "args": {"dx": 8, "dy": 0}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}, "top": {"position": {"name": "top", "args": {"x": 25, "y": 0, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}, "out": {"position": {"name": "right", "args": {"dx": -8, "dy": 0}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "in", "id": 3}, {"group": "out", "id": 4}, {"group": "out", "id": 6}]}, "attrs": {"image": {"xlinkHref": "/images/icons/flash.svg"}, "label": {"text": "F03"}, "root": {"title": "flash"}}}, {"type": "standard.Link", "source": {"id": "H02", "port": 2}, "target": {"id": "F03", "port": 3}, "router": {"name": "manhattan", "padding": 10}, "connector": {"name": "jumpover", "attrs": {"line": {"stroke": "#5c9adb"}}}, "id": "s02", "attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "stroke": "white", "stroke-width": 0, "fill-opacity": 0}, "text": {"text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "fill": "black", "text-anchor": "left", "display": "none"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s02"}}}], "z": 2}, {"type": "standard.Image", "position": {"x": 600, "y": -120}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "liq_outlet_1", "z": 1, "ports": {"groups": {"in": {"position": {"name": "left", "args": {"x": 2, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "in", "id": 5}]}, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "liq_outlet_1"}, "root": {"title": "product"}}}, {"type": "standard.Link", "source": {"id": "F03", "port": 4}, "target": {"id": "liq_outlet_1", "port": 5}, "router": {"name": "manhattan", "padding": 10}, "connector": {"name": "jumpover", "attrs": {"line": {"stroke": "#5c9adb"}}}, "id": "s_liq_outlet_1", "attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "stroke": "white", "stroke-width": 0, "fill-opacity": 0}, "text": {"text": "product info", "fill": "black", "text-anchor": "left", "display": "none"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_liq_outlet_1"}}}], "z": 2}, {"type": "standard.Image", "position": {"x": 600, "y": 120}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "vap_outlet_1", "z": 1, "ports": {"groups": {"in": {"position": {"name": "left", "args": {"x": 2, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "in", "id": 7}]}, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "vap_outlet_1"}, "root": {"title": "product"}}}, {"type": "standard.Link", "source": {"id": "F03", "port": 6}, "target": {"id": "vap_outlet_1", "port": 7}, "router": {"name": "manhattan", "padding": 10}, "connector": {"name": "jumpover", "attrs": {"line": {"stroke": "#5c9adb"}}}, "id": "s_vap_outlet_1", "attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "stroke": "white", "stroke-width": 0, "fill-opacity": 0}, "text": {"text": "product info", "fill": "black", "text-anchor": "left", "display": "none"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_vap_outlet_1"}}}], "z": 2}, {"type": "standard.Image", "position": {"x": 0, "y": -120}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "inlet_1_1", "z": 1, "ports": {"groups": {"out": {"position": {"name": "left", "args": {"x": 48, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "out", "id": 8}]}, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_1_1"}, "root": {"title": "feed"}}}, {"type": "standard.Link", "source": {"id": "inlet_1_1", "port": 8}, "target": {"id": "M01", "port": 9}, "router": {"name": "manhattan", "padding": 10}, "connector": {"name": "jumpover", "attrs": {"line": {"stroke": "#5c9adb"}}}, "id": "s_inlet_1_1", "attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "stroke": "white", "stroke-width": 0, "fill-opacity": 0}, "text": {"text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "fill": "black", "text-anchor": "left", "display": "none"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_1_1"}}}], "z": 2}, {"type": "standard.Image", "position": {"x": 0, "y": 120}, "size": {"width": 50, "height": 50}, "angle": 0, "id": "inlet_2_1", "z": 1, "ports": {"groups": {"out": {"position": {"name": "left", "args": {"x": 48, "y": 25, "dx": 1, "dy": 1}}, "attrs": {"rect": {"stroke": "#000000", "stroke-width": 0, "width": 0, "height": 0}}, "markup": ""}}, "items": [{"group": "out", "id": 10}]}, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_2_1"}, "root": {"title": "feed"}}}, {"type": "standard.Link", "source": {"id": "inlet_2_1", "port": 10}, "target": {"id": "M01", "port": 11}, "router": {"name": "manhattan", "padding": 10}, "connector": {"name": "jumpover", "attrs": {"line": {"stroke": "#5c9adb"}}}, "id": "s_inlet_2_1", "attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "stroke": "white", "stroke-width": 0, "fill-opacity": 0}, "text": {"text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "fill": "black", "text-anchor": "left", "display": "none"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_2_1"}}}], "z": 2}]} \ No newline at end of file diff --git a/docs/saveFlowsheet.png b/docs/saveFlowsheet.png deleted file mode 100644 index bdfd8b15..00000000 Binary files a/docs/saveFlowsheet.png and /dev/null differ diff --git a/docs/static/fv/btn-minimize.png b/docs/static/fv/btn-minimize.png new file mode 100644 index 00000000..0c1aff6e Binary files /dev/null and b/docs/static/fv/btn-minimize.png differ diff --git a/docs/static/fv/fv-view.png b/docs/static/fv/fv-view.png new file mode 100644 index 00000000..5ee3bde3 Binary files /dev/null and b/docs/static/fv/fv-view.png differ diff --git a/docs/static/fv/fv-view_fs.png b/docs/static/fv/fv-view_fs.png new file mode 100644 index 00000000..7af4fed7 Binary files /dev/null and b/docs/static/fv/fv-view_fs.png differ diff --git a/docs/static/fv/fv-view_fs_tb.png b/docs/static/fv/fv-view_fs_tb.png new file mode 100644 index 00000000..fb61d3f6 Binary files /dev/null and b/docs/static/fv/fv-view_fs_tb.png differ diff --git a/docs/static/fv/workflow.png b/docs/static/fv/workflow.png new file mode 100644 index 00000000..29e1843b Binary files /dev/null and b/docs/static/fv/workflow.png differ diff --git a/docs/static/institution_logos/cmu.png b/docs/static/institution_logos/cmu.png new file mode 100644 index 00000000..059c39bd Binary files /dev/null and b/docs/static/institution_logos/cmu.png differ diff --git a/docs/static/institution_logos/doe.jpg b/docs/static/institution_logos/doe.jpg new file mode 100644 index 00000000..bea129b8 Binary files /dev/null and b/docs/static/institution_logos/doe.jpg differ diff --git a/docs/static/institution_logos/gatech.png b/docs/static/institution_logos/gatech.png new file mode 100644 index 00000000..fe49cca1 Binary files /dev/null and b/docs/static/institution_logos/gatech.png differ diff --git a/docs/static/institution_logos/lbnl.jpg b/docs/static/institution_logos/lbnl.jpg new file mode 100644 index 00000000..5996d21a Binary files /dev/null and b/docs/static/institution_logos/lbnl.jpg differ diff --git a/docs/static/institution_logos/netl.png b/docs/static/institution_logos/netl.png new file mode 100644 index 00000000..f6b468ac Binary files /dev/null and b/docs/static/institution_logos/netl.png differ diff --git a/docs/static/institution_logos/snl.png b/docs/static/institution_logos/snl.png new file mode 100644 index 00000000..fee01be3 Binary files /dev/null and b/docs/static/institution_logos/snl.png differ diff --git a/docs/static/institution_logos/und.png b/docs/static/institution_logos/und.png new file mode 100644 index 00000000..ce2d786a Binary files /dev/null and b/docs/static/institution_logos/und.png differ diff --git a/docs/static/institution_logos/wvu.png b/docs/static/institution_logos/wvu.png new file mode 100644 index 00000000..25d1a003 Binary files /dev/null and b/docs/static/institution_logos/wvu.png differ diff --git a/docs/_static/logo.png b/docs/static/logo.png similarity index 100% rename from docs/_static/logo.png rename to docs/static/logo.png diff --git a/docs/tests/__init__.py b/docs/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/docs/tests/fv-view_fs_tb.png b/docs/tests/fv-view_fs_tb.png new file mode 100644 index 00000000..03632321 Binary files /dev/null and b/docs/tests/fv-view_fs_tb.png differ diff --git a/docs/tests/test_screenshots.py b/docs/tests/test_screenshots.py new file mode 100644 index 00000000..07d66037 --- /dev/null +++ b/docs/tests/test_screenshots.py @@ -0,0 +1,195 @@ +""" +Generate UI screenshots with Playwright's pytest plugin. + +Run `pytest -s -m screenshot` to generate the screenshots in the directory 'docs/static/fv'. +See :class:`Screenshot.filename` for the naming convention. + +""" +# stdlib +from enum import Enum +from pathlib import Path +import re +import time +from typing import Iterable + +# third-party +from playwright.sync_api import Page, expect +import pytest + +# package +from idaes.models.flowsheets.demo_flowsheet import build_flowsheet +from idaes_ui.fv import visualize, fsvis + +__author__ = "Dan Gunter" +__created__ = "2024-03-18" + +# Programmatically implement the naming convention for screenshot files + + +class ScreenMode(Enum): + view = "view" + diagnostics = "diag" + + +class ScreenElement(Enum): + diagnostic_logs = "di" + flowsheet_diagram = "fs" + model_tree = "tr" + solver_logs = "sl" + stream_table = "tb" + + +class ScreenShot: + """Encapsulate a naming convention for screenshot files. + + Example usage:: + + scs = ScreenShot(ScreenMode.view, (ScreenElement.flowsheet_diagram, + ScreenElement.stream_table)) + filename = scs.filepath # -> "////fv-view_di_tb.png" + """ + def __init__( + self, mode: ScreenMode, elements: Iterable[ScreenElement], ext: str = "png" + ): + """Generate canonical screenshot file names. + + See `filename` method. + + + Args: + mode: Top-level mode + elements: One or more things shown in the screenshot + ext: File extension + + Raises: + ValueError: if there is not at least 1 element + """ + self._sorted_elements = [e.value for e in elements] + self._sorted_elements.sort() + self._mode = mode + self._cached_filename = None + self._ext = ext + + tests_path = Path(__file__).parent + static_path = tests_path.parent / "static" + self._fv_path = (static_path / "fv").absolute() + + + @property + def filename(self) -> str: + """Return filename for this screenshot. + + Pattern: `fv-__..._.` + + Where is the value of an instance of ScreenMode + and is the value of an instance of ScreenElement. + The items are in alphabetical order. + + Returns: + Filename + """ + if self._cached_filename is None: + base = f"fv-{self._mode.value}" + if len(self._sorted_elements) == 0: + elements = "" + else: + elements = "_" + "_".join(self._sorted_elements) + self._cached_filename = f"{base}{elements}.{self._ext}" + return self._cached_filename + + @property + def filepath(self) -> Path: + return self._fv_path / self.filename + + +# Flowsheet visualizer example + + +class FVExample: + port = 49999 + app = "sample_visualization" + + def __init__(self): + model = build_flowsheet() + # shutdown any running instance before we start + if fsvis.web_server and fsvis.web_server.port != self.port: + fsvis.web_server.shutdown() + fsvis.web_server = None + visualize(model.fs, self.app, port=self.port, browser=False) + + @property + def url(self): + return f"http://localhost:{self.port}/app?id={self.app}" + + +@pytest.fixture(scope="function", autouse=True) +def fv(): + fv = FVExample() + return fv + + +def load(page, fv): + """Custom wait, for diagram to render after page starts. + """ + page.goto(fv.url) + loc = page.locator("svg[joint-selector='svg']") + expect(loc).to_have_id("v-2") + +# Generate screenshots with 'tests' + + +@pytest.mark.unit +def test_basic(page: Page, fv: FVExample): + load(page, fv) + + # Expect a title "to contain" a substring. + expect(page).to_have_title(re.compile("idaes flowsheet visualizer", flags=re.I)) + + +def pause(): + """There *must* be a better way to do this, but this works for screenshots.. + """ + print("Begin: pause for page to update") + time.sleep(10) + print("End: pause for page to update") + + +@pytest.mark.screenshot +def test_screenshots_view(page: Page, fv: FVExample): + """Generate screenshots for different panel view options. + """ + load(page, fv) + pause() + + # default view + scs = ScreenShot( + mode=ScreenMode.view, + elements=[ScreenElement.flowsheet_diagram, ScreenElement.stream_table], + ) + print(f"creating screenshot in path: {scs.filepath}") + pause() + page.screenshot(path=scs.filepath) + + # minimize stream table + btn = page.locator("#minimize-streamtable-panel-btn") + btn.wait_for() + btn.click() + scs = ScreenShot( + mode=ScreenMode.view, + elements=[ScreenElement.flowsheet_diagram], + ) + print(f"creating screenshot in path: {scs.filepath}") + pause() + page.screenshot(path=scs.filepath) + + # minimize flowsheet too (!) + btn = page.locator("#minimize-flowsheet-panel-btn") + btn.wait_for() + btn.click() + scs = ScreenShot( + mode=ScreenMode.view, + elements=[], + ) + print(f"creating screenshot in path: {scs.filepath}") + pause() + page.screenshot(path=scs.filepath) diff --git a/docs/user/fv/concepts.md b/docs/user/fv/concepts.md new file mode 100644 index 00000000..c5717a22 --- /dev/null +++ b/docs/user/fv/concepts.md @@ -0,0 +1,30 @@ +(fv-concepts)= +# {{ vistitle }} Concepts + +## Overview + +The {{ vistitle }} ({{ visabbr }}) is intended for exploring existing IDAES models. +It will automatically generate a diagram for any model. +Here is an example of the default display: + +![default](/static/fv/fv-view_fs_tb.png){w="80%"} + +You can see here the diagram and stream table. + +% Additional information can be displayed: +% * Diagnostics +% * Summary and detailed diagnostic function outputs +% * Model logs +% * Model tree + +## Workflow + +Currently, the {{ visabbr }} is designed to be run locally, on a user's desktop machine. +Although the interface shows in a web browser, it will be getting its information from the local memory where the model was created and solved. +Because the {{ visabbr }} stays in communication with the Python interpreter that started it, +if you are running in an interactive Python interpreter -- including a Python console, Jupyter Notebook, or IDE window -- then any subsequent changes to the underlying model (structural or by re-solving) can be reflected in the {{ visabbr }}. +As a corollary, {{ visabbr }} exits with the Python interpreter, so if you are running a script that invokes the {{ visabbr }} at the end to view the results, make sure you don't exit the program; see the [run from a script](#fv-run-script) in the How-to for more details. + +A summary of the interactive workflow that the {{ visabbr }} enables is shown below: + +![flow](/static/fv/workflow.png){w="80%" background="transparent"} \ No newline at end of file diff --git a/docs/user/fv/howto.md b/docs/user/fv/howto.md new file mode 100644 index 00000000..5e879816 --- /dev/null +++ b/docs/user/fv/howto.md @@ -0,0 +1,45 @@ +(fv-howto)= +# {{ vistitle }} How-to + +## See an example flowsheet +An example flowsheet is included and can be viewed with the following terminal command: + +```shell +python -m idaes_ui.fv.example +``` + +## Visualize your flowsheet +To use the {{ visabbr }} to visualize your own flowsheet: + +(fv-run-ide)= +### Run from within an interactive environment, including a Jupyter Notebook +```python +# create the flowsheet and put in variable 'flowsheet' +flowsheet.visualize("Flowsheet Name") +``` + +(fv-run-script)= +### Run from within a Python script +Add a keyword argument so the Python interpreter keeps running and the {{ visabbr }} can still communicate with its backend: +```python +# create the flowsheet and put in variable 'flowsheet' +flowsheet.visualize("Flowsheet Name", loop_forever=True) +``` + +## Select panels to view + +The default view is shown below. Note the minimize buttons (![default](/static/fv/btn-minimize.png)) at the right of each panel. + +![default](/static/fv/fv-view_fs_tb.png){w="80%"} + +If you click on the minimize button for the stream table, it goes away and a small +button appears under the top bar labeled `Stream Table+`. + +![stream_table_minimized](/static/fv/fv-view_fs.png){w="80%"} + +If you click on the minimize button for the diagram, only the title bar will show! + +![all_minimized](/static/fv/fv-view.png){w="80%"} + +You can restore the panels by clicking on the `{Panel Name}+` buttons. + diff --git a/docs/user/fv/index.md b/docs/user/fv/index.md new file mode 100644 index 00000000..3b56773c --- /dev/null +++ b/docs/user/fv/index.md @@ -0,0 +1,13 @@ +# {{ vistitle }} +The main UI for IDAES is the {{ vistitle }} ({{ visabbr }}). + +The {{ vistitle }} ({{ visabbr }}) displays IDAES flowsheets using web technologies (HTML, CSS, JavaScript). +Other pages in this section provide more information on {{ visabbr }} [concepts](#fv-concepts), [how-to](#fv-howto) do various +tasks with the {{ visabbr }}, and a [reference](#fv-ref) section for all the available options. + +```{toctree} +:hidden: true +concepts +howto +reference +``` \ No newline at end of file diff --git a/docs/user/fv/reference.md b/docs/user/fv/reference.md new file mode 100644 index 00000000..12d0f9b5 --- /dev/null +++ b/docs/user/fv/reference.md @@ -0,0 +1,41 @@ +(fv-ref)= +# {{ vistitle }} Reference + +## Functions and Controls + +The functions and controls are organized by the relevant panel. + +### Global + +Resize panel +: Resize panels by dragging the divider between them + +Minimize panel +: Minimize a panel by clicking the horizontal minimize button + +Restore panel +: Un-minimize a panel by clicking its name + +### Diagram + +In the diagram, the units such as a heater or splitter are called "components". + +Zoom and Fit +: Use the magnifying glass icons to zoom the diagram in or out. Use the crossed-arrows icon to fit the diagram to the current panel size. + +Move component(s) +: Click and drag on a component to move it. You can drag a rectangle around a group of components to move multiple components at once. + +Rotate component +: Right click on a component to rotate it 90 degrees clockwise + +Add midponts +: To add additional midpoints to the connection lines (or "streams") between components, click on the line in the desired spot. To remove midpoint, double-click on it. + +Show on stream table +: If you select a line (stream) on the diagram, the corresponding stream will be highlighted in the Stream Table panel. + +### Stream Table + +Show on diagram +: You can highlight a stream from the stream table on the diagram by hovering over its column. \ No newline at end of file diff --git a/docs/user/index.md b/docs/user/index.md new file mode 100644 index 00000000..b801e0e8 --- /dev/null +++ b/docs/user/index.md @@ -0,0 +1,14 @@ +(user-documentation)= +# User Documentation + +This section documents the IDAES UIs for users. + +If you wish to develop or extend IDAES UIs, please also see the [developer documentation section](#developer-documentation). + +```{toctree} +--- +hidden: true +--- +install +fv/index +``` \ No newline at end of file diff --git a/docs/user/install.md b/docs/user/install.md new file mode 100644 index 00000000..271c8447 --- /dev/null +++ b/docs/user/install.md @@ -0,0 +1,11 @@ +# Installation + +To install the {{ vistitle }} UI as a user, include the optional '[ui]' dependency as you install +the main IDAES Process Systems (IDAES-PSE) code. + +```shell +pip install "idaes-pse[ui]" +``` + +Please see the [IDAES-PSE installation instructions](https://idaes-pse.readthedocs.io/en/latest/tutorials/getting_started/) for details on installing IDAES-PSE for your platform. + diff --git a/idaes_ui/fv/example.py b/idaes_ui/fv/example.py index 0f2242f8..397db9e0 100644 --- a/idaes_ui/fv/example.py +++ b/idaes_ui/fv/example.py @@ -7,6 +7,7 @@ __author__ = "Dan Gunter" # stdlib +import argparse import logging import os import time @@ -22,9 +23,9 @@ _log.setLevel(logging.INFO) -def fv_example(): +def fv_example(**vis_kw): m = build_flowsheet() - visualize(m.fs, "sample_visualization", port=49999) + visualize(m.fs, "sample_visualization", port=49999, **vis_kw) _log.info("Starting Flowsheet Visualizer") _log.info("Press Control-C to stop") try: @@ -48,11 +49,15 @@ def parse_logging_level(s: str, level: int) -> int: def main(): + p = argparse.ArgumentParser() + p.add_argument("--headless", action="store_true") + args = p.parse_args() + log_level_raw = os.environ.get("FV_LOG_LEVEL", "error") log_level = parse_logging_level(log_level_raw, logging.ERROR) logging.getLogger("idaes_ui").setLevel(log_level) _log.info("Start: Flowsheet Visualizer example") - fv_example() + fv_example(browser=not args.headless) _log.info("Finished: Flowsheet Visualizer example") diff --git a/idaes_ui/fv/static/assets/index-7fead60b.js b/idaes_ui/fv/static/assets/index-7fead60b.js new file mode 100644 index 00000000..bef30afc --- /dev/null +++ b/idaes_ui/fv/static/assets/index-7fead60b.js @@ -0,0 +1,813 @@ +var Eh=Object.defineProperty;var bh=(e,t,n)=>t in e?Eh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var F=(e,t,n)=>(bh(e,typeof t!="symbol"?t+"":t,n),n);function Ch(e,t){for(var n=0;nr[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))r(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const a of o.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(i){if(i.ep)return;i.ep=!0;const o=n(i);fetch(i.href,o)}})();function Kf(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var qf={exports:{}},Zo={},Xf={exports:{}},U={};/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var _i=Symbol.for("react.element"),Nh=Symbol.for("react.portal"),Ph=Symbol.for("react.fragment"),zh=Symbol.for("react.strict_mode"),Th=Symbol.for("react.profiler"),Oh=Symbol.for("react.provider"),Lh=Symbol.for("react.context"),Ah=Symbol.for("react.forward_ref"),Rh=Symbol.for("react.suspense"),Ih=Symbol.for("react.memo"),Fh=Symbol.for("react.lazy"),Qu=Symbol.iterator;function Mh(e){return e===null||typeof e!="object"?null:(e=Qu&&e[Qu]||e["@@iterator"],typeof e=="function"?e:null)}var Jf={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Zf=Object.assign,ed={};function yr(e,t,n){this.props=e,this.context=t,this.refs=ed,this.updater=n||Jf}yr.prototype.isReactComponent={};yr.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};yr.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function td(){}td.prototype=yr.prototype;function Ls(e,t,n){this.props=e,this.context=t,this.refs=ed,this.updater=n||Jf}var As=Ls.prototype=new td;As.constructor=Ls;Zf(As,yr.prototype);As.isPureReactComponent=!0;var Ku=Array.isArray,nd=Object.prototype.hasOwnProperty,Rs={current:null},rd={key:!0,ref:!0,__self:!0,__source:!0};function id(e,t,n){var r,i={},o=null,a=null;if(t!=null)for(r in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(o=""+t.key),t)nd.call(t,r)&&!rd.hasOwnProperty(r)&&(i[r]=t[r]);var l=arguments.length-2;if(l===1)i.children=n;else if(1>>1,B=E[j];if(0>>1;ji(ye,A))eei(Ne,ye)?(E[j]=Ne,E[ee]=A,j=ee):(E[j]=ye,E[ae]=A,j=ae);else if(eei(Ne,A))E[j]=Ne,E[ee]=A,j=ee;else break e}}return z}function i(E,z){var A=E.sortIndex-z.sortIndex;return A!==0?A:E.id-z.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,l=a.now();e.unstable_now=function(){return a.now()-l}}var s=[],u=[],c=1,f=null,h=3,y=!1,v=!1,w=!1,k=typeof setTimeout=="function"?setTimeout:null,p=typeof clearTimeout=="function"?clearTimeout:null,d=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function m(E){for(var z=n(u);z!==null;){if(z.callback===null)r(u);else if(z.startTime<=E)r(u),z.sortIndex=z.expirationTime,t(s,z);else break;z=n(u)}}function _(E){if(w=!1,m(E),!v)if(n(s)!==null)v=!0,jt(x);else{var z=n(u);z!==null&&D(_,z.startTime-E)}}function x(E,z){v=!1,w&&(w=!1,p(T),T=-1),y=!0;var A=h;try{for(m(z),f=n(s);f!==null&&(!(f.expirationTime>z)||E&&!$());){var j=f.callback;if(typeof j=="function"){f.callback=null,h=f.priorityLevel;var B=j(f.expirationTime<=z);z=e.unstable_now(),typeof B=="function"?f.callback=B:f===n(s)&&r(s),m(z)}else r(s);f=n(s)}if(f!==null)var G=!0;else{var ae=n(u);ae!==null&&D(_,ae.startTime-z),G=!1}return G}finally{f=null,h=A,y=!1}}var N=!1,b=null,T=-1,I=5,M=-1;function $(){return!(e.unstable_now()-ME||125j?(E.sortIndex=A,t(u,E),n(s)===null&&E===n(u)&&(w?(p(T),T=-1):w=!0,D(_,A-j))):(E.sortIndex=B,t(s,E),v||y||(v=!0,jt(x))),E},e.unstable_shouldYield=$,e.unstable_wrapCallback=function(E){var z=h;return function(){var A=h;h=z;try{return E.apply(this,arguments)}finally{h=A}}}})(ud);sd.exports=ud;var Qh=sd.exports;/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */var cd=se,He=Qh;function C(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),vl=Object.prototype.hasOwnProperty,Kh=/^[: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]*$/,Xu={},Ju={};function qh(e){return vl.call(Ju,e)?!0:vl.call(Xu,e)?!1:Kh.test(e)?Ju[e]=!0:(Xu[e]=!0,!1)}function Xh(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Jh(e,t,n,r){if(t===null||typeof t>"u"||Xh(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Oe(e,t,n,r,i,o,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=i,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var Se={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Se[e]=new Oe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Se[t]=new Oe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Se[e]=new Oe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Se[e]=new Oe(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){Se[e]=new Oe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Se[e]=new Oe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Se[e]=new Oe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Se[e]=new Oe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Se[e]=new Oe(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ms=/[\-:]([a-z])/g;function js(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ms,js);Se[t]=new Oe(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(Ms,js);Se[t]=new Oe(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(Ms,js);Se[t]=new Oe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Se[e]=new Oe(e,1,!1,e.toLowerCase(),null,!1,!1)});Se.xlinkHref=new Oe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Se[e]=new Oe(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ds(e,t,n,r){var i=Se.hasOwnProperty(t)?Se[t]:null;(i!==null?i.type!==0:r||!(2l||i[a]!==o[l]){var s=` +`+i[a].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=a&&0<=l);break}}}finally{Ta=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Lr(e):""}function Zh(e){switch(e.tag){case 5:return Lr(e.type);case 16:return Lr("Lazy");case 13:return Lr("Suspense");case 19:return Lr("SuspenseList");case 0:case 2:case 15:return e=Oa(e.type,!1),e;case 11:return e=Oa(e.type.render,!1),e;case 1:return e=Oa(e.type,!0),e;default:return""}}function _l(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Un:return"Fragment";case Hn:return"Portal";case gl:return"Profiler";case Hs:return"StrictMode";case yl:return"Suspense";case wl:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case pd:return(e.displayName||"Context")+".Consumer";case dd:return(e._context.displayName||"Context")+".Provider";case Us:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case $s:return t=e.displayName||null,t!==null?t:_l(e.type)||"Memo";case Vt:t=e._payload,e=e._init;try{return _l(e(t))}catch{}}return null}function ev(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return _l(t);case 8:return t===Hs?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function an(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function hd(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function tv(e){var t=hd(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var i=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(a){r=""+a,o.call(this,a)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(a){r=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Li(e){e._valueTracker||(e._valueTracker=tv(e))}function vd(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=hd(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function ko(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Sl(e,t){var n=t.checked;return re({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ec(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=an(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function gd(e,t){t=t.checked,t!=null&&Ds(e,"checked",t,!1)}function kl(e,t){gd(e,t);var n=an(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?xl(e,t.type,n):t.hasOwnProperty("defaultValue")&&xl(e,t.type,an(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function tc(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function xl(e,t,n){(t!=="number"||ko(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Ar=Array.isArray;function tr(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Ai.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Jr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Dr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},nv=["Webkit","ms","Moz","O"];Object.keys(Dr).forEach(function(e){nv.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Dr[t]=Dr[e]})});function Sd(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Dr.hasOwnProperty(e)&&Dr[e]?(""+t).trim():t+"px"}function kd(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,i=Sd(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,i):e[n]=i}}var rv=re({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 Cl(e,t){if(t){if(rv[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(C(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(C(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(C(61))}if(t.style!=null&&typeof t.style!="object")throw Error(C(62))}}function Nl(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Pl=null;function Bs(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var zl=null,nr=null,rr=null;function ic(e){if(e=xi(e)){if(typeof zl!="function")throw Error(C(280));var t=e.stateNode;t&&(t=ia(t),zl(e.stateNode,e.type,t))}}function xd(e){nr?rr?rr.push(e):rr=[e]:nr=e}function Ed(){if(nr){var e=nr,t=rr;if(rr=nr=null,ic(e),t)for(e=0;e>>=0,e===0?32:31-(mv(e)/hv|0)|0}var Ri=64,Ii=4194304;function Rr(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Co(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,i=e.suspendedLanes,o=e.pingedLanes,a=n&268435455;if(a!==0){var l=a&~i;l!==0?r=Rr(l):(o&=a,o!==0&&(r=Rr(o)))}else a=n&~i,a!==0?r=Rr(a):o!==0&&(r=Rr(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&i)&&(i=r&-r,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Si(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-ot(t),e[t]=n}function wv(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Ur),pc=String.fromCharCode(32),mc=!1;function Vd(e,t){switch(e){case"keyup":return Gv.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wd(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var $n=!1;function Kv(e,t){switch(e){case"compositionend":return Wd(t);case"keypress":return t.which!==32?null:(mc=!0,pc);case"textInput":return e=t.data,e===pc&&mc?null:e;default:return null}}function qv(e,t){if($n)return e==="compositionend"||!Xs&&Vd(e,t)?(e=$d(),oo=Qs=Qt=null,$n=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=yc(n)}}function Kd(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Kd(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function qd(){for(var e=window,t=ko();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=ko(e.document)}return t}function Js(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function og(e){var t=qd(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&Kd(n.ownerDocument.documentElement,n)){if(r!==null&&Js(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=n.textContent.length,o=Math.min(r.start,i);r=r.end===void 0?o:Math.min(r.end,i),!e.extend&&o>r&&(i=r,r=o,o=i),i=wc(n,o);var a=wc(n,r);i&&a&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Bn=null,Il=null,Br=null,Fl=!1;function _c(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Fl||Bn==null||Bn!==ko(r)||(r=Bn,"selectionStart"in r&&Js(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Br&&ii(Br,r)||(Br=r,r=zo(Il,"onSelect"),0Yn||(e.current=$l[Yn],$l[Yn]=null,Yn--)}function Q(e,t){Yn++,$l[Yn]=e.current,e.current=t}var ln={},Ce=dn(ln),Re=dn(!1),Cn=ln;function ur(e,t){var n=e.type.contextTypes;if(!n)return ln;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in n)i[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function Ie(e){return e=e.childContextTypes,e!=null}function Oo(){X(Re),X(Ce)}function Nc(e,t,n){if(Ce.current!==ln)throw Error(C(168));Q(Ce,t),Q(Re,n)}function op(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var i in r)if(!(i in t))throw Error(C(108,ev(e)||"Unknown",i));return re({},n,r)}function Lo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||ln,Cn=Ce.current,Q(Ce,e),Q(Re,Re.current),!0}function Pc(e,t,n){var r=e.stateNode;if(!r)throw Error(C(169));n?(e=op(e,t,Cn),r.__reactInternalMemoizedMergedChildContext=e,X(Re),X(Ce),Q(Ce,e)):X(Re),Q(Re,n)}var St=null,oa=!1,Wa=!1;function ap(e){St===null?St=[e]:St.push(e)}function gg(e){oa=!0,ap(e)}function pn(){if(!Wa&&St!==null){Wa=!0;var e=0,t=Y;try{var n=St;for(Y=1;e>=a,i-=a,kt=1<<32-ot(t)+i|n<T?(I=b,b=null):I=b.sibling;var M=h(p,b,m[T],_);if(M===null){b===null&&(b=I);break}e&&b&&M.alternate===null&&t(p,b),d=o(M,d,T),N===null?x=M:N.sibling=M,N=M,b=I}if(T===m.length)return n(p,b),Z&&vn(p,T),x;if(b===null){for(;TT?(I=b,b=null):I=b.sibling;var $=h(p,b,M.value,_);if($===null){b===null&&(b=I);break}e&&b&&$.alternate===null&&t(p,b),d=o($,d,T),N===null?x=$:N.sibling=$,N=$,b=I}if(M.done)return n(p,b),Z&&vn(p,T),x;if(b===null){for(;!M.done;T++,M=m.next())M=f(p,M.value,_),M!==null&&(d=o(M,d,T),N===null?x=M:N.sibling=M,N=M);return Z&&vn(p,T),x}for(b=r(p,b);!M.done;T++,M=m.next())M=y(b,p,T,M.value,_),M!==null&&(e&&M.alternate!==null&&b.delete(M.key===null?T:M.key),d=o(M,d,T),N===null?x=M:N.sibling=M,N=M);return e&&b.forEach(function(ke){return t(p,ke)}),Z&&vn(p,T),x}function k(p,d,m,_){if(typeof m=="object"&&m!==null&&m.type===Un&&m.key===null&&(m=m.props.children),typeof m=="object"&&m!==null){switch(m.$$typeof){case Oi:e:{for(var x=m.key,N=d;N!==null;){if(N.key===x){if(x=m.type,x===Un){if(N.tag===7){n(p,N.sibling),d=i(N,m.props.children),d.return=p,p=d;break e}}else if(N.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===Vt&&Ic(x)===N.type){n(p,N.sibling),d=i(N,m.props),d.ref=Pr(p,N,m),d.return=p,p=d;break e}n(p,N);break}else t(p,N);N=N.sibling}m.type===Un?(d=bn(m.props.children,p.mode,_,m.key),d.return=p,p=d):(_=mo(m.type,m.key,m.props,null,p.mode,_),_.ref=Pr(p,d,m),_.return=p,p=_)}return a(p);case Hn:e:{for(N=m.key;d!==null;){if(d.key===N)if(d.tag===4&&d.stateNode.containerInfo===m.containerInfo&&d.stateNode.implementation===m.implementation){n(p,d.sibling),d=i(d,m.children||[]),d.return=p,p=d;break e}else{n(p,d);break}else t(p,d);d=d.sibling}d=Za(m,p.mode,_),d.return=p,p=d}return a(p);case Vt:return N=m._init,k(p,d,N(m._payload),_)}if(Ar(m))return v(p,d,m,_);if(xr(m))return w(p,d,m,_);$i(p,m)}return typeof m=="string"&&m!==""||typeof m=="number"?(m=""+m,d!==null&&d.tag===6?(n(p,d.sibling),d=i(d,m),d.return=p,p=d):(n(p,d),d=Ja(m,p.mode,_),d.return=p,p=d),a(p)):n(p,d)}return k}var fr=mp(!0),hp=mp(!1),Ei={},yt=dn(Ei),si=dn(Ei),ui=dn(Ei);function _n(e){if(e===Ei)throw Error(C(174));return e}function lu(e,t){switch(Q(ui,t),Q(si,e),Q(yt,Ei),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:bl(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=bl(t,e)}X(yt),Q(yt,t)}function dr(){X(yt),X(si),X(ui)}function vp(e){_n(ui.current);var t=_n(yt.current),n=bl(t,e.type);t!==n&&(Q(si,e),Q(yt,n))}function su(e){si.current===e&&(X(yt),X(si))}var te=dn(0);function jo(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ya=[];function uu(){for(var e=0;en?n:4,e(!0);var r=Ga.transition;Ga.transition={};try{e(!1),t()}finally{Y=n,Ga.transition=r}}function Lp(){return Ze().memoizedState}function Sg(e,t,n){var r=rn(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Ap(e))Rp(t,n);else if(n=cp(e,t,n,r),n!==null){var i=ze();at(n,e,r,i),Ip(n,t,r)}}function kg(e,t,n){var r=rn(e),i={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Ap(e))Rp(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var a=t.lastRenderedState,l=o(a,n);if(i.hasEagerState=!0,i.eagerState=l,lt(l,a)){var s=t.interleaved;s===null?(i.next=i,ou(t)):(i.next=s.next,s.next=i),t.interleaved=i;return}}catch{}finally{}n=cp(e,t,i,r),n!==null&&(i=ze(),at(n,e,r,i),Ip(n,t,r))}}function Ap(e){var t=e.alternate;return e===ne||t!==null&&t===ne}function Rp(e,t){Vr=Do=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ip(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Ws(e,n)}}var Ho={readContext:Je,useCallback:xe,useContext:xe,useEffect:xe,useImperativeHandle:xe,useInsertionEffect:xe,useLayoutEffect:xe,useMemo:xe,useReducer:xe,useRef:xe,useState:xe,useDebugValue:xe,useDeferredValue:xe,useTransition:xe,useMutableSource:xe,useSyncExternalStore:xe,useId:xe,unstable_isNewReconciler:!1},xg={readContext:Je,useCallback:function(e,t){return pt().memoizedState=[e,t===void 0?null:t],e},useContext:Je,useEffect:Mc,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,uo(4194308,4,Np.bind(null,t,e),n)},useLayoutEffect:function(e,t){return uo(4194308,4,e,t)},useInsertionEffect:function(e,t){return uo(4,2,e,t)},useMemo:function(e,t){var n=pt();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=pt();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Sg.bind(null,ne,e),[r.memoizedState,e]},useRef:function(e){var t=pt();return e={current:e},t.memoizedState=e},useState:Fc,useDebugValue:mu,useDeferredValue:function(e){return pt().memoizedState=e},useTransition:function(){var e=Fc(!1),t=e[0];return e=_g.bind(null,e[1]),pt().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=ne,i=pt();if(Z){if(n===void 0)throw Error(C(407));n=n()}else{if(n=t(),ge===null)throw Error(C(349));Pn&30||wp(r,t,n)}i.memoizedState=n;var o={value:n,getSnapshot:t};return i.queue=o,Mc(Sp.bind(null,r,o,e),[e]),r.flags|=2048,di(9,_p.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=pt(),t=ge.identifierPrefix;if(Z){var n=xt,r=kt;n=(r&~(1<<32-ot(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=ci++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=a.createElement(n,{is:r.is}):(e=a.createElement(n),n==="select"&&(a=e,r.multiple?a.multiple=!0:r.size&&(a.size=r.size))):e=a.createElementNS(e,n),e[mt]=t,e[li]=r,Vp(e,t,!1,!1),t.stateNode=e;e:{switch(a=Nl(n,r),n){case"dialog":K("cancel",e),K("close",e),i=r;break;case"iframe":case"object":case"embed":K("load",e),i=r;break;case"video":case"audio":for(i=0;imr&&(t.flags|=128,r=!0,zr(o,!1),t.lanes=4194304)}else{if(!r)if(e=jo(a),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),zr(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!Z)return Ee(t),null}else 2*le()-o.renderingStartTime>mr&&n!==1073741824&&(t.flags|=128,r=!0,zr(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(n=o.last,n!==null?n.sibling=a:t.child=a,o.last=a)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=le(),t.sibling=null,n=te.current,Q(te,r?n&1|2:n&1),t):(Ee(t),null);case 22:case 23:return _u(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Me&1073741824&&(Ee(t),t.subtreeFlags&6&&(t.flags|=8192)):Ee(t),null;case 24:return null;case 25:return null}throw Error(C(156,t.tag))}function Og(e,t){switch(eu(t),t.tag){case 1:return Ie(t.type)&&Oo(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return dr(),X(Re),X(Ce),uu(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return su(t),null;case 13:if(X(te),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(C(340));cr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return X(te),null;case 4:return dr(),null;case 10:return iu(t.type._context),null;case 22:case 23:return _u(),null;case 24:return null;default:return null}}var Vi=!1,be=!1,Lg=typeof WeakSet=="function"?WeakSet:Set,L=null;function qn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){ie(e,t,r)}else n.current=null}function es(e,t,n){try{n()}catch(r){ie(e,t,r)}}var Yc=!1;function Ag(e,t){if(Ml=No,e=qd(),Js(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var a=0,l=-1,s=-1,u=0,c=0,f=e,h=null;t:for(;;){for(var y;f!==n||i!==0&&f.nodeType!==3||(l=a+i),f!==o||r!==0&&f.nodeType!==3||(s=a+r),f.nodeType===3&&(a+=f.nodeValue.length),(y=f.firstChild)!==null;)h=f,f=y;for(;;){if(f===e)break t;if(h===n&&++u===i&&(l=a),h===o&&++c===r&&(s=a),(y=f.nextSibling)!==null)break;f=h,h=f.parentNode}f=y}n=l===-1||s===-1?null:{start:l,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(jl={focusedElem:e,selectionRange:n},No=!1,L=t;L!==null;)if(t=L,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,L=e;else for(;L!==null;){t=L;try{var v=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var w=v.memoizedProps,k=v.memoizedState,p=t.stateNode,d=p.getSnapshotBeforeUpdate(t.elementType===t.type?w:tt(t.type,w),k);p.__reactInternalSnapshotBeforeUpdate=d}break;case 3:var m=t.stateNode.containerInfo;m.nodeType===1?m.textContent="":m.nodeType===9&&m.documentElement&&m.removeChild(m.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(C(163))}}catch(_){ie(t,t.return,_)}if(e=t.sibling,e!==null){e.return=t.return,L=e;break}L=t.return}return v=Yc,Yc=!1,v}function Wr(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var i=r=r.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&es(t,n,o)}i=i.next}while(i!==r)}}function sa(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ts(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Gp(e){var t=e.alternate;t!==null&&(e.alternate=null,Gp(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[mt],delete t[li],delete t[Ul],delete t[hg],delete t[vg])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Qp(e){return e.tag===5||e.tag===3||e.tag===4}function Gc(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Qp(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function ns(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=To));else if(r!==4&&(e=e.child,e!==null))for(ns(e,t,n),e=e.sibling;e!==null;)ns(e,t,n),e=e.sibling}function rs(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(rs(e,t,n),e=e.sibling;e!==null;)rs(e,t,n),e=e.sibling}var we=null,nt=!1;function Dt(e,t,n){for(n=n.child;n!==null;)Kp(e,t,n),n=n.sibling}function Kp(e,t,n){if(gt&&typeof gt.onCommitFiberUnmount=="function")try{gt.onCommitFiberUnmount(ea,n)}catch{}switch(n.tag){case 5:be||qn(n,t);case 6:var r=we,i=nt;we=null,Dt(e,t,n),we=r,nt=i,we!==null&&(nt?(e=we,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):we.removeChild(n.stateNode));break;case 18:we!==null&&(nt?(e=we,n=n.stateNode,e.nodeType===8?Va(e.parentNode,n):e.nodeType===1&&Va(e,n),ni(e)):Va(we,n.stateNode));break;case 4:r=we,i=nt,we=n.stateNode.containerInfo,nt=!0,Dt(e,t,n),we=r,nt=i;break;case 0:case 11:case 14:case 15:if(!be&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){i=r=r.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&es(n,t,a),i=i.next}while(i!==r)}Dt(e,t,n);break;case 1:if(!be&&(qn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(l){ie(n,t,l)}Dt(e,t,n);break;case 21:Dt(e,t,n);break;case 22:n.mode&1?(be=(r=be)||n.memoizedState!==null,Dt(e,t,n),be=r):Dt(e,t,n);break;default:Dt(e,t,n)}}function Qc(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Lg),t.forEach(function(r){var i=$g.bind(null,e,r);n.has(r)||(n.add(r),r.then(i,i))})}}function et(e,t){var n=t.deletions;if(n!==null)for(var r=0;ri&&(i=a),r&=~o}if(r=i,r=le()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Ig(r/1960))-r,10e?16:e,Kt===null)var r=!1;else{if(e=Kt,Kt=null,Bo=0,W&6)throw Error(C(331));var i=W;for(W|=4,L=e.current;L!==null;){var o=L,a=o.child;if(L.flags&16){var l=o.deletions;if(l!==null){for(var s=0;sle()-yu?En(e,0):gu|=n),Fe(e,t)}function rm(e,t){t===0&&(e.mode&1?(t=Ii,Ii<<=1,!(Ii&130023424)&&(Ii=4194304)):t=1);var n=ze();e=zt(e,t),e!==null&&(Si(e,t,n),Fe(e,n))}function Ug(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),rm(e,n)}function $g(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(C(314))}r!==null&&r.delete(t),rm(e,n)}var im;im=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Re.current)Ae=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Ae=!1,zg(e,t,n);Ae=!!(e.flags&131072)}else Ae=!1,Z&&t.flags&1048576&&lp(t,Ro,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;co(e,t),e=t.pendingProps;var i=ur(t,Ce.current);or(t,n),i=fu(null,t,r,e,i,n);var o=du();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ie(r)?(o=!0,Lo(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,au(t),i.updater=aa,t.stateNode=i,i._reactInternals=t,Gl(t,r,e,n),t=ql(null,t,r,!0,o,n)):(t.tag=0,Z&&o&&Zs(t),Pe(null,t,i,n),t=t.child),t;case 16:r=t.elementType;e:{switch(co(e,t),e=t.pendingProps,i=r._init,r=i(r._payload),t.type=r,i=t.tag=Vg(r),e=tt(r,e),i){case 0:t=Kl(null,t,r,e,n);break e;case 1:t=Bc(null,t,r,e,n);break e;case 11:t=Uc(null,t,r,e,n);break e;case 14:t=$c(null,t,r,tt(r.type,e),n);break e}throw Error(C(306,r,""))}return t;case 0:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:tt(r,i),Kl(e,t,r,i,n);case 1:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:tt(r,i),Bc(e,t,r,i,n);case 3:e:{if(Up(t),e===null)throw Error(C(387));r=t.pendingProps,o=t.memoizedState,i=o.element,fp(e,t),Mo(t,r,null,n);var a=t.memoizedState;if(r=a.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=pr(Error(C(423)),t),t=Vc(e,t,r,n,i);break e}else if(r!==i){i=pr(Error(C(424)),t),t=Vc(e,t,r,n,i);break e}else for(je=en(t.stateNode.containerInfo.firstChild),De=t,Z=!0,rt=null,n=hp(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(cr(),r===i){t=Tt(e,t,n);break e}Pe(e,t,r,n)}t=t.child}return t;case 5:return vp(t),e===null&&Vl(t),r=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,a=i.children,Dl(r,i)?a=null:o!==null&&Dl(r,o)&&(t.flags|=32),Hp(e,t),Pe(e,t,a,n),t.child;case 6:return e===null&&Vl(t),null;case 13:return $p(e,t,n);case 4:return lu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=fr(t,null,r,n):Pe(e,t,r,n),t.child;case 11:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:tt(r,i),Uc(e,t,r,i,n);case 7:return Pe(e,t,t.pendingProps,n),t.child;case 8:return Pe(e,t,t.pendingProps.children,n),t.child;case 12:return Pe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,i=t.pendingProps,o=t.memoizedProps,a=i.value,Q(Io,r._currentValue),r._currentValue=a,o!==null)if(lt(o.value,a)){if(o.children===i.children&&!Re.current){t=Tt(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var l=o.dependencies;if(l!==null){a=o.child;for(var s=l.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=Et(-1,n&-n),s.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var c=u.pending;c===null?s.next=s:(s.next=c.next,c.next=s),u.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),Wl(o.return,n,t),l.lanes|=n;break}s=s.next}}else if(o.tag===10)a=o.type===t.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(C(341));a.lanes|=n,l=a.alternate,l!==null&&(l.lanes|=n),Wl(a,n,t),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===t){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}Pe(e,t,i.children,n),t=t.child}return t;case 9:return i=t.type,r=t.pendingProps.children,or(t,n),i=Je(i),r=r(i),t.flags|=1,Pe(e,t,r,n),t.child;case 14:return r=t.type,i=tt(r,t.pendingProps),i=tt(r.type,i),$c(e,t,r,i,n);case 15:return jp(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,i=t.pendingProps,i=t.elementType===r?i:tt(r,i),co(e,t),t.tag=1,Ie(r)?(e=!0,Lo(t)):e=!1,or(t,n),pp(t,r,i),Gl(t,r,i,n),ql(null,t,r,!0,e,n);case 19:return Bp(e,t,n);case 22:return Dp(e,t,n)}throw Error(C(156,t.tag))};function om(e,t){return Od(e,t)}function Bg(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ke(e,t,n,r){return new Bg(e,t,n,r)}function ku(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Vg(e){if(typeof e=="function")return ku(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Us)return 11;if(e===$s)return 14}return 2}function on(e,t){var n=e.alternate;return n===null?(n=Ke(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function mo(e,t,n,r,i,o){var a=2;if(r=e,typeof e=="function")ku(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Un:return bn(n.children,i,o,t);case Hs:a=8,i|=8;break;case gl:return e=Ke(12,n,t,i|2),e.elementType=gl,e.lanes=o,e;case yl:return e=Ke(13,n,t,i),e.elementType=yl,e.lanes=o,e;case wl:return e=Ke(19,n,t,i),e.elementType=wl,e.lanes=o,e;case md:return ca(n,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case dd:a=10;break e;case pd:a=9;break e;case Us:a=11;break e;case $s:a=14;break e;case Vt:a=16,r=null;break e}throw Error(C(130,e==null?e:typeof e,""))}return t=Ke(a,n,t,i),t.elementType=e,t.type=r,t.lanes=o,t}function bn(e,t,n,r){return e=Ke(7,e,r,t),e.lanes=n,e}function ca(e,t,n,r){return e=Ke(22,e,r,t),e.elementType=md,e.lanes=n,e.stateNode={isHidden:!1},e}function Ja(e,t,n){return e=Ke(6,e,null,t),e.lanes=n,e}function Za(e,t,n){return t=Ke(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Wg(e,t,n,r,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Aa(0),this.expirationTimes=Aa(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Aa(0),this.identifierPrefix=r,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function xu(e,t,n,r,i,o,a,l,s){return e=new Wg(e,t,n,l,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ke(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},au(o),e}function Yg(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(um)}catch(e){console.error(e)}}um(),ld.exports=Ue;var Xg=ld.exports,nf=Xg;hl.createRoot=nf.createRoot,hl.hydrateRoot=nf.hydrateRoot;function cm(e,t){return function(){return e.apply(t,arguments)}}const{toString:Jg}=Object.prototype,{getPrototypeOf:Nu}=Object,ha=(e=>t=>{const n=Jg.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),wt=e=>(e=e.toLowerCase(),t=>ha(t)===e),va=e=>t=>typeof t===e,{isArray:Sr}=Array,mi=va("undefined");function Zg(e){return e!==null&&!mi(e)&&e.constructor!==null&&!mi(e.constructor)&&Xe(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const fm=wt("ArrayBuffer");function e0(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&fm(e.buffer),t}const t0=va("string"),Xe=va("function"),dm=va("number"),ga=e=>e!==null&&typeof e=="object",n0=e=>e===!0||e===!1,ho=e=>{if(ha(e)!=="object")return!1;const t=Nu(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},r0=wt("Date"),i0=wt("File"),o0=wt("Blob"),a0=wt("FileList"),l0=e=>ga(e)&&Xe(e.pipe),s0=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||Xe(e.append)&&((t=ha(e))==="formdata"||t==="object"&&Xe(e.toString)&&e.toString()==="[object FormData]"))},u0=wt("URLSearchParams"),c0=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function bi(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let r,i;if(typeof e!="object"&&(e=[e]),Sr(e))for(r=0,i=e.length;r0;)if(i=n[r],t===i.toLowerCase())return i;return null}const mm=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),hm=e=>!mi(e)&&e!==mm;function ss(){const{caseless:e}=hm(this)&&this||{},t={},n=(r,i)=>{const o=e&&pm(t,i)||i;ho(t[o])&&ho(r)?t[o]=ss(t[o],r):ho(r)?t[o]=ss({},r):Sr(r)?t[o]=r.slice():t[o]=r};for(let r=0,i=arguments.length;r(bi(t,(i,o)=>{n&&Xe(i)?e[o]=cm(i,n):e[o]=i},{allOwnKeys:r}),e),d0=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),p0=(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},m0=(e,t,n,r)=>{let i,o,a;const l={};if(t=t||{},e==null)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)a=i[o],(!r||r(a,e,t))&&!l[a]&&(t[a]=e[a],l[a]=!0);e=n!==!1&&Nu(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},h0=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return r!==-1&&r===n},v0=e=>{if(!e)return null;if(Sr(e))return e;let t=e.length;if(!dm(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},g0=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&Nu(Uint8Array)),y0=(e,t)=>{const r=(e&&e[Symbol.iterator]).call(e);let i;for(;(i=r.next())&&!i.done;){const o=i.value;t.call(e,o[0],o[1])}},w0=(e,t)=>{let n;const r=[];for(;(n=e.exec(t))!==null;)r.push(n);return r},_0=wt("HTMLFormElement"),S0=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,r,i){return r.toUpperCase()+i}),rf=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),k0=wt("RegExp"),vm=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};bi(n,(i,o)=>{t(i,o,e)!==!1&&(r[o]=i)}),Object.defineProperties(e,r)},x0=e=>{vm(e,(t,n)=>{if(Xe(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const r=e[n];if(Xe(r)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},E0=(e,t)=>{const n={},r=i=>{i.forEach(o=>{n[o]=!0})};return Sr(e)?r(e):r(String(e).split(t)),n},b0=()=>{},C0=(e,t)=>(e=+e,Number.isFinite(e)?e:t),el="abcdefghijklmnopqrstuvwxyz",of="0123456789",gm={DIGIT:of,ALPHA:el,ALPHA_DIGIT:el+el.toUpperCase()+of},N0=(e=16,t=gm.ALPHA_DIGIT)=>{let n="";const{length:r}=t;for(;e--;)n+=t[Math.random()*r|0];return n};function P0(e){return!!(e&&Xe(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const z0=e=>{const t=new Array(10),n=(r,i)=>{if(ga(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[i]=r;const o=Sr(r)?[]:{};return bi(r,(a,l)=>{const s=n(a,i+1);!mi(s)&&(o[l]=s)}),t[i]=void 0,o}}return r};return n(e,0)},T0=wt("AsyncFunction"),O0=e=>e&&(ga(e)||Xe(e))&&Xe(e.then)&&Xe(e.catch),S={isArray:Sr,isArrayBuffer:fm,isBuffer:Zg,isFormData:s0,isArrayBufferView:e0,isString:t0,isNumber:dm,isBoolean:n0,isObject:ga,isPlainObject:ho,isUndefined:mi,isDate:r0,isFile:i0,isBlob:o0,isRegExp:k0,isFunction:Xe,isStream:l0,isURLSearchParams:u0,isTypedArray:g0,isFileList:a0,forEach:bi,merge:ss,extend:f0,trim:c0,stripBOM:d0,inherits:p0,toFlatObject:m0,kindOf:ha,kindOfTest:wt,endsWith:h0,toArray:v0,forEachEntry:y0,matchAll:w0,isHTMLForm:_0,hasOwnProperty:rf,hasOwnProp:rf,reduceDescriptors:vm,freezeMethods:x0,toObjectSet:E0,toCamelCase:S0,noop:b0,toFiniteNumber:C0,findKey:pm,global:mm,isContextDefined:hm,ALPHABET:gm,generateString:N0,isSpecCompliantForm:P0,toJSONObject:z0,isAsyncFn:T0,isThenable:O0};function V(e,t,n,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),i&&(this.response=i)}S.inherits(V,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:S.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const ym=V.prototype,wm={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{wm[e]={value:e}});Object.defineProperties(V,wm);Object.defineProperty(ym,"isAxiosError",{value:!0});V.from=(e,t,n,r,i,o)=>{const a=Object.create(ym);return S.toFlatObject(e,a,function(s){return s!==Error.prototype},l=>l!=="isAxiosError"),V.call(a,e.message,t,n,r,i),a.cause=e,a.name=e.name,o&&Object.assign(a,o),a};const L0=null;function us(e){return S.isPlainObject(e)||S.isArray(e)}function _m(e){return S.endsWith(e,"[]")?e.slice(0,-2):e}function af(e,t,n){return e?e.concat(t).map(function(i,o){return i=_m(i),!n&&o?"["+i+"]":i}).join(n?".":""):t}function A0(e){return S.isArray(e)&&!e.some(us)}const R0=S.toFlatObject(S,{},null,function(t){return/^is[A-Z]/.test(t)});function ya(e,t,n){if(!S.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=S.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(w,k){return!S.isUndefined(k[w])});const r=n.metaTokens,i=n.visitor||c,o=n.dots,a=n.indexes,s=(n.Blob||typeof Blob<"u"&&Blob)&&S.isSpecCompliantForm(t);if(!S.isFunction(i))throw new TypeError("visitor must be a function");function u(v){if(v===null)return"";if(S.isDate(v))return v.toISOString();if(!s&&S.isBlob(v))throw new V("Blob is not supported. Use a Buffer instead.");return S.isArrayBuffer(v)||S.isTypedArray(v)?s&&typeof Blob=="function"?new Blob([v]):Buffer.from(v):v}function c(v,w,k){let p=v;if(v&&!k&&typeof v=="object"){if(S.endsWith(w,"{}"))w=r?w:w.slice(0,-2),v=JSON.stringify(v);else if(S.isArray(v)&&A0(v)||(S.isFileList(v)||S.endsWith(w,"[]"))&&(p=S.toArray(v)))return w=_m(w),p.forEach(function(m,_){!(S.isUndefined(m)||m===null)&&t.append(a===!0?af([w],_,o):a===null?w:w+"[]",u(m))}),!1}return us(v)?!0:(t.append(af(k,w,o),u(v)),!1)}const f=[],h=Object.assign(R0,{defaultVisitor:c,convertValue:u,isVisitable:us});function y(v,w){if(!S.isUndefined(v)){if(f.indexOf(v)!==-1)throw Error("Circular reference detected in "+w.join("."));f.push(v),S.forEach(v,function(p,d){(!(S.isUndefined(p)||p===null)&&i.call(t,p,S.isString(d)?d.trim():d,w,h))===!0&&y(p,w?w.concat(d):[d])}),f.pop()}}if(!S.isObject(e))throw new TypeError("data must be an object");return y(e),t}function lf(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(r){return t[r]})}function Pu(e,t){this._pairs=[],e&&ya(e,this,t)}const Sm=Pu.prototype;Sm.append=function(t,n){this._pairs.push([t,n])};Sm.toString=function(t){const n=t?function(r){return t.call(this,r,lf)}:lf;return this._pairs.map(function(i){return n(i[0])+"="+n(i[1])},"").join("&")};function I0(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function km(e,t,n){if(!t)return e;const r=n&&n.encode||I0,i=n&&n.serialize;let o;if(i?o=i(t,n):o=S.isURLSearchParams(t)?t.toString():new Pu(t,n).toString(r),o){const a=e.indexOf("#");a!==-1&&(e=e.slice(0,a)),e+=(e.indexOf("?")===-1?"?":"&")+o}return e}class F0{constructor(){this.handlers=[]}use(t,n,r){return this.handlers.push({fulfilled:t,rejected:n,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){S.forEach(this.handlers,function(r){r!==null&&t(r)})}}const sf=F0,xm={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},M0=typeof URLSearchParams<"u"?URLSearchParams:Pu,j0=typeof FormData<"u"?FormData:null,D0=typeof Blob<"u"?Blob:null,H0=(()=>{let e;return typeof navigator<"u"&&((e=navigator.product)==="ReactNative"||e==="NativeScript"||e==="NS")?!1:typeof window<"u"&&typeof document<"u"})(),U0=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),ht={isBrowser:!0,classes:{URLSearchParams:M0,FormData:j0,Blob:D0},isStandardBrowserEnv:H0,isStandardBrowserWebWorkerEnv:U0,protocols:["http","https","file","blob","url","data"]};function $0(e,t){return ya(e,new ht.classes.URLSearchParams,Object.assign({visitor:function(n,r,i,o){return ht.isNode&&S.isBuffer(n)?(this.append(r,n.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}function B0(e){return S.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function V0(e){const t={},n=Object.keys(e);let r;const i=n.length;let o;for(r=0;r=n.length;return a=!a&&S.isArray(i)?i.length:a,s?(S.hasOwnProp(i,a)?i[a]=[i[a],r]:i[a]=r,!l):((!i[a]||!S.isObject(i[a]))&&(i[a]=[]),t(n,r,i[a],o)&&S.isArray(i[a])&&(i[a]=V0(i[a])),!l)}if(S.isFormData(e)&&S.isFunction(e.entries)){const n={};return S.forEachEntry(e,(r,i)=>{t(B0(r),i,n,0)}),n}return null}const W0={"Content-Type":void 0};function Y0(e,t,n){if(S.isString(e))try{return(t||JSON.parse)(e),S.trim(e)}catch(r){if(r.name!=="SyntaxError")throw r}return(n||JSON.stringify)(e)}const wa={transitional:xm,adapter:["xhr","http"],transformRequest:[function(t,n){const r=n.getContentType()||"",i=r.indexOf("application/json")>-1,o=S.isObject(t);if(o&&S.isHTMLForm(t)&&(t=new FormData(t)),S.isFormData(t))return i&&i?JSON.stringify(Em(t)):t;if(S.isArrayBuffer(t)||S.isBuffer(t)||S.isStream(t)||S.isFile(t)||S.isBlob(t))return t;if(S.isArrayBufferView(t))return t.buffer;if(S.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return $0(t,this.formSerializer).toString();if((l=S.isFileList(t))||r.indexOf("multipart/form-data")>-1){const s=this.env&&this.env.FormData;return ya(l?{"files[]":t}:t,s&&new s,this.formSerializer)}}return o||i?(n.setContentType("application/json",!1),Y0(t)):t}],transformResponse:[function(t){const n=this.transitional||wa.transitional,r=n&&n.forcedJSONParsing,i=this.responseType==="json";if(t&&S.isString(t)&&(r&&!this.responseType||i)){const a=!(n&&n.silentJSONParsing)&&i;try{return JSON.parse(t)}catch(l){if(a)throw l.name==="SyntaxError"?V.from(l,V.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ht.classes.FormData,Blob:ht.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};S.forEach(["delete","get","head"],function(t){wa.headers[t]={}});S.forEach(["post","put","patch"],function(t){wa.headers[t]=S.merge(W0)});const zu=wa,G0=S.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Q0=e=>{const t={};let n,r,i;return e&&e.split(` +`).forEach(function(a){i=a.indexOf(":"),n=a.substring(0,i).trim().toLowerCase(),r=a.substring(i+1).trim(),!(!n||t[n]&&G0[n])&&(n==="set-cookie"?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)}),t},uf=Symbol("internals");function Or(e){return e&&String(e).trim().toLowerCase()}function vo(e){return e===!1||e==null?e:S.isArray(e)?e.map(vo):String(e)}function K0(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}const q0=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function tl(e,t,n,r,i){if(S.isFunction(r))return r.call(this,t,n);if(i&&(t=n),!!S.isString(t)){if(S.isString(r))return t.indexOf(r)!==-1;if(S.isRegExp(r))return r.test(t)}}function X0(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,r)=>n.toUpperCase()+r)}function J0(e,t){const n=S.toCamelCase(" "+t);["get","set","has"].forEach(r=>{Object.defineProperty(e,r+n,{value:function(i,o,a){return this[r].call(this,t,i,o,a)},configurable:!0})})}class _a{constructor(t){t&&this.set(t)}set(t,n,r){const i=this;function o(l,s,u){const c=Or(s);if(!c)throw new Error("header name must be a non-empty string");const f=S.findKey(i,c);(!f||i[f]===void 0||u===!0||u===void 0&&i[f]!==!1)&&(i[f||s]=vo(l))}const a=(l,s)=>S.forEach(l,(u,c)=>o(u,c,s));return S.isPlainObject(t)||t instanceof this.constructor?a(t,n):S.isString(t)&&(t=t.trim())&&!q0(t)?a(Q0(t),n):t!=null&&o(n,t,r),this}get(t,n){if(t=Or(t),t){const r=S.findKey(this,t);if(r){const i=this[r];if(!n)return i;if(n===!0)return K0(i);if(S.isFunction(n))return n.call(this,i,r);if(S.isRegExp(n))return n.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Or(t),t){const r=S.findKey(this,t);return!!(r&&this[r]!==void 0&&(!n||tl(this,this[r],r,n)))}return!1}delete(t,n){const r=this;let i=!1;function o(a){if(a=Or(a),a){const l=S.findKey(r,a);l&&(!n||tl(r,r[l],l,n))&&(delete r[l],i=!0)}}return S.isArray(t)?t.forEach(o):o(t),i}clear(t){const n=Object.keys(this);let r=n.length,i=!1;for(;r--;){const o=n[r];(!t||tl(this,this[o],o,t,!0))&&(delete this[o],i=!0)}return i}normalize(t){const n=this,r={};return S.forEach(this,(i,o)=>{const a=S.findKey(r,o);if(a){n[a]=vo(i),delete n[o];return}const l=t?X0(o):String(o).trim();l!==o&&delete n[o],n[l]=vo(i),r[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return S.forEach(this,(r,i)=>{r!=null&&r!==!1&&(n[i]=t&&S.isArray(r)?r.join(", "):r)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(i=>r.set(i)),r}static accessor(t){const r=(this[uf]=this[uf]={accessors:{}}).accessors,i=this.prototype;function o(a){const l=Or(a);r[l]||(J0(i,a),r[l]=!0)}return S.isArray(t)?t.forEach(o):o(t),this}}_a.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);S.freezeMethods(_a.prototype);S.freezeMethods(_a);const bt=_a;function nl(e,t){const n=this||zu,r=t||n,i=bt.from(r.headers);let o=r.data;return S.forEach(e,function(l){o=l.call(n,o,i.normalize(),t?t.status:void 0)}),i.normalize(),o}function bm(e){return!!(e&&e.__CANCEL__)}function Ci(e,t,n){V.call(this,e??"canceled",V.ERR_CANCELED,t,n),this.name="CanceledError"}S.inherits(Ci,V,{__CANCEL__:!0});function Z0(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new V("Request failed with status code "+n.status,[V.ERR_BAD_REQUEST,V.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}const e1=ht.isStandardBrowserEnv?function(){return{write:function(n,r,i,o,a,l){const s=[];s.push(n+"="+encodeURIComponent(r)),S.isNumber(i)&&s.push("expires="+new Date(i).toGMTString()),S.isString(o)&&s.push("path="+o),S.isString(a)&&s.push("domain="+a),l===!0&&s.push("secure"),document.cookie=s.join("; ")},read:function(n){const r=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return r?decodeURIComponent(r[3]):null},remove:function(n){this.write(n,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function t1(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function n1(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}function Cm(e,t){return e&&!t1(t)?n1(e,t):t}const r1=ht.isStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");let r;function i(o){let a=o;return t&&(n.setAttribute("href",a),a=n.href),n.setAttribute("href",a),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:n.pathname.charAt(0)==="/"?n.pathname:"/"+n.pathname}}return r=i(window.location.href),function(a){const l=S.isString(a)?i(a):a;return l.protocol===r.protocol&&l.host===r.host}}():function(){return function(){return!0}}();function i1(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function o1(e,t){e=e||10;const n=new Array(e),r=new Array(e);let i=0,o=0,a;return t=t!==void 0?t:1e3,function(s){const u=Date.now(),c=r[o];a||(a=u),n[i]=s,r[i]=u;let f=o,h=0;for(;f!==i;)h+=n[f++],f=f%e;if(i=(i+1)%e,i===o&&(o=(o+1)%e),u-a{const o=i.loaded,a=i.lengthComputable?i.total:void 0,l=o-n,s=r(l),u=o<=a;n=o;const c={loaded:o,total:a,progress:a?o/a:void 0,bytes:l,rate:s||void 0,estimated:s&&a&&u?(a-o)/s:void 0,event:i};c[t?"download":"upload"]=!0,e(c)}}const a1=typeof XMLHttpRequest<"u",l1=a1&&function(e){return new Promise(function(n,r){let i=e.data;const o=bt.from(e.headers).normalize(),a=e.responseType;let l;function s(){e.cancelToken&&e.cancelToken.unsubscribe(l),e.signal&&e.signal.removeEventListener("abort",l)}S.isFormData(i)&&(ht.isStandardBrowserEnv||ht.isStandardBrowserWebWorkerEnv?o.setContentType(!1):o.setContentType("multipart/form-data;",!1));let u=new XMLHttpRequest;if(e.auth){const y=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";o.set("Authorization","Basic "+btoa(y+":"+v))}const c=Cm(e.baseURL,e.url);u.open(e.method.toUpperCase(),km(c,e.params,e.paramsSerializer),!0),u.timeout=e.timeout;function f(){if(!u)return;const y=bt.from("getAllResponseHeaders"in u&&u.getAllResponseHeaders()),w={data:!a||a==="text"||a==="json"?u.responseText:u.response,status:u.status,statusText:u.statusText,headers:y,config:e,request:u};Z0(function(p){n(p),s()},function(p){r(p),s()},w),u=null}if("onloadend"in u?u.onloadend=f:u.onreadystatechange=function(){!u||u.readyState!==4||u.status===0&&!(u.responseURL&&u.responseURL.indexOf("file:")===0)||setTimeout(f)},u.onabort=function(){u&&(r(new V("Request aborted",V.ECONNABORTED,e,u)),u=null)},u.onerror=function(){r(new V("Network Error",V.ERR_NETWORK,e,u)),u=null},u.ontimeout=function(){let v=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const w=e.transitional||xm;e.timeoutErrorMessage&&(v=e.timeoutErrorMessage),r(new V(v,w.clarifyTimeoutError?V.ETIMEDOUT:V.ECONNABORTED,e,u)),u=null},ht.isStandardBrowserEnv){const y=(e.withCredentials||r1(c))&&e.xsrfCookieName&&e1.read(e.xsrfCookieName);y&&o.set(e.xsrfHeaderName,y)}i===void 0&&o.setContentType(null),"setRequestHeader"in u&&S.forEach(o.toJSON(),function(v,w){u.setRequestHeader(w,v)}),S.isUndefined(e.withCredentials)||(u.withCredentials=!!e.withCredentials),a&&a!=="json"&&(u.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&u.addEventListener("progress",cf(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&u.upload&&u.upload.addEventListener("progress",cf(e.onUploadProgress)),(e.cancelToken||e.signal)&&(l=y=>{u&&(r(!y||y.type?new Ci(null,e,u):y),u.abort(),u=null)},e.cancelToken&&e.cancelToken.subscribe(l),e.signal&&(e.signal.aborted?l():e.signal.addEventListener("abort",l)));const h=i1(c);if(h&&ht.protocols.indexOf(h)===-1){r(new V("Unsupported protocol "+h+":",V.ERR_BAD_REQUEST,e));return}u.send(i||null)})},go={http:L0,xhr:l1};S.forEach(go,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const s1={getAdapter:e=>{e=S.isArray(e)?e:[e];const{length:t}=e;let n,r;for(let i=0;ie instanceof bt?e.toJSON():e;function hr(e,t){t=t||{};const n={};function r(u,c,f){return S.isPlainObject(u)&&S.isPlainObject(c)?S.merge.call({caseless:f},u,c):S.isPlainObject(c)?S.merge({},c):S.isArray(c)?c.slice():c}function i(u,c,f){if(S.isUndefined(c)){if(!S.isUndefined(u))return r(void 0,u,f)}else return r(u,c,f)}function o(u,c){if(!S.isUndefined(c))return r(void 0,c)}function a(u,c){if(S.isUndefined(c)){if(!S.isUndefined(u))return r(void 0,u)}else return r(void 0,c)}function l(u,c,f){if(f in t)return r(u,c);if(f in e)return r(void 0,u)}const s={url:o,method:o,data:o,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:l,headers:(u,c)=>i(df(u),df(c),!0)};return S.forEach(Object.keys(Object.assign({},e,t)),function(c){const f=s[c]||i,h=f(e[c],t[c],c);S.isUndefined(h)&&f!==l||(n[c]=h)}),n}const Nm="1.4.0",Tu={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Tu[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const pf={};Tu.transitional=function(t,n,r){function i(o,a){return"[Axios v"+Nm+"] Transitional option '"+o+"'"+a+(r?". "+r:"")}return(o,a,l)=>{if(t===!1)throw new V(i(a," has been removed"+(n?" in "+n:"")),V.ERR_DEPRECATED);return n&&!pf[a]&&(pf[a]=!0,console.warn(i(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(o,a,l):!0}};function u1(e,t,n){if(typeof e!="object")throw new V("options must be an object",V.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let i=r.length;for(;i-- >0;){const o=r[i],a=t[o];if(a){const l=e[o],s=l===void 0||a(l,o,e);if(s!==!0)throw new V("option "+o+" must be "+s,V.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new V("Unknown option "+o,V.ERR_BAD_OPTION)}}const cs={assertOptions:u1,validators:Tu},Ht=cs.validators;class Yo{constructor(t){this.defaults=t,this.interceptors={request:new sf,response:new sf}}request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=hr(this.defaults,n);const{transitional:r,paramsSerializer:i,headers:o}=n;r!==void 0&&cs.assertOptions(r,{silentJSONParsing:Ht.transitional(Ht.boolean),forcedJSONParsing:Ht.transitional(Ht.boolean),clarifyTimeoutError:Ht.transitional(Ht.boolean)},!1),i!=null&&(S.isFunction(i)?n.paramsSerializer={serialize:i}:cs.assertOptions(i,{encode:Ht.function,serialize:Ht.function},!0)),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a;a=o&&S.merge(o.common,o[n.method]),a&&S.forEach(["delete","get","head","post","put","patch","common"],v=>{delete o[v]}),n.headers=bt.concat(a,o);const l=[];let s=!0;this.interceptors.request.forEach(function(w){typeof w.runWhen=="function"&&w.runWhen(n)===!1||(s=s&&w.synchronous,l.unshift(w.fulfilled,w.rejected))});const u=[];this.interceptors.response.forEach(function(w){u.push(w.fulfilled,w.rejected)});let c,f=0,h;if(!s){const v=[ff.bind(this),void 0];for(v.unshift.apply(v,l),v.push.apply(v,u),h=v.length,c=Promise.resolve(n);f{if(!r._listeners)return;let o=r._listeners.length;for(;o-- >0;)r._listeners[o](i);r._listeners=null}),this.promise.then=i=>{let o;const a=new Promise(l=>{r.subscribe(l),o=l}).then(i);return a.cancel=function(){r.unsubscribe(o)},a},t(function(o,a,l){r.reason||(r.reason=new Ci(o,a,l),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}static source(){let t;return{token:new Ou(function(i){t=i}),cancel:t}}}const c1=Ou;function f1(e){return function(n){return e.apply(null,n)}}function d1(e){return S.isObject(e)&&e.isAxiosError===!0}const fs={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(fs).forEach(([e,t])=>{fs[t]=e});const p1=fs;function Pm(e){const t=new yo(e),n=cm(yo.prototype.request,t);return S.extend(n,yo.prototype,t,{allOwnKeys:!0}),S.extend(n,t,null,{allOwnKeys:!0}),n.create=function(i){return Pm(hr(e,i))},n}const pe=Pm(zu);pe.Axios=yo;pe.CanceledError=Ci;pe.CancelToken=c1;pe.isCancel=bm;pe.VERSION=Nm;pe.toFormData=ya;pe.AxiosError=V;pe.Cancel=pe.CanceledError;pe.all=function(t){return Promise.all(t)};pe.spread=f1;pe.isAxiosError=d1;pe.mergeConfig=hr;pe.AxiosHeaders=bt;pe.formToJSON=e=>Em(S.isHTMLForm(e)?new FormData(e):e);pe.HttpStatusCode=p1;pe.default=pe;const Dn=pe;function m1(){{const e=window.location.port,n=new URLSearchParams(window.location.search).get("id");return{server_port:e,fv_id:n}}}const It=se.createContext({});function h1({children:e}){const{server_port:t,fv_id:n}=m1()??{server_port:"49999",fv_id:"sample_visualization"},[r,i]=se.useState({fvWrapper:{panelName:"fvWrapper",show:!0,size:{maxSize:100,defaultSize:70}},fv:{panelName:"Flowsheet",show:!0,size:{minSize:100,defaultSize:70}},streamTable:{panelName:"Stream Table",show:!0,size:{maxSize:100,defaultSize:30}}}),[o,a]=se.useState({isShowSteamName:!0,isShowLabels:!1}),[l,s]=se.useState({expand:!1,expandState:{}}),[u,c]=se.useState({cells:null,model:null,routing_config:null}),f=u.cells,h=u.model,y=u.routing_config;async function v(){try{const k=(await Dn.get("/data/demo_flowsheet.json")).data;c(p=>({...p,cells:k.cells,model:k.model,routing_config:k.routing_config}))}catch(w){console.error(w)}}return se.useEffect(()=>{v()},[]),P.jsx(It.Provider,{value:{server_port:t,fv_id:n,panelState:r,setPanelState:i,fvHeaderState:o,setFvHeaderState:a,variablesExpandState:l,setVariablesExpandState:s,cells:f,model:h,routing_config:y},children:e})}const v1="_headerLogoContainer_k1rkm_1",g1="_headerLogo_k1rkm_1",y1="_headerLogoText_k1rkm_23",il={headerLogoContainer:v1,headerLogo:g1,headerLogoText:y1},w1="/assets/idaes-logo-4b9fada6.png";function _1(){return P.jsxs("section",{id:"headerLogoContainer",className:`headerLogoContainer ${il.headerLogoContainer}`,children:[P.jsx("img",{src:w1,alt:"idaes logo for header component",id:"headerLogo",className:`${il.headerLogo}`}),P.jsx("p",{id:"headerLogoText",className:`${il.headerLogoText}`,children:"IDAES"})]})}const S1="_header_flowsheet_name_1wktw_1",k1={header_flowsheet_name:S1};function x1(){const{fv_id:e}=se.useContext(It);return P.jsx("p",{className:`${k1.header_flowsheet_name}`,children:e||"loading..."})}function mf(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function O(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n-1;i--){var o=n[i],a=(o.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(a)>-1&&(r=o)}return J.head.insertBefore(t,r),e}}var Q1="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function wi(){for(var e=12,t="";e-- >0;)t+=Q1[Math.random()*62|0];return t}function kr(e){for(var t=[],n=(e||[]).length>>>0;n--;)t[n]=e[n];return t}function Mu(e){return e.classList?kr(e.classList):(e.getAttribute("class")||"").split(" ").filter(function(t){return t})}function Hm(e){return"".concat(e).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function K1(e){return Object.keys(e||{}).reduce(function(t,n){return t+"".concat(n,'="').concat(Hm(e[n]),'" ')},"").trim()}function Sa(e){return Object.keys(e||{}).reduce(function(t,n){return t+"".concat(n,": ").concat(e[n].trim(),";")},"")}function ju(e){return e.size!==vt.size||e.x!==vt.x||e.y!==vt.y||e.rotate!==vt.rotate||e.flipX||e.flipY}function q1(e){var t=e.transform,n=e.containerWidth,r=e.iconWidth,i={transform:"translate(".concat(n/2," 256)")},o="translate(".concat(t.x*32,", ").concat(t.y*32,") "),a="scale(".concat(t.size/16*(t.flipX?-1:1),", ").concat(t.size/16*(t.flipY?-1:1),") "),l="rotate(".concat(t.rotate," 0 0)"),s={transform:"".concat(o," ").concat(a," ").concat(l)},u={transform:"translate(".concat(r/2*-1," -256)")};return{outer:i,inner:s,path:u}}function X1(e){var t=e.transform,n=e.width,r=n===void 0?ps:n,i=e.height,o=i===void 0?ps:i,a=e.startCentered,l=a===void 0?!1:a,s="";return l&&Am?s+="translate(".concat(t.x/Ut-r/2,"em, ").concat(t.y/Ut-o/2,"em) "):l?s+="translate(calc(-50% + ".concat(t.x/Ut,"em), calc(-50% + ").concat(t.y/Ut,"em)) "):s+="translate(".concat(t.x/Ut,"em, ").concat(t.y/Ut,"em) "),s+="scale(".concat(t.size/Ut*(t.flipX?-1:1),", ").concat(t.size/Ut*(t.flipY?-1:1),") "),s+="rotate(".concat(t.rotate,"deg) "),s}var J1=`:root, :host { + --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Solid"; + --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Regular"; + --fa-font-light: normal 300 1em/1 "Font Awesome 6 Light"; + --fa-font-thin: normal 100 1em/1 "Font Awesome 6 Thin"; + --fa-font-duotone: normal 900 1em/1 "Font Awesome 6 Duotone"; + --fa-font-sharp-solid: normal 900 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-regular: normal 400 1em/1 "Font Awesome 6 Sharp"; + --fa-font-sharp-light: normal 300 1em/1 "Font Awesome 6 Sharp"; + --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; +} + +svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa { + overflow: visible; + box-sizing: content-box; +} + +.svg-inline--fa { + display: var(--fa-display, inline-block); + height: 1em; + overflow: visible; + vertical-align: -0.125em; +} +.svg-inline--fa.fa-2xs { + vertical-align: 0.1em; +} +.svg-inline--fa.fa-xs { + vertical-align: 0em; +} +.svg-inline--fa.fa-sm { + vertical-align: -0.0714285705em; +} +.svg-inline--fa.fa-lg { + vertical-align: -0.2em; +} +.svg-inline--fa.fa-xl { + vertical-align: -0.25em; +} +.svg-inline--fa.fa-2xl { + vertical-align: -0.3125em; +} +.svg-inline--fa.fa-pull-left { + margin-right: var(--fa-pull-margin, 0.3em); + width: auto; +} +.svg-inline--fa.fa-pull-right { + margin-left: var(--fa-pull-margin, 0.3em); + width: auto; +} +.svg-inline--fa.fa-li { + width: var(--fa-li-width, 2em); + top: 0.25em; +} +.svg-inline--fa.fa-fw { + width: var(--fa-fw-width, 1.25em); +} + +.fa-layers svg.svg-inline--fa { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; +} + +.fa-layers-counter, .fa-layers-text { + display: inline-block; + position: absolute; + text-align: center; +} + +.fa-layers { + display: inline-block; + height: 1em; + position: relative; + text-align: center; + vertical-align: -0.125em; + width: 1em; +} +.fa-layers svg.svg-inline--fa { + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.fa-layers-text { + left: 50%; + top: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + -webkit-transform-origin: center center; + transform-origin: center center; +} + +.fa-layers-counter { + background-color: var(--fa-counter-background-color, #ff253a); + border-radius: var(--fa-counter-border-radius, 1em); + box-sizing: border-box; + color: var(--fa-inverse, #fff); + line-height: var(--fa-counter-line-height, 1); + max-width: var(--fa-counter-max-width, 5em); + min-width: var(--fa-counter-min-width, 1.5em); + overflow: hidden; + padding: var(--fa-counter-padding, 0.25em 0.5em); + right: var(--fa-right, 0); + text-overflow: ellipsis; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-counter-scale, 0.25)); + transform: scale(var(--fa-counter-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; +} + +.fa-layers-bottom-right { + bottom: var(--fa-bottom, 0); + right: var(--fa-right, 0); + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom right; + transform-origin: bottom right; +} + +.fa-layers-bottom-left { + bottom: var(--fa-bottom, 0); + left: var(--fa-left, 0); + right: auto; + top: auto; + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: bottom left; + transform-origin: bottom left; +} + +.fa-layers-top-right { + top: var(--fa-top, 0); + right: var(--fa-right, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top right; + transform-origin: top right; +} + +.fa-layers-top-left { + left: var(--fa-left, 0); + right: auto; + top: var(--fa-top, 0); + -webkit-transform: scale(var(--fa-layers-scale, 0.25)); + transform: scale(var(--fa-layers-scale, 0.25)); + -webkit-transform-origin: top left; + transform-origin: top left; +} + +.fa-1x { + font-size: 1em; +} + +.fa-2x { + font-size: 2em; +} + +.fa-3x { + font-size: 3em; +} + +.fa-4x { + font-size: 4em; +} + +.fa-5x { + font-size: 5em; +} + +.fa-6x { + font-size: 6em; +} + +.fa-7x { + font-size: 7em; +} + +.fa-8x { + font-size: 8em; +} + +.fa-9x { + font-size: 9em; +} + +.fa-10x { + font-size: 10em; +} + +.fa-2xs { + font-size: 0.625em; + line-height: 0.1em; + vertical-align: 0.225em; +} + +.fa-xs { + font-size: 0.75em; + line-height: 0.0833333337em; + vertical-align: 0.125em; +} + +.fa-sm { + font-size: 0.875em; + line-height: 0.0714285718em; + vertical-align: 0.0535714295em; +} + +.fa-lg { + font-size: 1.25em; + line-height: 0.05em; + vertical-align: -0.075em; +} + +.fa-xl { + font-size: 1.5em; + line-height: 0.0416666682em; + vertical-align: -0.125em; +} + +.fa-2xl { + font-size: 2em; + line-height: 0.03125em; + vertical-align: -0.1875em; +} + +.fa-fw { + text-align: center; + width: 1.25em; +} + +.fa-ul { + list-style-type: none; + margin-left: var(--fa-li-margin, 2.5em); + padding-left: 0; +} +.fa-ul > li { + position: relative; +} + +.fa-li { + left: calc(var(--fa-li-width, 2em) * -1); + position: absolute; + text-align: center; + width: var(--fa-li-width, 2em); + line-height: inherit; +} + +.fa-border { + border-color: var(--fa-border-color, #eee); + border-radius: var(--fa-border-radius, 0.1em); + border-style: var(--fa-border-style, solid); + border-width: var(--fa-border-width, 0.08em); + padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); +} + +.fa-pull-left { + float: left; + margin-right: var(--fa-pull-margin, 0.3em); +} + +.fa-pull-right { + float: right; + margin-left: var(--fa-pull-margin, 0.3em); +} + +.fa-beat { + -webkit-animation-name: fa-beat; + animation-name: fa-beat; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} + +.fa-bounce { + -webkit-animation-name: fa-bounce; + animation-name: fa-bounce; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); +} + +.fa-fade { + -webkit-animation-name: fa-fade; + animation-name: fa-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} + +.fa-beat-fade { + -webkit-animation-name: fa-beat-fade; + animation-name: fa-beat-fade; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} + +.fa-flip { + -webkit-animation-name: fa-flip; + animation-name: fa-flip; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out); + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} + +.fa-shake { + -webkit-animation-name: fa-shake; + animation-name: fa-shake; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); +} + +.fa-spin { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-delay: var(--fa-animation-delay, 0s); + animation-delay: var(--fa-animation-delay, 0s); + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 2s); + animation-duration: var(--fa-animation-duration, 2s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, linear); + animation-timing-function: var(--fa-animation-timing, linear); +} + +.fa-spin-reverse { + --fa-animation-direction: reverse; +} + +.fa-pulse, +.fa-spin-pulse { + -webkit-animation-name: fa-spin; + animation-name: fa-spin; + -webkit-animation-direction: var(--fa-animation-direction, normal); + animation-direction: var(--fa-animation-direction, normal); + -webkit-animation-duration: var(--fa-animation-duration, 1s); + animation-duration: var(--fa-animation-duration, 1s); + -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite); + animation-iteration-count: var(--fa-animation-iteration-count, infinite); + -webkit-animation-timing-function: var(--fa-animation-timing, steps(8)); + animation-timing-function: var(--fa-animation-timing, steps(8)); +} + +@media (prefers-reduced-motion: reduce) { + .fa-beat, +.fa-bounce, +.fa-fade, +.fa-beat-fade, +.fa-flip, +.fa-pulse, +.fa-shake, +.fa-spin, +.fa-spin-pulse { + -webkit-animation-delay: -1ms; + animation-delay: -1ms; + -webkit-animation-duration: 1ms; + animation-duration: 1ms; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; + -webkit-transition-delay: 0s; + transition-delay: 0s; + -webkit-transition-duration: 0s; + transition-duration: 0s; + } +} +@-webkit-keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); + } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); + } +} +@keyframes fa-beat { + 0%, 90% { + -webkit-transform: scale(1); + transform: scale(1); + } + 45% { + -webkit-transform: scale(var(--fa-beat-scale, 1.25)); + transform: scale(var(--fa-beat-scale, 1.25)); + } +} +@-webkit-keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } +} +@keyframes fa-bounce { + 0% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 10% { + -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } + 30% { + -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } + 50% { + -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } + 57% { + -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } + 64% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } + 100% { + -webkit-transform: scale(1, 1) translateY(0); + transform: scale(1, 1) translateY(0); + } +} +@-webkit-keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); + } +} +@keyframes fa-fade { + 50% { + opacity: var(--fa-fade-opacity, 0.4); + } +} +@-webkit-keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} +@keyframes fa-beat-fade { + 0%, 100% { + opacity: var(--fa-beat-fade-opacity, 0.4); + -webkit-transform: scale(1); + transform: scale(1); + } + 50% { + opacity: 1; + -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125)); + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} +@-webkit-keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} +@keyframes fa-flip { + 50% { + -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} +@-webkit-keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); + } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); + } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); + } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); + } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); + } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); + } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@keyframes fa-shake { + 0% { + -webkit-transform: rotate(-15deg); + transform: rotate(-15deg); + } + 4% { + -webkit-transform: rotate(15deg); + transform: rotate(15deg); + } + 8%, 24% { + -webkit-transform: rotate(-18deg); + transform: rotate(-18deg); + } + 12%, 28% { + -webkit-transform: rotate(18deg); + transform: rotate(18deg); + } + 16% { + -webkit-transform: rotate(-22deg); + transform: rotate(-22deg); + } + 20% { + -webkit-transform: rotate(22deg); + transform: rotate(22deg); + } + 32% { + -webkit-transform: rotate(-12deg); + transform: rotate(-12deg); + } + 36% { + -webkit-transform: rotate(12deg); + transform: rotate(12deg); + } + 40%, 100% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.fa-rotate-90 { + -webkit-transform: rotate(90deg); + transform: rotate(90deg); +} + +.fa-rotate-180 { + -webkit-transform: rotate(180deg); + transform: rotate(180deg); +} + +.fa-rotate-270 { + -webkit-transform: rotate(270deg); + transform: rotate(270deg); +} + +.fa-flip-horizontal { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.fa-flip-vertical { + -webkit-transform: scale(1, -1); + transform: scale(1, -1); +} + +.fa-flip-both, +.fa-flip-horizontal.fa-flip-vertical { + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); +} + +.fa-rotate-by { + -webkit-transform: rotate(var(--fa-rotate-angle, none)); + transform: rotate(var(--fa-rotate-angle, none)); +} + +.fa-stack { + display: inline-block; + vertical-align: middle; + height: 2em; + position: relative; + width: 2.5em; +} + +.fa-stack-1x, +.fa-stack-2x { + bottom: 0; + left: 0; + margin: auto; + position: absolute; + right: 0; + top: 0; + z-index: var(--fa-stack-z-index, auto); +} + +.svg-inline--fa.fa-stack-1x { + height: 1em; + width: 1.25em; +} +.svg-inline--fa.fa-stack-2x { + height: 2em; + width: 2.5em; +} + +.fa-inverse { + color: var(--fa-inverse, #fff); +} + +.sr-only, +.fa-sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.sr-only-focusable:not(:focus), +.fa-sr-only-focusable:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.svg-inline--fa .fa-primary { + fill: var(--fa-primary-color, currentColor); + opacity: var(--fa-primary-opacity, 1); +} + +.svg-inline--fa .fa-secondary { + fill: var(--fa-secondary-color, currentColor); + opacity: var(--fa-secondary-opacity, 0.4); +} + +.svg-inline--fa.fa-swap-opacity .fa-primary { + opacity: var(--fa-secondary-opacity, 0.4); +} + +.svg-inline--fa.fa-swap-opacity .fa-secondary { + opacity: var(--fa-primary-opacity, 1); +} + +.svg-inline--fa mask .fa-primary, +.svg-inline--fa mask .fa-secondary { + fill: black; +} + +.fad.fa-inverse, +.fa-duotone.fa-inverse { + color: var(--fa-inverse, #fff); +}`;function Um(){var e=Rm,t=Im,n=R.cssPrefix,r=R.replacementClass,i=J1;if(n!==e||r!==t){var o=new RegExp("\\.".concat(e,"\\-"),"g"),a=new RegExp("\\--".concat(e,"\\-"),"g"),l=new RegExp("\\.".concat(t),"g");i=i.replace(o,".".concat(n,"-")).replace(a,"--".concat(n,"-")).replace(l,".".concat(r))}return i}var Sf=!1;function ol(){R.autoAddCss&&!Sf&&(G1(Um()),Sf=!0)}var Z1={mixout:function(){return{dom:{css:Um,insertCss:ol}}},hooks:function(){return{beforeDOMElementCreation:function(){ol()},beforeI2svg:function(){ol()}}}},Lt=sn||{};Lt[Ot]||(Lt[Ot]={});Lt[Ot].styles||(Lt[Ot].styles={});Lt[Ot].hooks||(Lt[Ot].hooks={});Lt[Ot].shims||(Lt[Ot].shims=[]);var it=Lt[Ot],$m=[],ey=function e(){J.removeEventListener("DOMContentLoaded",e),Qo=1,$m.map(function(t){return t()})},Qo=!1;Ft&&(Qo=(J.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(J.readyState),Qo||J.addEventListener("DOMContentLoaded",ey));function ty(e){Ft&&(Qo?setTimeout(e,0):$m.push(e))}function zi(e){var t=e.tag,n=e.attributes,r=n===void 0?{}:n,i=e.children,o=i===void 0?[]:i;return typeof e=="string"?Hm(e):"<".concat(t," ").concat(K1(r),">").concat(o.map(zi).join(""),"")}function kf(e,t,n){if(e&&e[t]&&e[t][n])return{prefix:t,iconName:n,icon:e[t][n]}}var ny=function(t,n){return function(r,i,o,a){return t.call(n,r,i,o,a)}},al=function(t,n,r,i){var o=Object.keys(t),a=o.length,l=i!==void 0?ny(n,i):n,s,u,c;for(r===void 0?(s=1,c=t[o[0]]):(s=0,c=r);s=55296&&i<=56319&&n=55296&&r<=56319&&n>t+1&&(i=e.charCodeAt(t+1),i>=56320&&i<=57343)?(r-55296)*1024+i-56320+65536:r}function xf(e){return Object.keys(e).reduce(function(t,n){var r=e[n],i=!!r.icon;return i?t[r.iconName]=r.icon:t[n]=r,t},{})}function vs(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.skipHooks,i=r===void 0?!1:r,o=xf(t);typeof it.hooks.addPack=="function"&&!i?it.hooks.addPack(e,xf(t)):it.styles[e]=O(O({},it.styles[e]||{}),o),e==="fas"&&vs("fa",t)}var Zi,eo,to,Jn=it.styles,oy=it.shims,ay=(Zi={},me(Zi,q,Object.values(gi[q])),me(Zi,oe,Object.values(gi[oe])),Zi),Du=null,Bm={},Vm={},Wm={},Ym={},Gm={},ly=(eo={},me(eo,q,Object.keys(hi[q])),me(eo,oe,Object.keys(hi[oe])),eo);function sy(e){return~$1.indexOf(e)}function uy(e,t){var n=t.split("-"),r=n[0],i=n.slice(1).join("-");return r===e&&i!==""&&!sy(i)?i:null}var Qm=function(){var t=function(o){return al(Jn,function(a,l,s){return a[s]=al(l,o,{}),a},{})};Bm=t(function(i,o,a){if(o[3]&&(i[o[3]]=a),o[2]){var l=o[2].filter(function(s){return typeof s=="number"});l.forEach(function(s){i[s.toString(16)]=a})}return i}),Vm=t(function(i,o,a){if(i[a]=a,o[2]){var l=o[2].filter(function(s){return typeof s=="string"});l.forEach(function(s){i[s]=a})}return i}),Gm=t(function(i,o,a){var l=o[2];return i[a]=a,l.forEach(function(s){i[s]=a}),i});var n="far"in Jn||R.autoFetchSvg,r=al(oy,function(i,o){var a=o[0],l=o[1],s=o[2];return l==="far"&&!n&&(l="fas"),typeof a=="string"&&(i.names[a]={prefix:l,iconName:s}),typeof a=="number"&&(i.unicodes[a.toString(16)]={prefix:l,iconName:s}),i},{names:{},unicodes:{}});Wm=r.names,Ym=r.unicodes,Du=ka(R.styleDefault,{family:R.familyDefault})};Y1(function(e){Du=ka(e.styleDefault,{family:R.familyDefault})});Qm();function Hu(e,t){return(Bm[e]||{})[t]}function cy(e,t){return(Vm[e]||{})[t]}function kn(e,t){return(Gm[e]||{})[t]}function Km(e){return Wm[e]||{prefix:null,iconName:null}}function fy(e){var t=Ym[e],n=Hu("fas",e);return t||(n?{prefix:"fas",iconName:n}:null)||{prefix:null,iconName:null}}function un(){return Du}var Uu=function(){return{prefix:null,iconName:null,rest:[]}};function ka(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.family,r=n===void 0?q:n,i=hi[r][e],o=vi[r][e]||vi[r][i],a=e in it.styles?e:null;return o||a||null}var Ef=(to={},me(to,q,Object.keys(gi[q])),me(to,oe,Object.keys(gi[oe])),to);function xa(e){var t,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.skipLookups,i=r===void 0?!1:r,o=(t={},me(t,q,"".concat(R.cssPrefix,"-").concat(q)),me(t,oe,"".concat(R.cssPrefix,"-").concat(oe)),t),a=null,l=q;(e.includes(o[q])||e.some(function(u){return Ef[q].includes(u)}))&&(l=q),(e.includes(o[oe])||e.some(function(u){return Ef[oe].includes(u)}))&&(l=oe);var s=e.reduce(function(u,c){var f=uy(R.cssPrefix,c);if(Jn[c]?(c=ay[l].includes(c)?F1[l][c]:c,a=c,u.prefix=c):ly[l].indexOf(c)>-1?(a=c,u.prefix=ka(c,{family:l})):f?u.iconName=f:c!==R.replacementClass&&c!==o[q]&&c!==o[oe]&&u.rest.push(c),!i&&u.prefix&&u.iconName){var h=a==="fa"?Km(u.iconName):{},y=kn(u.prefix,u.iconName);h.prefix&&(a=null),u.iconName=h.iconName||y||u.iconName,u.prefix=h.prefix||u.prefix,u.prefix==="far"&&!Jn.far&&Jn.fas&&!R.autoFetchSvg&&(u.prefix="fas")}return u},Uu());return(e.includes("fa-brands")||e.includes("fab"))&&(s.prefix="fab"),(e.includes("fa-duotone")||e.includes("fad"))&&(s.prefix="fad"),!s.prefix&&l===oe&&(Jn.fass||R.autoFetchSvg)&&(s.prefix="fass",s.iconName=kn(s.prefix,s.iconName)||s.iconName),(s.prefix==="fa"||a==="fa")&&(s.prefix=un()||"fas"),s}var dy=function(){function e(){E1(this,e),this.definitions={}}return b1(e,[{key:"add",value:function(){for(var n=this,r=arguments.length,i=new Array(r),o=0;o0&&c.forEach(function(f){typeof f=="string"&&(n[l][f]=u)}),n[l][s]=u}),n}}]),e}(),bf=[],Zn={},lr={},py=Object.keys(lr);function my(e,t){var n=t.mixoutsTo;return bf=e,Zn={},Object.keys(lr).forEach(function(r){py.indexOf(r)===-1&&delete lr[r]}),bf.forEach(function(r){var i=r.mixout?r.mixout():{};if(Object.keys(i).forEach(function(a){typeof i[a]=="function"&&(n[a]=i[a]),Go(i[a])==="object"&&Object.keys(i[a]).forEach(function(l){n[a]||(n[a]={}),n[a][l]=i[a][l]})}),r.hooks){var o=r.hooks();Object.keys(o).forEach(function(a){Zn[a]||(Zn[a]=[]),Zn[a].push(o[a])})}r.provides&&r.provides(lr)}),n}function gs(e,t){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i1?t-1:0),r=1;r0&&arguments[0]!==void 0?arguments[0]:{};return Ft?(Ln("beforeI2svg",t),At("pseudoElements2svg",t),At("i2svg",t)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.autoReplaceSvgRoot;R.autoReplaceSvg===!1&&(R.autoReplaceSvg=!0),R.observeMutations=!0,ty(function(){yy({autoReplaceSvgRoot:n}),Ln("watch",t)})}},gy={icon:function(t){if(t===null)return null;if(Go(t)==="object"&&t.prefix&&t.iconName)return{prefix:t.prefix,iconName:kn(t.prefix,t.iconName)||t.iconName};if(Array.isArray(t)&&t.length===2){var n=t[1].indexOf("fa-")===0?t[1].slice(3):t[1],r=ka(t[0]);return{prefix:r,iconName:kn(r,n)||n}}if(typeof t=="string"&&(t.indexOf("".concat(R.cssPrefix,"-"))>-1||t.match(M1))){var i=xa(t.split(" "),{skipLookups:!0});return{prefix:i.prefix||un(),iconName:kn(i.prefix,i.iconName)||i.iconName}}if(typeof t=="string"){var o=un();return{prefix:o,iconName:kn(o,t)||t}}}},Be={noAuto:hy,config:R,dom:vy,parse:gy,library:qm,findIconDefinition:ys,toHtml:zi},yy=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.autoReplaceSvgRoot,r=n===void 0?J:n;(Object.keys(it.styles).length>0||R.autoFetchSvg)&&Ft&&R.autoReplaceSvg&&Be.dom.i2svg({node:r})};function Ea(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map(function(r){return zi(r)})}}),Object.defineProperty(e,"node",{get:function(){if(Ft){var r=J.createElement("div");return r.innerHTML=e.html,r.children}}}),e}function wy(e){var t=e.children,n=e.main,r=e.mask,i=e.attributes,o=e.styles,a=e.transform;if(ju(a)&&n.found&&!r.found){var l=n.width,s=n.height,u={x:l/s/2,y:.5};i.style=Sa(O(O({},o),{},{"transform-origin":"".concat(u.x+a.x/16,"em ").concat(u.y+a.y/16,"em")}))}return[{tag:"svg",attributes:i,children:t}]}function _y(e){var t=e.prefix,n=e.iconName,r=e.children,i=e.attributes,o=e.symbol,a=o===!0?"".concat(t,"-").concat(R.cssPrefix,"-").concat(n):o;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:O(O({},i),{},{id:a}),children:r}]}]}function $u(e){var t=e.icons,n=t.main,r=t.mask,i=e.prefix,o=e.iconName,a=e.transform,l=e.symbol,s=e.title,u=e.maskId,c=e.titleId,f=e.extra,h=e.watchable,y=h===void 0?!1:h,v=r.found?r:n,w=v.width,k=v.height,p=i==="fak",d=[R.replacementClass,o?"".concat(R.cssPrefix,"-").concat(o):""].filter(function(I){return f.classes.indexOf(I)===-1}).filter(function(I){return I!==""||!!I}).concat(f.classes).join(" "),m={children:[],attributes:O(O({},f.attributes),{},{"data-prefix":i,"data-icon":o,class:d,role:f.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(w," ").concat(k)})},_=p&&!~f.classes.indexOf("fa-fw")?{width:"".concat(w/k*16*.0625,"em")}:{};y&&(m.attributes[On]=""),s&&(m.children.push({tag:"title",attributes:{id:m.attributes["aria-labelledby"]||"title-".concat(c||wi())},children:[s]}),delete m.attributes.title);var x=O(O({},m),{},{prefix:i,iconName:o,main:n,mask:r,maskId:u,transform:a,symbol:l,styles:O(O({},_),f.styles)}),N=r.found&&n.found?At("generateAbstractMask",x)||{children:[],attributes:{}}:At("generateAbstractIcon",x)||{children:[],attributes:{}},b=N.children,T=N.attributes;return x.children=b,x.attributes=T,l?_y(x):wy(x)}function Cf(e){var t=e.content,n=e.width,r=e.height,i=e.transform,o=e.title,a=e.extra,l=e.watchable,s=l===void 0?!1:l,u=O(O(O({},a.attributes),o?{title:o}:{}),{},{class:a.classes.join(" ")});s&&(u[On]="");var c=O({},a.styles);ju(i)&&(c.transform=X1({transform:i,startCentered:!0,width:n,height:r}),c["-webkit-transform"]=c.transform);var f=Sa(c);f.length>0&&(u.style=f);var h=[];return h.push({tag:"span",attributes:u,children:[t]}),o&&h.push({tag:"span",attributes:{class:"sr-only"},children:[o]}),h}function Sy(e){var t=e.content,n=e.title,r=e.extra,i=O(O(O({},r.attributes),n?{title:n}:{}),{},{class:r.classes.join(" ")}),o=Sa(r.styles);o.length>0&&(i.style=o);var a=[];return a.push({tag:"span",attributes:i,children:[t]}),n&&a.push({tag:"span",attributes:{class:"sr-only"},children:[n]}),a}var ll=it.styles;function ws(e){var t=e[0],n=e[1],r=e.slice(4),i=Lu(r,1),o=i[0],a=null;return Array.isArray(o)?a={tag:"g",attributes:{class:"".concat(R.cssPrefix,"-").concat(Sn.GROUP)},children:[{tag:"path",attributes:{class:"".concat(R.cssPrefix,"-").concat(Sn.SECONDARY),fill:"currentColor",d:o[0]}},{tag:"path",attributes:{class:"".concat(R.cssPrefix,"-").concat(Sn.PRIMARY),fill:"currentColor",d:o[1]}}]}:a={tag:"path",attributes:{fill:"currentColor",d:o}},{found:!0,width:t,height:n,icon:a}}var ky={found:!1,width:512,height:512};function xy(e,t){!Fm&&!R.showMissingIcons&&e&&console.error('Icon with name "'.concat(e,'" and prefix "').concat(t,'" is missing.'))}function _s(e,t){var n=t;return t==="fa"&&R.styleDefault!==null&&(t=un()),new Promise(function(r,i){if(At("missingIconAbstract"),n==="fa"){var o=Km(e)||{};e=o.iconName||e,t=o.prefix||t}if(e&&t&&ll[t]&&ll[t][e]){var a=ll[t][e];return r(ws(a))}xy(e,t),r(O(O({},ky),{},{icon:R.showMissingIcons&&e?At("missingIconAbstract")||{}:{}}))})}var Nf=function(){},Ss=R.measurePerformance&&Gi&&Gi.mark&&Gi.measure?Gi:{mark:Nf,measure:Nf},Fr='FA "6.4.0"',Ey=function(t){return Ss.mark("".concat(Fr," ").concat(t," begins")),function(){return Xm(t)}},Xm=function(t){Ss.mark("".concat(Fr," ").concat(t," ends")),Ss.measure("".concat(Fr," ").concat(t),"".concat(Fr," ").concat(t," begins"),"".concat(Fr," ").concat(t," ends"))},Bu={begin:Ey,end:Xm},wo=function(){};function Pf(e){var t=e.getAttribute?e.getAttribute(On):null;return typeof t=="string"}function by(e){var t=e.getAttribute?e.getAttribute(Ru):null,n=e.getAttribute?e.getAttribute(Iu):null;return t&&n}function Cy(e){return e&&e.classList&&e.classList.contains&&e.classList.contains(R.replacementClass)}function Ny(){if(R.autoReplaceSvg===!0)return _o.replace;var e=_o[R.autoReplaceSvg];return e||_o.replace}function Py(e){return J.createElementNS("http://www.w3.org/2000/svg",e)}function zy(e){return J.createElement(e)}function Jm(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.ceFn,r=n===void 0?e.tag==="svg"?Py:zy:n;if(typeof e=="string")return J.createTextNode(e);var i=r(e.tag);Object.keys(e.attributes||[]).forEach(function(a){i.setAttribute(a,e.attributes[a])});var o=e.children||[];return o.forEach(function(a){i.appendChild(Jm(a,{ceFn:r}))}),i}function Ty(e){var t=" ".concat(e.outerHTML," ");return t="".concat(t,"Font Awesome fontawesome.com "),t}var _o={replace:function(t){var n=t[0];if(n.parentNode)if(t[1].forEach(function(i){n.parentNode.insertBefore(Jm(i),n)}),n.getAttribute(On)===null&&R.keepOriginalSource){var r=J.createComment(Ty(n));n.parentNode.replaceChild(r,n)}else n.remove()},nest:function(t){var n=t[0],r=t[1];if(~Mu(n).indexOf(R.replacementClass))return _o.replace(t);var i=new RegExp("".concat(R.cssPrefix,"-.*"));if(delete r[0].attributes.id,r[0].attributes.class){var o=r[0].attributes.class.split(" ").reduce(function(l,s){return s===R.replacementClass||s.match(i)?l.toSvg.push(s):l.toNode.push(s),l},{toNode:[],toSvg:[]});r[0].attributes.class=o.toSvg.join(" "),o.toNode.length===0?n.removeAttribute("class"):n.setAttribute("class",o.toNode.join(" "))}var a=r.map(function(l){return zi(l)}).join(` +`);n.setAttribute(On,""),n.innerHTML=a}};function zf(e){e()}function Zm(e,t){var n=typeof t=="function"?t:wo;if(e.length===0)n();else{var r=zf;R.mutateApproach===R1&&(r=sn.requestAnimationFrame||zf),r(function(){var i=Ny(),o=Bu.begin("mutate");e.map(i),o(),n()})}}var Vu=!1;function eh(){Vu=!0}function ks(){Vu=!1}var Ko=null;function Tf(e){if(wf&&R.observeMutations){var t=e.treeCallback,n=t===void 0?wo:t,r=e.nodeCallback,i=r===void 0?wo:r,o=e.pseudoElementsCallback,a=o===void 0?wo:o,l=e.observeMutationsRoot,s=l===void 0?J:l;Ko=new wf(function(u){if(!Vu){var c=un();kr(u).forEach(function(f){if(f.type==="childList"&&f.addedNodes.length>0&&!Pf(f.addedNodes[0])&&(R.searchPseudoElements&&a(f.target),n(f.target)),f.type==="attributes"&&f.target.parentNode&&R.searchPseudoElements&&a(f.target.parentNode),f.type==="attributes"&&Pf(f.target)&&~U1.indexOf(f.attributeName))if(f.attributeName==="class"&&by(f.target)){var h=xa(Mu(f.target)),y=h.prefix,v=h.iconName;f.target.setAttribute(Ru,y||c),v&&f.target.setAttribute(Iu,v)}else Cy(f.target)&&i(f.target)})}}),Ft&&Ko.observe(s,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function Oy(){Ko&&Ko.disconnect()}function Ly(e){var t=e.getAttribute("style"),n=[];return t&&(n=t.split(";").reduce(function(r,i){var o=i.split(":"),a=o[0],l=o.slice(1);return a&&l.length>0&&(r[a]=l.join(":").trim()),r},{})),n}function Ay(e){var t=e.getAttribute("data-prefix"),n=e.getAttribute("data-icon"),r=e.innerText!==void 0?e.innerText.trim():"",i=xa(Mu(e));return i.prefix||(i.prefix=un()),t&&n&&(i.prefix=t,i.iconName=n),i.iconName&&i.prefix||(i.prefix&&r.length>0&&(i.iconName=cy(i.prefix,e.innerText)||Hu(i.prefix,hs(e.innerText))),!i.iconName&&R.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(i.iconName=e.firstChild.data)),i}function Ry(e){var t=kr(e.attributes).reduce(function(i,o){return i.name!=="class"&&i.name!=="style"&&(i[o.name]=o.value),i},{}),n=e.getAttribute("title"),r=e.getAttribute("data-fa-title-id");return R.autoA11y&&(n?t["aria-labelledby"]="".concat(R.replacementClass,"-title-").concat(r||wi()):(t["aria-hidden"]="true",t.focusable="false")),t}function Iy(){return{iconName:null,title:null,titleId:null,prefix:null,transform:vt,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}}}function Of(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{styleParser:!0},n=Ay(e),r=n.iconName,i=n.prefix,o=n.rest,a=Ry(e),l=gs("parseNodeAttributes",{},e),s=t.styleParser?Ly(e):[];return O({iconName:r,title:e.getAttribute("title"),titleId:e.getAttribute("data-fa-title-id"),prefix:i,transform:vt,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:o,styles:s,attributes:a}},l)}var Fy=it.styles;function th(e){var t=R.autoReplaceSvg==="nest"?Of(e,{styleParser:!1}):Of(e);return~t.extra.classes.indexOf(Mm)?At("generateLayersText",e,t):At("generateSvgReplacementMutation",e,t)}var cn=new Set;Fu.map(function(e){cn.add("fa-".concat(e))});Object.keys(hi[q]).map(cn.add.bind(cn));Object.keys(hi[oe]).map(cn.add.bind(cn));cn=Ni(cn);function Lf(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(!Ft)return Promise.resolve();var n=J.documentElement.classList,r=function(f){return n.add("".concat(_f,"-").concat(f))},i=function(f){return n.remove("".concat(_f,"-").concat(f))},o=R.autoFetchSvg?cn:Fu.map(function(c){return"fa-".concat(c)}).concat(Object.keys(Fy));o.includes("fa")||o.push("fa");var a=[".".concat(Mm,":not([").concat(On,"])")].concat(o.map(function(c){return".".concat(c,":not([").concat(On,"])")})).join(", ");if(a.length===0)return Promise.resolve();var l=[];try{l=kr(e.querySelectorAll(a))}catch{}if(l.length>0)r("pending"),i("complete");else return Promise.resolve();var s=Bu.begin("onTree"),u=l.reduce(function(c,f){try{var h=th(f);h&&c.push(h)}catch(y){Fm||y.name==="MissingIcon"&&console.error(y)}return c},[]);return new Promise(function(c,f){Promise.all(u).then(function(h){Zm(h,function(){r("active"),r("complete"),i("pending"),typeof t=="function"&&t(),s(),c()})}).catch(function(h){s(),f(h)})})}function My(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;th(e).then(function(n){n&&Zm([n],t)})}function jy(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(t||{}).icon?t:ys(t||{}),i=n.mask;return i&&(i=(i||{}).icon?i:ys(i||{})),e(r,O(O({},n),{},{mask:i}))}}var Dy=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.transform,i=r===void 0?vt:r,o=n.symbol,a=o===void 0?!1:o,l=n.mask,s=l===void 0?null:l,u=n.maskId,c=u===void 0?null:u,f=n.title,h=f===void 0?null:f,y=n.titleId,v=y===void 0?null:y,w=n.classes,k=w===void 0?[]:w,p=n.attributes,d=p===void 0?{}:p,m=n.styles,_=m===void 0?{}:m;if(t){var x=t.prefix,N=t.iconName,b=t.icon;return Ea(O({type:"icon"},t),function(){return Ln("beforeDOMElementCreation",{iconDefinition:t,params:n}),R.autoA11y&&(h?d["aria-labelledby"]="".concat(R.replacementClass,"-title-").concat(v||wi()):(d["aria-hidden"]="true",d.focusable="false")),$u({icons:{main:ws(b),mask:s?ws(s.icon):{found:!1,width:null,height:null,icon:{}}},prefix:x,iconName:N,transform:O(O({},vt),i),symbol:a,title:h,maskId:c,titleId:v,extra:{attributes:d,styles:_,classes:k}})})}},Hy={mixout:function(){return{icon:jy(Dy)}},hooks:function(){return{mutationObserverCallbacks:function(n){return n.treeCallback=Lf,n.nodeCallback=My,n}}},provides:function(t){t.i2svg=function(n){var r=n.node,i=r===void 0?J:r,o=n.callback,a=o===void 0?function(){}:o;return Lf(i,a)},t.generateSvgReplacementMutation=function(n,r){var i=r.iconName,o=r.title,a=r.titleId,l=r.prefix,s=r.transform,u=r.symbol,c=r.mask,f=r.maskId,h=r.extra;return new Promise(function(y,v){Promise.all([_s(i,l),c.iconName?_s(c.iconName,c.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then(function(w){var k=Lu(w,2),p=k[0],d=k[1];y([n,$u({icons:{main:p,mask:d},prefix:l,iconName:i,transform:s,symbol:u,maskId:f,title:o,titleId:a,extra:h,watchable:!0})])}).catch(v)})},t.generateAbstractIcon=function(n){var r=n.children,i=n.attributes,o=n.main,a=n.transform,l=n.styles,s=Sa(l);s.length>0&&(i.style=s);var u;return ju(a)&&(u=At("generateAbstractTransformGrouping",{main:o,transform:a,containerWidth:o.width,iconWidth:o.width})),r.push(u||o.icon),{children:r,attributes:i}}}},Uy={mixout:function(){return{layer:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.classes,o=i===void 0?[]:i;return Ea({type:"layer"},function(){Ln("beforeDOMElementCreation",{assembler:n,params:r});var a=[];return n(function(l){Array.isArray(l)?l.map(function(s){a=a.concat(s.abstract)}):a=a.concat(l.abstract)}),[{tag:"span",attributes:{class:["".concat(R.cssPrefix,"-layers")].concat(Ni(o)).join(" ")},children:a}]})}}}},$y={mixout:function(){return{counter:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.title,o=i===void 0?null:i,a=r.classes,l=a===void 0?[]:a,s=r.attributes,u=s===void 0?{}:s,c=r.styles,f=c===void 0?{}:c;return Ea({type:"counter",content:n},function(){return Ln("beforeDOMElementCreation",{content:n,params:r}),Sy({content:n.toString(),title:o,extra:{attributes:u,styles:f,classes:["".concat(R.cssPrefix,"-layers-counter")].concat(Ni(l))}})})}}}},By={mixout:function(){return{text:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.transform,o=i===void 0?vt:i,a=r.title,l=a===void 0?null:a,s=r.classes,u=s===void 0?[]:s,c=r.attributes,f=c===void 0?{}:c,h=r.styles,y=h===void 0?{}:h;return Ea({type:"text",content:n},function(){return Ln("beforeDOMElementCreation",{content:n,params:r}),Cf({content:n,transform:O(O({},vt),o),title:l,extra:{attributes:f,styles:y,classes:["".concat(R.cssPrefix,"-layers-text")].concat(Ni(u))}})})}}},provides:function(t){t.generateLayersText=function(n,r){var i=r.title,o=r.transform,a=r.extra,l=null,s=null;if(Am){var u=parseInt(getComputedStyle(n).fontSize,10),c=n.getBoundingClientRect();l=c.width/u,s=c.height/u}return R.autoA11y&&!i&&(a.attributes["aria-hidden"]="true"),Promise.resolve([n,Cf({content:n.innerHTML,width:l,height:s,transform:o,title:i,extra:a,watchable:!0})])}}},Vy=new RegExp('"',"ug"),Af=[1105920,1112319];function Wy(e){var t=e.replace(Vy,""),n=iy(t,0),r=n>=Af[0]&&n<=Af[1],i=t.length===2?t[0]===t[1]:!1;return{value:hs(i?t[0]:t),isSecondary:r||i}}function Rf(e,t){var n="".concat(A1).concat(t.replace(":","-"));return new Promise(function(r,i){if(e.getAttribute(n)!==null)return r();var o=kr(e.children),a=o.filter(function(b){return b.getAttribute(ms)===t})[0],l=sn.getComputedStyle(e,t),s=l.getPropertyValue("font-family").match(j1),u=l.getPropertyValue("font-weight"),c=l.getPropertyValue("content");if(a&&!s)return e.removeChild(a),r();if(s&&c!=="none"&&c!==""){var f=l.getPropertyValue("content"),h=~["Sharp"].indexOf(s[2])?oe:q,y=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(s[2])?vi[h][s[2].toLowerCase()]:D1[h][u],v=Wy(f),w=v.value,k=v.isSecondary,p=s[0].startsWith("FontAwesome"),d=Hu(y,w),m=d;if(p){var _=fy(w);_.iconName&&_.prefix&&(d=_.iconName,y=_.prefix)}if(d&&!k&&(!a||a.getAttribute(Ru)!==y||a.getAttribute(Iu)!==m)){e.setAttribute(n,m),a&&e.removeChild(a);var x=Iy(),N=x.extra;N.attributes[ms]=t,_s(d,y).then(function(b){var T=$u(O(O({},x),{},{icons:{main:b,mask:Uu()},prefix:y,iconName:m,extra:N,watchable:!0})),I=J.createElement("svg");t==="::before"?e.insertBefore(I,e.firstChild):e.appendChild(I),I.outerHTML=T.map(function(M){return zi(M)}).join(` +`),e.removeAttribute(n),r()}).catch(i)}else r()}else r()})}function Yy(e){return Promise.all([Rf(e,"::before"),Rf(e,"::after")])}function Gy(e){return e.parentNode!==document.head&&!~I1.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(ms)&&(!e.parentNode||e.parentNode.tagName!=="svg")}function If(e){if(Ft)return new Promise(function(t,n){var r=kr(e.querySelectorAll("*")).filter(Gy).map(Yy),i=Bu.begin("searchPseudoElements");eh(),Promise.all(r).then(function(){i(),ks(),t()}).catch(function(){i(),ks(),n()})})}var Qy={hooks:function(){return{mutationObserverCallbacks:function(n){return n.pseudoElementsCallback=If,n}}},provides:function(t){t.pseudoElements2svg=function(n){var r=n.node,i=r===void 0?J:r;R.searchPseudoElements&&If(i)}}},Ff=!1,Ky={mixout:function(){return{dom:{unwatch:function(){eh(),Ff=!0}}}},hooks:function(){return{bootstrap:function(){Tf(gs("mutationObserverCallbacks",{}))},noAuto:function(){Oy()},watch:function(n){var r=n.observeMutationsRoot;Ff?ks():Tf(gs("mutationObserverCallbacks",{observeMutationsRoot:r}))}}}},Mf=function(t){var n={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return t.toLowerCase().split(" ").reduce(function(r,i){var o=i.toLowerCase().split("-"),a=o[0],l=o.slice(1).join("-");if(a&&l==="h")return r.flipX=!0,r;if(a&&l==="v")return r.flipY=!0,r;if(l=parseFloat(l),isNaN(l))return r;switch(a){case"grow":r.size=r.size+l;break;case"shrink":r.size=r.size-l;break;case"left":r.x=r.x-l;break;case"right":r.x=r.x+l;break;case"up":r.y=r.y-l;break;case"down":r.y=r.y+l;break;case"rotate":r.rotate=r.rotate+l;break}return r},n)},qy={mixout:function(){return{parse:{transform:function(n){return Mf(n)}}}},hooks:function(){return{parseNodeAttributes:function(n,r){var i=r.getAttribute("data-fa-transform");return i&&(n.transform=Mf(i)),n}}},provides:function(t){t.generateAbstractTransformGrouping=function(n){var r=n.main,i=n.transform,o=n.containerWidth,a=n.iconWidth,l={transform:"translate(".concat(o/2," 256)")},s="translate(".concat(i.x*32,", ").concat(i.y*32,") "),u="scale(".concat(i.size/16*(i.flipX?-1:1),", ").concat(i.size/16*(i.flipY?-1:1),") "),c="rotate(".concat(i.rotate," 0 0)"),f={transform:"".concat(s," ").concat(u," ").concat(c)},h={transform:"translate(".concat(a/2*-1," -256)")},y={outer:l,inner:f,path:h};return{tag:"g",attributes:O({},y.outer),children:[{tag:"g",attributes:O({},y.inner),children:[{tag:r.icon.tag,children:r.icon.children,attributes:O(O({},r.icon.attributes),y.path)}]}]}}}},sl={x:0,y:0,width:"100%",height:"100%"};function jf(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill="black"),e}function Xy(e){return e.tag==="g"?e.children:[e]}var Jy={hooks:function(){return{parseNodeAttributes:function(n,r){var i=r.getAttribute("data-fa-mask"),o=i?xa(i.split(" ").map(function(a){return a.trim()})):Uu();return o.prefix||(o.prefix=un()),n.mask=o,n.maskId=r.getAttribute("data-fa-mask-id"),n}}},provides:function(t){t.generateAbstractMask=function(n){var r=n.children,i=n.attributes,o=n.main,a=n.mask,l=n.maskId,s=n.transform,u=o.width,c=o.icon,f=a.width,h=a.icon,y=q1({transform:s,containerWidth:f,iconWidth:u}),v={tag:"rect",attributes:O(O({},sl),{},{fill:"white"})},w=c.children?{children:c.children.map(jf)}:{},k={tag:"g",attributes:O({},y.inner),children:[jf(O({tag:c.tag,attributes:O(O({},c.attributes),y.path)},w))]},p={tag:"g",attributes:O({},y.outer),children:[k]},d="mask-".concat(l||wi()),m="clip-".concat(l||wi()),_={tag:"mask",attributes:O(O({},sl),{},{id:d,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[v,p]},x={tag:"defs",children:[{tag:"clipPath",attributes:{id:m},children:Xy(h)},_]};return r.push(x,{tag:"rect",attributes:O({fill:"currentColor","clip-path":"url(#".concat(m,")"),mask:"url(#".concat(d,")")},sl)}),{children:r,attributes:i}}}},Zy={provides:function(t){var n=!1;sn.matchMedia&&(n=sn.matchMedia("(prefers-reduced-motion: reduce)").matches),t.missingIconAbstract=function(){var r=[],i={fill:"currentColor"},o={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};r.push({tag:"path",attributes:O(O({},i),{},{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"})});var a=O(O({},o),{},{attributeName:"opacity"}),l={tag:"circle",attributes:O(O({},i),{},{cx:"256",cy:"364",r:"28"}),children:[]};return n||l.children.push({tag:"animate",attributes:O(O({},o),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:O(O({},a),{},{values:"1;0;1;1;0;1;"})}),r.push(l),r.push({tag:"path",attributes:O(O({},i),{},{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),children:n?[]:[{tag:"animate",attributes:O(O({},a),{},{values:"1;0;0;0;0;1;"})}]}),n||r.push({tag:"path",attributes:O(O({},i),{},{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),children:[{tag:"animate",attributes:O(O({},a),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:r}}}},ew={hooks:function(){return{parseNodeAttributes:function(n,r){var i=r.getAttribute("data-fa-symbol"),o=i===null?!1:i===""?!0:i;return n.symbol=o,n}}}},tw=[Z1,Hy,Uy,$y,By,Qy,Ky,qy,Jy,Zy,ew];my(tw,{mixoutsTo:Be});Be.noAuto;Be.config;Be.library;Be.dom;var xs=Be.parse;Be.findIconDefinition;Be.toHtml;var nw=Be.icon;Be.layer;Be.text;Be.counter;var nh={exports:{}},rw="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",iw=rw,ow=iw;function rh(){}function ih(){}ih.resetWarningCache=rh;var aw=function(){function e(r,i,o,a,l,s){if(s!==ow){var u=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 u.name="Invariant Violation",u}}e.isRequired=e;function t(){return 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:ih,resetWarningCache:rh};return n.PropTypes=n,n};nh.exports=aw();var lw=nh.exports;const H=Kf(lw);function Df(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),n.push.apply(n,r)}return n}function qt(e){for(var t=1;t=0)&&(n[i]=e[i]);return n}function uw(e,t){if(e==null)return{};var n=sw(e,t),r,i;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Es(e){return cw(e)||fw(e)||dw(e)||pw()}function cw(e){if(Array.isArray(e))return bs(e)}function fw(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function dw(e,t){if(e){if(typeof e=="string")return bs(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return bs(e,t)}}function bs(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n2&&arguments[2]!==void 0?arguments[2]:{};if(typeof t=="string")return t;var r=(t.children||[]).map(function(s){return ah(e,s)}),i=Object.keys(t.attributes||{}).reduce(function(s,u){var c=t.attributes[u];switch(u){case"class":s.attrs.className=c,delete t.attributes.class;break;case"style":s.attrs.style=yw(c);break;default:u.indexOf("aria-")===0||u.indexOf("data-")===0?s.attrs[u.toLowerCase()]=c:s.attrs[oh(u)]=c}return s},{attrs:{}}),o=n.style,a=o===void 0?{}:o,l=uw(n,vw);return i.attrs.style=qt(qt({},i.attrs.style),a),e.apply(void 0,[t.tag,qt(qt({},i.attrs),l)].concat(Es(r)))}var lh=!1;try{lh=!0}catch{}function ww(){if(!lh&&console&&typeof console.error=="function"){var e;(e=console).error.apply(e,arguments)}}function Hf(e){if(e&&qo(e)==="object"&&e.prefix&&e.iconName&&e.icon)return e;if(xs.icon)return xs.icon(e);if(e===null)return null;if(e&&qo(e)==="object"&&e.prefix&&e.iconName)return e;if(Array.isArray(e)&&e.length===2)return{prefix:e[0],iconName:e[1]};if(typeof e=="string")return{prefix:"fas",iconName:e}}function ul(e,t){return Array.isArray(t)&&t.length>0||!Array.isArray(t)&&t?er({},e,t):{}}var ve=Fs.forwardRef(function(e,t){var n=e.icon,r=e.mask,i=e.symbol,o=e.className,a=e.title,l=e.titleId,s=e.maskId,u=Hf(n),c=ul("classes",[].concat(Es(mw(e)),Es(o.split(" ")))),f=ul("transform",typeof e.transform=="string"?xs.transform(e.transform):e.transform),h=ul("mask",Hf(r)),y=nw(u,qt(qt(qt(qt({},c),f),h),{},{symbol:i,title:a,titleId:l,maskId:s}));if(!y)return ww("Could not find icon",u),null;var v=y.abstract,w={ref:t};return Object.keys(e).forEach(function(k){ve.defaultProps.hasOwnProperty(k)||(w[k]=e[k])}),_w(v[0],w)});ve.displayName="FontAwesomeIcon";ve.propTypes={beat:H.bool,border:H.bool,beatFade:H.bool,bounce:H.bool,className:H.string,fade:H.bool,flash:H.bool,mask:H.oneOfType([H.object,H.array,H.string]),maskId:H.string,fixedWidth:H.bool,inverse:H.bool,flip:H.oneOf([!0,!1,"horizontal","vertical","both"]),icon:H.oneOfType([H.object,H.array,H.string]),listItem:H.bool,pull:H.oneOf(["right","left"]),pulse:H.bool,rotation:H.oneOf([0,90,180,270]),shake:H.bool,size:H.oneOf(["2xs","xs","sm","lg","xl","2xl","1x","2x","3x","4x","5x","6x","7x","8x","9x","10x"]),spin:H.bool,spinPulse:H.bool,spinReverse:H.bool,symbol:H.oneOfType([H.bool,H.string]),title:H.string,titleId:H.string,transform:H.oneOfType([H.string,H.object]),swapOpacity:H.bool};ve.defaultProps={border:!1,className:"",mask:null,maskId:null,fixedWidth:!1,inverse:!1,flip:!1,icon:null,listItem:!1,pull:null,pulse:!1,rotation:null,size:null,spin:!1,spinPulse:!1,spinReverse:!1,beat:!1,fade:!1,beatFade:!1,bounce:!1,shake:!1,symbol:!1,title:"",titleId:null,transform:null,swapOpacity:!1};var _w=ah.bind(null,Fs.createElement),Uf={prefix:"fas",iconName:"square-check",icon:[448,512,[9745,9989,61510,"check-square"],"f14a","M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64zM337 209L209 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L303 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"]},Sw={prefix:"fas",iconName:"image",icon:[512,512,[],"f03e","M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6h96 32H424c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z"]},kw={prefix:"fas",iconName:"table-columns",icon:[512,512,["columns"],"f0db","M0 96C0 60.7 28.7 32 64 32H448c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96zm64 64V416H224V160H64zm384 0H288V416H448V160z"]},xw={prefix:"fas",iconName:"arrows-rotate",icon:[512,512,[128472,"refresh","sync"],"f021","M105.1 202.6c7.7-21.8 20.2-42.3 37.8-59.8c62.5-62.5 163.8-62.5 226.3 0L386.3 160H336c-17.7 0-32 14.3-32 32s14.3 32 32 32H463.5c0 0 0 0 0 0h.4c17.7 0 32-14.3 32-32V64c0-17.7-14.3-32-32-32s-32 14.3-32 32v51.2L414.4 97.6c-87.5-87.5-229.3-87.5-316.8 0C73.2 122 55.6 150.7 44.8 181.4c-5.9 16.7 2.9 34.9 19.5 40.8s34.9-2.9 40.8-19.5zM39 289.3c-5 1.5-9.8 4.2-13.7 8.2c-4 4-6.7 8.8-8.1 14c-.3 1.2-.6 2.5-.8 3.8c-.3 1.7-.4 3.4-.4 5.1V448c0 17.7 14.3 32 32 32s32-14.3 32-32V396.9l17.6 17.5 0 0c87.5 87.4 229.3 87.4 316.7 0c24.4-24.4 42.1-53.1 52.9-83.7c5.9-16.7-2.9-34.9-19.5-40.8s-34.9 2.9-40.8 19.5c-7.7 21.8-20.2 42.3-37.8 59.8c-62.5 62.5-163.8 62.5-226.3 0l-.1-.1L125.6 352H176c17.7 0 32-14.3 32-32s-14.3-32-32-32H48.4c-1.6 0-3.2 .1-4.8 .3s-3.1 .5-4.6 1z"]},$f={prefix:"fas",iconName:"square",icon:[448,512,[9632,9723,9724,61590],"f0c8","M0 96C0 60.7 28.7 32 64 32H384c35.3 0 64 28.7 64 64V416c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V96z"]},Ew={prefix:"fas",iconName:"floppy-disk",icon:[448,512,[128190,128426,"save"],"f0c7","M64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H384c35.3 0 64-28.7 64-64V173.3c0-17-6.7-33.3-18.7-45.3L352 50.7C340 38.7 323.7 32 306.7 32H64zm0 96c0-17.7 14.3-32 32-32H288c17.7 0 32 14.3 32 32v64c0 17.7-14.3 32-32 32H96c-17.7 0-32-14.3-32-32V128zM224 288a64 64 0 1 1 0 128 64 64 0 1 1 0-128z"]},sh={prefix:"fas",iconName:"minus",icon:[448,512,[8211,8722,10134,"subtract"],"f068","M432 256c0 17.7-14.3 32-32 32L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l352 0c17.7 0 32 14.3 32 32z"]},bw={prefix:"fas",iconName:"expand",icon:[448,512,[],"f065","M32 32C14.3 32 0 46.3 0 64v96c0 17.7 14.3 32 32 32s32-14.3 32-32V96h64c17.7 0 32-14.3 32-32s-14.3-32-32-32H32zM64 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v96c0 17.7 14.3 32 32 32h96c17.7 0 32-14.3 32-32s-14.3-32-32-32H64V352zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32h64v64c0 17.7 14.3 32 32 32s32-14.3 32-32V64c0-17.7-14.3-32-32-32H320zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32v64H320c-17.7 0-32 14.3-32 32s14.3 32 32 32h96c17.7 0 32-14.3 32-32V352z"]},Cw={prefix:"fas",iconName:"check",icon:[448,512,[10003,10004],"f00c","M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"]},Nw={prefix:"fas",iconName:"magnifying-glass-plus",icon:[512,512,["search-plus"],"f00e","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM184 296c0 13.3 10.7 24 24 24s24-10.7 24-24V232h64c13.3 0 24-10.7 24-24s-10.7-24-24-24H232V120c0-13.3-10.7-24-24-24s-24 10.7-24 24v64H120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64v64z"]},Pw={prefix:"fas",iconName:"magnifying-glass-minus",icon:[512,512,["search-minus"],"f010","M416 208c0 45.9-14.9 88.3-40 122.7L502.6 457.4c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L330.7 376c-34.4 25.2-76.8 40-122.7 40C93.1 416 0 322.9 0 208S93.1 0 208 0S416 93.1 416 208zM136 184c-13.3 0-24 10.7-24 24s10.7 24 24 24H280c13.3 0 24-10.7 24-24s-10.7-24-24-24H136z"]};function zw(){return P.jsxs("li",{id:"refresh_btn",className:"header_each_btn",children:[P.jsx(ve,{icon:xw,className:"mr-sm"}),"Refresh"]})}function Tw(){return P.jsxs("li",{id:"save_btn",className:"header_each_btn",children:[P.jsx(ve,{icon:Ew,className:"mr-sm"}),"Save"]})}function Ow(){return P.jsxs("li",{id:"headerExportImageBtn",className:"header_each_btn",children:[P.jsx(ve,{icon:Sw,className:"mr-sm"}),"Export"]})}const Lw="_header_fn_btn_wrapper_li_sks9h_1",Aw="_header_fn_btn_hover_ul_sks9h_13",Rw="_header_fn_btn_each_view_sks9h_139",cl={header_fn_btn_wrapper_li:Lw,header_fn_btn_hover_ul:Aw,header_fn_btn_each_view:Rw};function Iw(){let{panelState:e,setPanelState:t}=se.useContext(It);const n=["fvWrapper"];let r=Object.keys(e).map((o,a)=>{if(!n.includes(e[o].panelName))return P.jsxs("li",{className:`mb-sm ${cl.header_fn_btn_each_view}`,onClick:()=>i(e[o].panelName),children:[P.jsx("span",{children:e[o].panelName}),e[o].show?P.jsx(ve,{icon:Cw}):null]},e[o].panelName+a)});function i(o){t(a=>{let l={...a};for(let s in l)l[s].panelName===o&&(l[s]={...l[s],show:!l[s].show});return l})}return P.jsx(P.Fragment,{children:P.jsxs("li",{className:`${cl.header_fn_btn_wrapper_li} header_each_btn`,children:[P.jsx(ve,{icon:kw,className:"mr-sm"}),"View",P.jsx("ul",{className:`crd_shadow-light ${cl.header_fn_btn_hover_ul}`,children:r})]})})}const Fw="_header_fn_btn_wrapper_ul_1qki9_1",Mw={header_fn_btn_wrapper_ul:Fw};function jw(){return P.jsxs("ul",{className:`${Mw.header_fn_btn_wrapper_ul}`,children:[P.jsx(zw,{}),P.jsx(Tw,{}),P.jsx(Ow,{}),P.jsx(Iw,{})]})}const Dw="_header_container_1kd62_1",Hw={header_container:Dw};function Uw(){return se.useContext(It),P.jsxs("header",{id:"header",className:`row ${Hw.header_container}`,children:[P.jsx(_1,{}),P.jsx(x1,{}),P.jsx(jw,{})]})}const{createElement:gr,createContext:$w,forwardRef:uh,useCallback:Bt,useContext:ch,useEffect:Ct,useImperativeHandle:fh,useLayoutEffect:Bw,useMemo:Vw,useRef:Qe,useState:qr}=od,Bf=od["useId".toString()],Ww=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Xo=Ww?Bw:()=>{},Yw=typeof Bf=="function"?Bf:()=>null;let Gw=0;function Wu(e=null){const t=Yw(),n=Qe(e||t||null);return n.current===null&&(n.current=""+Gw++),n.current}const ba=$w(null);ba.displayName="PanelGroupContext";function dh({children:e=null,className:t="",collapsedSize:n=0,collapsible:r=!1,defaultSize:i=null,forwardedRef:o,id:a=null,maxSize:l=100,minSize:s=10,onCollapse:u=null,onResize:c=null,order:f=null,style:h={},tagName:y="div"}){const v=ch(ba);if(v===null)throw Error("Panel components must be rendered within a PanelGroup container");const w=Wu(a),{collapsePanel:k,expandPanel:p,getPanelStyle:d,registerPanel:m,resizePanel:_,unregisterPanel:x}=v,N=Qe({onCollapse:u,onResize:c});if(Ct(()=>{N.current.onCollapse=u,N.current.onResize=c}),s<0||s>100)throw Error(`Panel minSize must be between 0 and 100, but was ${s}`);if(l<0||l>100)throw Error(`Panel maxSize must be between 0 and 100, but was ${l}`);if(i!==null){if(i<0||i>100)throw Error(`Panel defaultSize must be between 0 and 100, but was ${i}`);s>i&&!r&&(console.error(`Panel minSize ${s} cannot be greater than defaultSize ${i}`),i=s)}const b=d(w,i),T=Qe({size:Vf(b)}),I=Qe({callbacksRef:N,collapsedSize:n,collapsible:r,defaultSize:i,id:w,maxSize:l,minSize:s,order:f});return Xo(()=>{T.current.size=Vf(b),I.current.callbacksRef=N,I.current.collapsedSize=n,I.current.collapsible=r,I.current.defaultSize=i,I.current.id=w,I.current.maxSize=l,I.current.minSize=s,I.current.order=f}),Xo(()=>(m(w,I),()=>{x(w)}),[f,w,m,x]),fh(o,()=>({collapse:()=>k(w),expand:()=>p(w),getCollapsed(){return T.current.size===0},getSize(){return T.current.size},resize:M=>_(w,M)}),[k,p,w,_]),gr(y,{children:e,className:t,"data-panel":"","data-panel-collapsible":r||void 0,"data-panel-id":w,"data-panel-size":parseFloat(""+b.flexGrow).toFixed(1),id:`data-panel-id-${w}`,style:{...b,...h}})}const So=uh((e,t)=>gr(dh,{...e,forwardedRef:t}));dh.displayName="Panel";So.displayName="forwardRef(Panel)";function Vf(e){const{flexGrow:t}=e;return typeof t=="string"?parseFloat(t):t}const An=10;function Mr(e,t,n,r,i,o,a,l){const{sizes:s}=l||{},u=s||o;if(i===0)return u;const c=We(t),f=u.concat();let h=0;{const w=i<0?r:n,k=c.findIndex(_=>_.current.id===w),p=c[k],d=u[k],m=Wf(p,Math.abs(i),d,e);if(d===m)return u;m===0&&d>0&&a.set(w,d),i=i<0?d-m:m-d}let y=i<0?n:r,v=c.findIndex(w=>w.current.id===y);for(;;){const w=c[v],k=u[v],p=Math.abs(i)-Math.abs(h),d=Wf(w,0-p,k,e);if(k!==d&&(d===0&&k>0&&a.set(w.current.id,k),h+=k-d,f[v]=d,h.toPrecision(An).localeCompare(Math.abs(i).toPrecision(An),void 0,{numeric:!0})>=0))break;if(i<0){if(--v<0)break}else if(++v>=c.length)break}return h===0?u:(y=i<0?r:n,v=c.findIndex(w=>w.current.id===y),f[v]=u[v]+h,f)}function jn(e,t,n){t.forEach((r,i)=>{const o=e[i];if(!o)return;const{callbacksRef:a,collapsedSize:l,collapsible:s,id:u}=o.current,c=n[u];if(c!==r){n[u]=r;const{onCollapse:f,onResize:h}=a.current;h&&h(r,c),s&&f&&((c==null||c===l)&&r!==l?f(!1):c!==l&&r===l&&f(!0))}})}function fl(e,t){if(t.length<2)return[null,null];const n=t.findIndex(a=>a.current.id===e);if(n<0)return[null,null];const r=n===t.length-1,i=r?t[n-1].current.id:e,o=r?e:t[n+1].current.id;return[i,o]}function ph(e,t,n){if(e.size===1)return"100";const i=We(e).findIndex(a=>a.current.id===t),o=n[i];return o==null?"0":o.toPrecision(An)}function Qw(e){const t=document.querySelector(`[data-panel-id="${e}"]`);return t||null}function Yu(e){const t=document.querySelector(`[data-panel-group-id="${e}"]`);return t||null}function Ca(e){const t=document.querySelector(`[data-panel-resize-handle-id="${e}"]`);return t||null}function Kw(e){return mh().findIndex(r=>r.getAttribute("data-panel-resize-handle-id")===e)??null}function mh(){return Array.from(document.querySelectorAll("[data-panel-resize-handle-id]"))}function hh(e){return Array.from(document.querySelectorAll(`[data-panel-resize-handle-id][data-panel-group-id="${e}"]`))}function Gu(e,t,n){var s,u,c,f;const r=Ca(t),i=hh(e),o=r?i.indexOf(r):-1,a=((u=(s=n[o])==null?void 0:s.current)==null?void 0:u.id)??null,l=((f=(c=n[o+1])==null?void 0:c.current)==null?void 0:f.id)??null;return[a,l]}function We(e){return Array.from(e.values()).sort((t,n)=>{const r=t.current.order,i=n.current.order;return r==null&&i==null?0:r==null?-1:i==null?1:r-i})}function Wf(e,t,n,r){var c;const i=n+t,{collapsedSize:o,collapsible:a,maxSize:l,minSize:s}=e.current;if(a){if(n>o){if(i<=s/2+o)return o}else if(!((c=r==null?void 0:r.type)==null?void 0:c.startsWith("key"))&&i{const{direction:a,panels:l}=e.current,s=Yu(t),{height:u,width:c}=s.getBoundingClientRect(),h=hh(t).map(y=>{const v=y.getAttribute("data-panel-resize-handle-id"),w=We(l),[k,p]=Gu(t,v,w);if(k==null||p==null)return()=>{};let d=0,m=100,_=0,x=0;w.forEach($=>{$.current.id===k?(m=$.current.maxSize,d=$.current.minSize):(_+=$.current.minSize,x+=$.current.maxSize)});const N=Math.min(m,100-_),b=Math.max(d,(w.length-1)*100-x),T=ph(l,k,i);y.setAttribute("aria-valuemax",""+Math.round(N)),y.setAttribute("aria-valuemin",""+Math.round(b)),y.setAttribute("aria-valuenow",""+Math.round(parseInt(T)));const I=$=>{if(!$.defaultPrevented)switch($.key){case"Enter":{$.preventDefault();const ke=w.findIndex(Ve=>Ve.current.id===k);if(ke>=0){const Ve=w[ke],Mt=i[ke];if(Mt!=null){let mn=0;Mt.toPrecision(An)<=Ve.current.minSize.toPrecision(An)?mn=a==="horizontal"?c:u:mn=-(a==="horizontal"?c:u);const jt=Mr($,l,k,p,mn,i,o.current,null);i!==jt&&r(jt)}}break}}};y.addEventListener("keydown",I);const M=Qw(k);return M!=null&&y.setAttribute("aria-controls",M.id),()=>{y.removeAttribute("aria-valuemax"),y.removeAttribute("aria-valuemin"),y.removeAttribute("aria-valuenow"),y.removeEventListener("keydown",I),M!=null&&y.removeAttribute("aria-controls")}});return()=>{h.forEach(y=>y())}},[e,t,n,o,r,i])}function Xw({disabled:e,handleId:t,resizeHandler:n}){Ct(()=>{if(e||n==null)return;const r=Ca(t);if(r==null)return;const i=o=>{if(!o.defaultPrevented)switch(o.key){case"ArrowDown":case"ArrowLeft":case"ArrowRight":case"ArrowUp":case"End":case"Home":{o.preventDefault(),n(o);break}case"F6":{o.preventDefault();const a=mh(),l=Kw(t);vh(l!==null);const s=o.shiftKey?l>0?l-1:a.length-1:l+1{r.removeEventListener("keydown",i)}},[e,t,n])}function Jw(e,t){if(e.length!==t.length)return!1;for(let n=0;nb.current.id===_),N=r[x];if(N.current.collapsible){const b=c[x];(b===0||b.toPrecision(An)===N.current.minSize.toPrecision(An))&&(p=p<0?-N.current.minSize*v:N.current.minSize*v)}return p}else return gh(e,n,i,l,s)}function e2(e){return e.type==="keydown"}function Cs(e){return e.type.startsWith("mouse")}function Ns(e){return e.type.startsWith("touch")}let Ps=null,xn=null;function yh(e){switch(e){case"horizontal":return"ew-resize";case"horizontal-max":return"w-resize";case"horizontal-min":return"e-resize";case"vertical":return"ns-resize";case"vertical-max":return"n-resize";case"vertical-min":return"s-resize"}}function t2(){xn!==null&&(document.head.removeChild(xn),Ps=null,xn=null)}function dl(e){if(Ps===e)return;Ps=e;const t=yh(e);xn===null&&(xn=document.createElement("style"),document.head.appendChild(xn)),xn.innerHTML=`*{cursor: ${t}!important;}`}function n2(e,t=10){let n=null;return(...i)=>{n!==null&&clearTimeout(n),n=setTimeout(()=>{e(...i)},t)}}function wh(e){return e.map(t=>{const{minSize:n,order:r}=t.current;return r?`${r}:${n}`:`${n}`}).sort((t,n)=>t.localeCompare(n)).join(",")}function _h(e,t){try{const n=t.getItem(`PanelGroup:sizes:${e}`);if(n){const r=JSON.parse(n);if(typeof r=="object"&&r!=null)return r}}catch{}return null}function r2(e,t,n){const r=_h(e,n);if(r){const i=wh(t);return r[i]??null}return null}function i2(e,t,n,r){const i=wh(t),o=_h(e,r)||{};o[i]=n;try{r.setItem(`PanelGroup:sizes:${e}`,JSON.stringify(o))}catch(a){console.error(a)}}const pl={};function Yf(e){try{if(typeof localStorage<"u")e.getItem=t=>localStorage.getItem(t),e.setItem=(t,n)=>{localStorage.setItem(t,n)};else throw new Error("localStorage not supported in this environment")}catch(t){console.error(t),e.getItem=()=>null,e.setItem=()=>{}}}const jr={getItem:e=>(Yf(jr),jr.getItem(e)),setItem:(e,t)=>{Yf(jr),jr.setItem(e,t)}};function Sh({autoSaveId:e,children:t=null,className:n="",direction:r,disablePointerEventsDuringResize:i=!1,forwardedRef:o,id:a=null,onLayout:l,storage:s=jr,style:u={},tagName:c="div"}){const f=Wu(a),[h,y]=qr(null),[v,w]=qr(new Map),k=Qe(null),p=Qe({onLayout:l});Ct(()=>{p.current.onLayout=l});const d=Qe({}),[m,_]=qr([]),x=Qe(new Map),N=Qe(0),b=Qe({direction:r,panels:v,sizes:m});fh(o,()=>({getLayout:()=>{const{sizes:D}=b.current;return D},setLayout:D=>{const E=D.reduce((B,G)=>B+G,0);vh(E===100,"Panel sizes must add up to 100%");const{panels:z}=b.current,A=d.current,j=We(z);_(D),jn(j,D,A)}}),[]),Xo(()=>{b.current.direction=r,b.current.panels=v,b.current.sizes=m}),qw({committedValuesRef:b,groupId:f,panels:v,setSizes:_,sizes:m,panelSizeBeforeCollapse:x}),Ct(()=>{const{onLayout:D}=p.current,{panels:E,sizes:z}=b.current;if(z.length>0){D&&D(z);const A=d.current,j=We(E);jn(j,z,A)}},[m]),Xo(()=>{if(b.current.sizes.length===v.size)return;let E=null;if(e){const z=We(v);E=r2(e,z,s)}if(E!=null)_(E);else{const z=We(v);let A=0,j=0,B=0;if(z.forEach(G=>{B+=G.current.minSize,G.current.defaultSize===null?A++:j+=G.current.defaultSize}),j>100)throw new Error("Default panel sizes cannot exceed 100%");if(z.length>1&&A===0&&j!==100)throw new Error("Invalid default sizes specified for panels");if(B>100)throw new Error("Minimum panel sizes cannot exceed 100%");_(z.map(G=>G.current.defaultSize===null?(100-j)/A:G.current.defaultSize))}},[e,v,s]),Ct(()=>{if(e){if(m.length===0||m.length!==v.size)return;const D=We(v);pl[e]||(pl[e]=n2(i2,100)),pl[e](e,D,m,s)}},[e,v,m,s]);const T=Bt((D,E)=>{const{panels:z}=b.current;return z.size===0?{flexBasis:0,flexGrow:E??void 0,flexShrink:1,overflow:"hidden"}:{flexBasis:0,flexGrow:ph(z,D,m),flexShrink:1,overflow:"hidden",pointerEvents:i&&h!==null?"none":void 0}},[h,i,m]),I=Bt((D,E)=>{w(z=>{if(z.has(D))return z;const A=new Map(z);return A.set(D,E),A})},[]),M=Bt(D=>z=>{z.preventDefault();const{direction:A,panels:j,sizes:B}=b.current,G=We(j),[ae,ye]=Gu(f,D,G);if(ae==null||ye==null)return;let ee=Zw(z,f,D,G,A,B,k.current);if(ee===0)return;const st=Yu(f).getBoundingClientRect(),ut=A==="horizontal";document.dir==="rtl"&&ut&&(ee=-ee);const ct=ut?st.width:st.height,ft=ee/ct*100,hn=Mr(z,j,ae,ye,ft,B,x.current,k.current),Fn=!Jw(B,hn);if((Cs(z)||Ns(z))&&N.current!=ft&&dl(Fn?ut?"horizontal":"vertical":ut?ee<0?"horizontal-min":"horizontal-max":ee<0?"vertical-min":"vertical-max"),Fn){const Na=d.current;_(hn),jn(G,hn,Na)}N.current=ft},[f]),$=Bt(D=>{w(E=>{if(!E.has(D))return E;const z=new Map(E);return z.delete(D),z})},[]),ke=Bt(D=>{const{panels:E,sizes:z}=b.current,A=E.get(D);if(A==null)return;const{collapsedSize:j,collapsible:B}=A.current;if(!B)return;const G=We(E),ae=G.indexOf(A);if(ae<0)return;const ye=z[ae];if(ye===j)return;x.current.set(D,ye);const[ee,Ne]=fl(D,G);if(ee==null||Ne==null)return;const ut=ae===G.length-1?ye:j-ye,ct=Mr(null,E,ee,Ne,ut,z,x.current,null);if(z!==ct){const ft=d.current;_(ct),jn(G,ct,ft)}},[]),Ve=Bt(D=>{const{panels:E,sizes:z}=b.current,A=E.get(D);if(A==null)return;const{collapsedSize:j,minSize:B}=A.current,G=x.current.get(D)||B;if(!G)return;const ae=We(E),ye=ae.indexOf(A);if(ye<0||z[ye]!==j)return;const[Ne,st]=fl(D,ae);if(Ne==null||st==null)return;const ct=ye===ae.length-1?j-G:G,ft=Mr(null,E,Ne,st,ct,z,x.current,null);if(z!==ft){const hn=d.current;_(ft),jn(ae,ft,hn)}},[]),Mt=Bt((D,E)=>{const{panels:z,sizes:A}=b.current,j=z.get(D);if(j==null)return;const{collapsedSize:B,collapsible:G,maxSize:ae,minSize:ye}=j.current,ee=We(z),Ne=ee.indexOf(j);if(Ne<0)return;const st=A[Ne];if(st===E)return;G&&E===B||(E=Math.min(ae,Math.max(ye,E)));const[ut,ct]=fl(D,ee);if(ut==null||ct==null)return;const hn=Ne===ee.length-1?st-E:E-st,Fn=Mr(null,z,ut,ct,hn,A,x.current,null);if(A!==Fn){const Na=d.current;_(Fn),jn(ee,Fn,Na)}},[]),mn=Vw(()=>({activeHandleId:h,collapsePanel:ke,direction:r,expandPanel:Ve,getPanelStyle:T,groupId:f,registerPanel:I,registerResizeHandle:M,resizePanel:Mt,startDragging:(D,E)=>{if(y(D),Cs(E)||Ns(E)){const z=Ca(D);k.current={dragHandleRect:z.getBoundingClientRect(),dragOffset:gh(E,D,r),sizes:b.current.sizes}}},stopDragging:()=>{t2(),y(null),k.current=null},unregisterPanel:$}),[h,ke,r,Ve,T,f,I,M,Mt,$]),jt={display:"flex",flexDirection:r==="horizontal"?"row":"column",height:"100%",overflow:"hidden",width:"100%"};return gr(ba.Provider,{children:gr(c,{children:t,className:n,"data-panel-group":"","data-panel-group-direction":r,"data-panel-group-id":f,style:{...jt,...u}}),value:mn})}const zs=uh((e,t)=>gr(Sh,{...e,forwardedRef:t}));Sh.displayName="PanelGroup";zs.displayName="forwardRef(PanelGroup)";function kh({children:e=null,className:t="",disabled:n=!1,id:r=null,onDragging:i,style:o={},tagName:a="div"}){const l=Qe(null),s=Qe({onDragging:i});Ct(()=>{s.current.onDragging=i});const u=ch(ba);if(u===null)throw Error("PanelResizeHandle components must be rendered within a PanelGroup container");const{activeHandleId:c,direction:f,groupId:h,registerResizeHandle:y,startDragging:v,stopDragging:w}=u,k=Wu(r),p=c===k,[d,m]=qr(!1),[_,x]=qr(null),N=Bt(()=>{l.current.blur(),w();const{onDragging:I}=s.current;I&&I(!1)},[w]);Ct(()=>{if(n)x(null);else{const T=y(k);x(()=>T)}},[n,k,y]),Ct(()=>{if(n||_==null||!p)return;const T=ke=>{_(ke)},I=ke=>{_(ke)},$=l.current.ownerDocument;return $.body.addEventListener("contextmenu",N),$.body.addEventListener("mousemove",T),$.body.addEventListener("touchmove",T),$.body.addEventListener("mouseleave",I),window.addEventListener("mouseup",N),window.addEventListener("touchend",N),()=>{$.body.removeEventListener("contextmenu",N),$.body.removeEventListener("mousemove",T),$.body.removeEventListener("touchmove",T),$.body.removeEventListener("mouseleave",I),window.removeEventListener("mouseup",N),window.removeEventListener("touchend",N)}},[f,n,p,_,N]),Xw({disabled:n,handleId:k,resizeHandler:_});const b={cursor:yh(f),touchAction:"none",userSelect:"none"};return gr(a,{children:e,className:t,"data-resize-handle-active":p?"pointer":d?"keyboard":void 0,"data-panel-group-direction":f,"data-panel-group-id":h,"data-panel-resize-handle-enabled":!n,"data-panel-resize-handle-id":k,onBlur:()=>m(!1),onFocus:()=>m(!0),onMouseDown:T=>{v(k,T.nativeEvent);const{onDragging:I}=s.current;I&&I(!0)},onMouseUp:N,onTouchCancel:N,onTouchEnd:N,onTouchStart:T=>{v(k,T.nativeEvent);const{onDragging:I}=s.current;I&&I(!0)},ref:l,role:"separator",style:{...b,...o},tabIndex:0})}kh.displayName="PanelResizeHandle";function xh(e,t){t(n=>{const r={...n};return r[e].show=!1,r})}const o2="_flowsheetHeader_main_container_1m03j_1",a2="_flowsheetHeader_title_1m03j_31",l2="_flowsheetHeader_icon_container_1m03j_43",s2="_flowsheet_header_icon_container_1m03j_55",u2="_flowsheetHader_icon_stroke_only_1m03j_65",c2="_flowsheetHeader_last_box_icon_1m03j_109",f2="_flowsheetHeader_small_icon_1m03j_123",d2="_flowsheetHeader_btn_with_icon_text_1m03j_151",ce={flowsheetHeader_main_container:o2,flowsheetHeader_title:a2,flowsheetHeader_icon_container:l2,flowsheet_header_icon_container:s2,flowsheetHader_icon_stroke_only:u2,flowsheetHeader_last_box_icon:c2,flowsheetHeader_small_icon:f2,flowsheetHeader_btn_with_icon_text:d2};function p2(){const{fvHeaderState:e,setFvHeaderState:t,setPanelState:n}=se.useContext(It),r=e.isShowSteamName,i=e.isShowLabels;function o(){t(l=>({...l,isShowSteamName:!l.isShowSteamName}))}function a(){t(l=>({...l,isShowLabels:!l.isShowLabels}))}return P.jsxs("div",{id:"flowsheet-header-component",className:`pd-md ${ce.flowsheetHeader_main_container}`,children:[P.jsx("p",{id:"flowsheet-header-component-title",className:ce.flowsheetHeader_title,children:"FLOWSHEET"}),P.jsxs("div",{className:ce.flowsheetHeader_icon_container,children:[P.jsxs("span",{id:"stream-names-toggle",className:`pd-sm ${ce.flowsheet_header_icon_container}`,onClick:o,"data-toggle":`${r}`,children:[r?P.jsx(ve,{icon:Uf,className:ce.flowsheetHader_icon_stroke_only}):P.jsx(ve,{icon:$f,className:ce.flowsheetHader_icon_stroke_only}),P.jsx("span",{className:`${ce.flowsheetHeader_btn_with_icon_text}`,children:"Stream Names"})]}),P.jsxs("span",{id:"show-label-toggle",className:`pd-sm ${ce.flowsheet_header_icon_container}`,onClick:a,"data-toggle":i?"false":"true",children:[i?P.jsx(ve,{icon:Uf,className:ce.flowsheetHader_icon_stroke_only}):P.jsx(ve,{icon:$f,className:ce.flowsheetHader_icon_stroke_only}),P.jsx("span",{className:`${ce.flowsheetHeader_btn_with_icon_text}`,children:"Labels"})]}),P.jsx("span",{id:"zoom-in-btn",className:`pd-sm ${ce.flowsheet_header_icon_container}`,children:P.jsx(ve,{icon:Nw,className:ce.flowsheetHader_icon_stroke_only})}),P.jsx("span",{id:"zoom-out-btn",className:`pd-sm ${ce.flowsheet_header_icon_container}`,children:P.jsx(ve,{icon:Pw,className:ce.flowsheetHader_icon_stroke_only})}),P.jsx("span",{id:"zoom-to-fit",className:`pd-sm ${ce.flowsheet_header_icon_container} ${ce.flowsheetHeader_last_box_icon}`,children:P.jsx(ve,{icon:bw})}),P.jsx("span",{id:"minimize-flowsheet-panel-btn",className:`pd-sm ${ce.flowsheet_header_icon_container} + ${ce.flowsheetHeader_small_icon}`,onClick:()=>xh("fv",n),children:P.jsx(ve,{icon:sh})})]})]})}const m2="_minimized_bar_container_1qef8_1",h2="_minimized_bar_ul_1qef8_9",v2="_minimized_bar_li_1qef8_23",ml={minimized_bar_container:m2,minimized_bar_ul:h2,minimized_bar_li:v2};function g2(){const{panelState:e,setPanelState:t}=se.useContext(It),n=["fvWrapper"];function r(a,l){const s=[];return Object.keys(a).forEach(c=>{s.push(a[c])}),s.map((c,f)=>{if(!l.includes(c.panelName)&&!c.show)return P.jsxs("li",{className:`${ml.minimized_bar_li}`,onClick:h=>i(c.panelName),children:[c.panelName," +"]},c.panelName+f)})}function i(a){t(l=>{const s={...l};return Object.keys(s).forEach(u=>{s[u].panelName===a&&(s[u].show=!s[u].show)}),s})}const o=r(e,n);return P.jsx("div",{className:`${ml.minimized_bar_container} pd-sm`,children:P.jsx("ul",{className:`${ml.minimized_bar_ul}`,children:o})})}const y2="_fvContainer_1xen1_1",w2="_fv_1xen1_1",Gf={fvContainer:y2,fv:w2};function _2(){const{panelState:e,cells:t}=se.useContext(It),n=e.fv.show;return P.jsxs(P.Fragment,{children:[P.jsx("h1",{children:{}.VITE_TEST}),n&&P.jsx("section",{id:"fvContainer",className:`${Gf.fvContainer}`,children:P.jsx("div",{id:"fv",className:`${Gf.fv}`})})]})}const S2="_stream_table_header_main_container_1y8im_1",k2="_stream_table_header_fn_row_1y8im_13",x2="_stream_table_right_container_1y8im_31",E2="_stream_table_title_1y8im_47",b2="_hideFieldBtn_1y8im_63",C2="_dropdownMenu_1y8im_105",N2="_flowsheet_header_icon_container_1y8im_217",P2="_flowsheetHeader_small_icon_1y8im_227",$t={stream_table_header_main_container:S2,stream_table_header_fn_row:k2,stream_table_right_container:x2,stream_table_title:E2,hideFieldBtn:b2,dropdownMenu:C2,flowsheet_header_icon_container:N2,flowsheetHeader_small_icon:P2};function z2(){const{setPanelState:e}=se.useContext(It),[t,n]=se.useState(!1);function r(){document.getElementById("hide-fields-list"),n(i=>!i)}return P.jsxs("div",{className:`${$t.stream_table_header_main_container}`,children:[P.jsxs("div",{className:`mb-md pd-md ${$t.stream_table_header_fn_row}`,children:[P.jsx("p",{className:$t.stream_table_title,children:"STREAM TABLE"}),P.jsxs("div",{id:"stream_table_header_right_container",className:`${$t.stream_table_right_container}`,children:[P.jsxs("div",{id:"hide-fields-dropdown",className:`nav-link dropdown-toggle idaes-nav-button ${$t.hideFieldBtn}`,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",onClick:r,children:[P.jsx("span",{children:"Hide Fields"}),P.jsx("ul",{id:"hide-fields-list",className:`dropdown-menu checkbox-menu ${$t.dropdownMenu}`,style:{display:t?"block":"none"}})]}),P.jsx("span",{id:"minimize-streamtable-panel-btn",className:`pd-sm ${$t.flowsheet_header_icon_container} + ${$t.flowsheetHeader_small_icon}`,onClick:()=>xh("streamTable",e),children:P.jsx(ve,{icon:sh})})]})]}),P.jsx("div",{id:"existing-variable-types",className:"pd-md streamtable-vartype-panel"})]})}function T2(){return P.jsx(P.Fragment,{children:P.jsxs("div",{id:"stream-table",className:"idaes-container",style:{display:"block"},children:[P.jsx(z2,{}),P.jsx("div",{id:"stream-table-container",className:"pd-md tableContainer",children:P.jsx("div",{id:"stream-table-data",className:"ag-theme-alpine"})})]})})}const Ts={attrs:{g:{},text:{display:"block","font-size":"7","text-anchor":"left"},rect:{width:"2000",height:"2000",fill:"white",rx:0,ry:0,"fill-opacity":"1"},tspan:{fill:"white",dy:10}}},Os={attrs:{text:{display:"none"},rect:{"fill-opacity":"0"}}},Jo=0,Qf=1;class O2{constructor(t){F(this,"_app");F(this,"joint");F(this,"_originalLinkStroke");F(this,"_originalLinkStrokeWidth");F(this,"_highlightLinkStroke");F(this,"_highlightLinkStrokeWidth");F(this,"_graph");F(this,"_paper");F(this,"_paperScroller");F(this,"_selection");this._app=t;let n=joint.shapes.standard,r=800,i=800,o=1;this._originalLinkStroke="#979797",this._originalLinkStrokeWidth=2,this._highlightLinkStroke="#0B79BD",this._highlightLinkStrokeWidth=4,this._graph=new joint.dia.Graph([],{cellNamespace:{standard:n}}),this._paper=new joint.dia.Paper({model:this._graph,cellViewNamespace:{standard:n},width:r,height:i,gridSize:o,drawGrid:!1,interactive:!0}),this._paperScroller=new joint.ui.PaperScroller({padding:100,paper:this._paper,autoResizePaper:!0,scrollWhileDragging:!0,baseWidth:10,baseHeight:10,cursor:"grab"}),this._selection=new joint.ui.Selection({paper:this._paper}),this._selection.removeHandle("remove"),this._selection.removeHandle("rotate"),this._selection.removeHandle("resize"),self=this,document.getElementById("fv").append(self._paperScroller.render().el),self.preSetupRegisterEvents()}get graph(){return this._graph}set graph(t){this._graph.fromJSON(t)}get paper(){return self._paper}get paperScroller(){return self._paperScroller}get selection(){return self._selection}translate_for_angle(t){return{0:[0,5],90:[38,-35],180:[0,-72],270:[-38,-34]}[t]}preSetupRegisterEvents(){this._graph.on("change:position change:angle change:vertices",()=>{this._app.graphChanged()});let t=document.getElementById("fv");t||console.error("idaes canvas is not found");const n=document.querySelector("#stream-table-data");t.addEventListener("HighlightStream",r=>{const i=t.querySelector(`[model-id=${r.detail.streamId}]`);i&&i.dispatchEvent(new Event("HighlightStream"))}),t.addEventListener("RemoveHighlightStream",r=>{const i=t.querySelector(`[model-id=${r.detail.streamId}]`);i&&i.dispatchEvent(new Event("RemoveHighlightStream"))}),self._paper.on("blank:pointerdown",self._selection.startSelecting),self._paper.on("element:pointerup",function(r,i){console.log("work"),(i.shiftKey||i.metaKey)&&self._selection.collection.add(r.model)}),self._selection.on("selection-box:pointerdown",function(r,i){(i.shiftKey||i.metaKey)&&self._selection.collection.remove(r.model)}),self._paper.on("element:contextmenu",function(r,i){r.model.rotate(90);const o=r.model.angle(),a=self.translate_for_angle(o,0,0);a===void 0?console.error(`Angle of unit model must be either 0, 90, 180, or 270. Angle is ${o}`):r.model.attr("label/transform",`translate(${a[0]}, ${a[1]}) rotate(-${o})`)}),self._paper.on("link:mouseenter",function(r){let i=document.querySelector("#stream-table-data"),o=document.querySelector("#fv");if(!i||!o)return;let a=new joint.linkTools.Vertices({focusOpacity:.5,redundancyRemoval:!0,snapRadius:20,vertexAdding:!0}),l=new joint.linkTools.Segments,s=new joint.dia.ToolsView({tools:[a,l]});r.addTools(s),r.showTools();const u=new CustomEvent("HighlightStream",{detail:{streamId:r.model.id}});o.dispatchEvent(u),i.dispatchEvent(u)}),self._paper.on("link:mouseleave",function(r){r.hideTools();const i=new CustomEvent("RemoveHighlightStream",{detail:{streamId:r.model.id}});t.dispatchEvent(i),n.dispatchEvent(i)}),self._paper.on("link:contextmenu",function(r,i){r.model.label(Jo).attrs.text.display==="none"?r.model.label(Jo,Ts):r.model.label(0,Os)})}zoomToFit(t=30){this._paperScroller.zoomToFit({padding:t})}postSetupRegisterEvents(){this.zoomToFit(),this._graph.getLinks().forEach(t=>{let n=t.findView(this._paper);n.el.addEventListener("HighlightStream",()=>{n.model.attr({line:{stroke:this._highlightLinkStroke,"stroke-width":this._highlightLinkStrokeWidth}})}),n.el.addEventListener("RemoveHighlightStream",()=>{n.model.attr({line:{stroke:this._originalLinkStroke,"stroke-width":this._originalLinkStrokeWidth}})})})}reorderLabel(t){let n=null,r=null;if(t.cells.forEach((o,a)=>{o.id.includes("liq")&&(n=a),o.id.includes("vap")&&(r=a)}),!n||!r)return;const i=t.cells[n];t.cells[n]=t.cells[r],t.cells[r]=i,t.cells[n]}setup(t){const n="/assets/image/flowsheet_icons/";t.cells.reverse(),t.cells.forEach(r=>{if(r.type==="standard.Image"){let i=n+r.attrs.image.xlinkHref.match(/([^\/]+\.svg)$/)[0];r.attrs.image={...r.attrs.image,xlinkHref:i}}r.labels&&(r.z=1e3,r.labels[0])}),this.reorderLabel(t),this._graph.fromJSON(t),this.postSetupRegisterEvents()}}class L2{constructor(t){F(this,"_model");this._model=t}get model(){return this._model}set model(t){this._model=t}findCellIndex(t,n){for(let r=0;r{const a=o.getEndAnchor("source"),l=o.getEndAnchor("target"),s=new g.Point(a.x+t.source.x,a.y+t.source.y),u=new g.Point(l.x+t.destination.x,l.y+t.destination.y),c=o.getEndView("source").model.angle(),f=o.getEndView("target").model.angle(),h=c%180===0?1:-1,y=f%180===0?1:-1,v=s.rotate(a,h*c),w=u.rotate(l,y*f);return joint.routers.manhattan([v,...r,w],i,o)}}processRoutingConfig(){const t=this._model.routing_config;for(let n in t){const r=this.findCellIndex(n,"standard.Link");let i=t[n].cell_config.gap,o=this.routerGapFnFactory(i);this._model.cells[r].router=o}return this._model.cells.map(n=>{if(n.labels&&n.labels[1].position)return n.labels.reverse(),n}),this._model}}class A2{constructor(t,n){F(this,"_app");F(this,"UNFIXED","unfixed");F(this,"FIXED","fixed");F(this,"PARAMETER","parameter");F(this,"EXPRESSION","expression");F(this,"highlightFn");F(this,"removeHighlightFn");F(this,"gridCellMouseEnterFn");F(this,"gridCellMouseLeaveFn");F(this,"existing_var_types");F(this,"_gridOptions");this._app=t,this.defineTableBrushingFns(),this.initTable(n),this.existing_var_types=new Set}initTable(t){this.clearTable(),this.emptyVarTypesPanel(),this.fillTable(t),this.setupEvents()}clearTable(){const t=document.querySelector("#stream-table-data");t&&(t.innerHTML="")}emptyVarTypesPanel(){this.existing_var_types=new Set;const t=document.querySelector("#existing-variable-types");t.innerHTML=""}fillVarTypesPanel(){const t=document.querySelector("#existing-variable-types"),n="streamtable-vartype-element";if(this.existing_var_types.has(this.FIXED)||this.existing_var_types.has(this.PARAMETER)||this.existing_var_types.has(this.EXPRESSION)){const r=document.createElement("p");r.innerHTML="Annotated Variable Types:",r.className=n,t.appendChild(r)}this.existing_var_types.forEach(r=>{switch(r){case this.UNFIXED:console.debug("Unfixed variables don't have a visual indicator");break;case this.FIXED:case this.PARAMETER:case this.EXPRESSION:const i=document.createElement("span");i.className=n;const o=document.createElement("span"),a=document.createElement("span");a.className="streamtable-vartype-text",o.className=`streamtable-vartype-${r}`,o.title=r,a.innerHTML=r,i.appendChild(o),i.appendChild(a),t.appendChild(i);break;default:console.warn("Couldn't identify Variable type")}})}fillTable(t){let n=t.model.stream_table;const r=document.querySelector("#hide-fields-list");r&&(r.innerHTML="");let i=n.columns,o=[];for(let y in i){let v=i[y];if(v!==""&&v!=="Units"&&!v.includes("_vartype"))if(v==="Variable")o.push({headerName:v,field:v,filter:"agTextColumnFilter",sortable:!0,resizable:!0,pinned:"left",cellRenderer:w=>''+w.value+""});else{o.push({headerName:v,field:v,filter:"agTextColumnFilter",sortable:!0,resizable:!0,cellRenderer:p=>''+p.value+""});let w=document.createElement("li"),k=document.createElement("div");k.className="checkbox",k.innerHTML=` + + `,w.appendChild(k),r.appendChild(w)}}let a=n.index,l=n.data,s=[],u="Variable";for(let y in a){let v={},w=l[y];for(let k in i)if(i[k]==="Units")w[k]&&w[k].html?v[u]=v[u]+''+w[k].html+"":v[u]=v[u]+'';else if(i[k]==="Variable")v[i[k]]=w[k];else{var[c,f]=w[k];let p="";switch(f){case this.UNFIXED:this.existing_var_types.add(f);break;case this.FIXED:case this.PARAMETER:case this.EXPRESSION:this.existing_var_types.add(f),p=``;break;default:console.warn(`Couldn't identify Variable type: ${f}`)}v[i[k]]=p+''+c+""}s.push(v)}this.fillVarTypesPanel(),this._gridOptions={columnDefs:o,rowData:s,suppressColumnVirtualisation:!0},this._gridOptions.getRowStyle=function(y){if(y.node.rowIndex%2===0)return{background:"#f3f3f3"}};let h=document.querySelector("#stream-table-data");new agGrid.Grid(h,this._gridOptions),this._gridOptions.columnApi.autoSizeAllColumns()}defineTableBrushingFns(){let t=document.querySelector("#stream-table-data"),n=document.querySelector("#fv");!t||!n||(this.highlightFn=r=>{let i=t.querySelectorAll(`[col-id=${r.detail.streamId}]`);i.forEach((o,a)=>{o.getAttribute("role")=="columnheader"?o.classList.add("link-streamtable-hover-columnheader"):a==i.length-1?o.classList.add("link-streamtable-hover-lastrow"):o.classList.add("link-streamtable-hover")})},this.removeHighlightFn=r=>{console.log("remove hight light"),t.querySelectorAll(`[col-id=${r.detail.streamId}]`).forEach(o=>{o.classList.remove("link-streamtable-hover-columnheader"),o.classList.remove("link-streamtable-hover-lastrow"),o.classList.remove("link-streamtable-hover")})},this.gridCellMouseEnterFn=r=>{const i=r.target.getAttribute("col-id");if(i){const o=new CustomEvent("HighlightStream",{detail:{streamId:i}});t.dispatchEvent(o),n.dispatchEvent(o)}},this.gridCellMouseLeaveFn=r=>{const i=r.target.getAttribute("col-id"),o=new CustomEvent("RemoveHighlightStream",{detail:{streamId:i}});t.dispatchEvent(o),n.dispatchEvent(o)})}registerTableBrushing(){let t=document.querySelector("#stream-table-data");document.querySelector("#fv");let n=document.querySelectorAll("[col-id]");t.removeEventListener("HighlightStream",this.highlightFn),t.removeEventListener("RemoveHighlightStream",this.removeHighlightFn),n.forEach(r=>{r.removeEventListener("mouseenter",this.gridCellMouseEnterFn),r.removeEventListener("mouseleave",this.gridCellMouseLeaveFn)}),t.addEventListener("HighlightStream",this.highlightFn),t.addEventListener("RemoveHighlightStream",this.removeHighlightFn),n.forEach(r=>{r.addEventListener("mouseenter",this.gridCellMouseEnterFn),r.addEventListener("mouseleave",this.gridCellMouseLeaveFn)})}setupEvents(){let n=document.querySelector("#hide-fields-list").querySelectorAll("input[type=checkbox]"),r=this;n.forEach(function(i){i.addEventListener("change",function(o){var s;o.preventDefault();let a=o.target,l=(s=a.parentElement)==null?void 0:s.querySelector("span");a.checked?(l.style.display="block",r._gridOptions.columnApi.setColumnVisible(a.id,!0),r.registerTableBrushing()):(l.style.display="none",r._gridOptions.columnApi.setColumnVisible(a.id,!1))})}),this.registerTableBrushing()}}class R2{constructor(t,n,r,i,o,a,l){F(this,"_app");F(this,"_paper");F(this,"_stream_table");F(this,"flowsheetId");F(this,"getFSUrl");F(this,"putFSUrl");F(this,"isFvShow");F(this,"zoomRate");F(this,"toggleStreamNameBtn");F(this,"toggleLabelsBtn");F(this,"zoomInBtn");F(this,"zoomOutBtn");F(this,"zoomFitBtn");F(this,"zoomInHandler");F(this,"zoomOutHandler");F(this,"zoomFitHandler");this._app=t,this._paper=n,this._stream_table=r,this.flowsheetId=i,this.getFSUrl=o,this.putFSUrl=a,this.isFvShow=l,this.zoomRate=.2,this.zoomInHandler=void 0,this.zoomOutHandler=void 0,this.zoomFitHandler=void 0,this.registerEventExportFlowsheetToPng(),this.registerEventRefresh(this.getFSUrl,this.putFSUrl),this.registerEventSave(this.putFSUrl),this.zoomInBtn=document.querySelector("#zoom-in-btn"),this.zoomOutBtn=document.querySelector("#zoom-out-btn"),this.zoomFitBtn=document.querySelector("#zoom-to-fit"),l&&(this.toggleStreamNameBtn=document.querySelector("#stream-names-toggle"),this.toggleStreamNameBtn&&this.registerToggleStreamNamesEvent(this.toggleStreamNameBtn),this.toggleLabelsBtn=document.querySelector("#show-label-toggle"),this.toggleLabelsBtn&&this.registerEventToggleLabel(this.toggleLabelsBtn),this.zoomInBtn&&this.zoomOutBtn&&this.zoomFitBtn&&this.registerZoomEvent(this.zoomInBtn,this.zoomOutBtn,this.zoomFitBtn))}registerZoomEvent(t,n,r){this.zoomInHandler=()=>this.zoomInEvent(this._paper.paperScroller,this.zoomRate),this.zoomOutHandler=()=>this.zoomOutEvent(this._paper.paperScroller,this.zoomRate),this.zoomFitHandler=()=>this.zoomFitEvent(),t.addEventListener("click",this.zoomInHandler),n.addEventListener("click",this.zoomOutHandler),r.addEventListener("click",this.zoomFitHandler)}zoomInEvent(t,n){t.zoom(n,{max:100})}zoomOutEvent(t,n){t.zoom(-n,{min:.01})}zoomFitEvent(){this._paper.zoomToFit()}registerToggleStreamNamesEvent(t){t.addEventListener("click",()=>{t.getAttribute("data-toggle")==="true"?this._paper._graph.getLinks().forEach(function(r){r.label(Qf,Os)}):this._paper._graph.getLinks().forEach(function(r){r.label(Qf,Ts)})})}registerEventExportFlowsheetToPng(){document.querySelector("#headerExportImageBtn").addEventListener("click",()=>{let n=this._paper.paper;const r=this.flowsheetId;n.hideTools(),n.toPNG(function(i){new joint.ui.Lightbox({image:i,downloadable:!0,fileName:r.concat(".png")}).open()},{scale:2,pixelRatio:2,preserveDimensions:!0,convertImagesToDataUris:!0,useComputedStyles:!0,stylesheet:".scalable * { vector-effect: non-scaling-stroke }"})})}registerEventToggleLabel(t){t.addEventListener("click",()=>{t.getAttribute("data-toggle")=="true"?this._paper._graph.getLinks().forEach(function(r){r.label(Jo,Ts)}):this._paper._graph.getLinks().forEach(function(r){r.label(Jo,Os)})})}registerEventRefresh(t,n){document.querySelector("#refresh_btn").addEventListener("click",()=>{this._app.refreshModel(t,n,this._paper)})}registerEventSave(t){document.querySelector("#save_btn").addEventListener("click",()=>{this._app.saveModel(t,this._paper.graph)})}cleanUpEvent(){let t=document.getElementById("zoom-in-btn"),n=document.getElementById("zoom-out-btn"),r=document.getElementById("zoom-to-fit");if(t){let i=t.cloneNode(!0);t.parentNode.replaceChild(i,t)}if(n){let i=n.cloneNode(!0);n.parentNode.replaceChild(i,n)}if(r){let i=r.cloneNode(!0);r.parentNode.replaceChild(i,r)}}}class I2{constructor(t,n,r,i,o){F(this,"flowsheetId");F(this,"isFvShow");F(this,"isStreamTableShow");F(this,"baseUrl");F(this,"getFSUrl");F(this,"putFSUrl");F(this,"model");F(this,"paper");F(this,"_is_graph_changed");F(this,"_save_time_interval_key");F(this,"_default_save_time_interval");F(this,"_save_time_interval");F(this,"stream_table");F(this,"toolbar");F(this,"cleanToolBarEvent");this.flowsheetId=t,this.isFvShow=r,this.isStreamTableShow=o,this.baseUrl=`http://localhost:${n}`,this.getFSUrl=`/fs?id=${t}`,this.putFSUrl=`/fs?id=${t}`,this.model={},r&&(this.paper=new O2(this)),this._is_graph_changed=!1,this._save_time_interval_key="save_time_interval",this._default_save_time_interval=5e3,this._save_time_interval=this.getSaveTimeInterval(),this.setupGraphChangeChecker(this._save_time_interval,t),this.setGetFSUrl(),Dn.get(this.getFSUrl).then(a=>{this.model=a.data,r&&this.renderModel(this.model),o&&(this.stream_table=new A2(this,this.model)),this.toolbar=new R2(this,this.paper,this.stream_table,this.flowsheetId,this.getFSUrl,this.putFSUrl,this.isFvShow),this.cleanToolBarEvent=this.toolbar.cleanUpEvent}).catch(a=>{console.log(a.message),console.log(a.response.status)}),this.fvExtraContentCleanUp()}setGetFSUrl(){let t=new URLSearchParams(window.location.search);if(!t.get("example"))return;let n=parseInt(t.get("example")),r=["example_1","example_2","example_3","example_4","example_5","example_6","example_7"];n<0||n>r.length||(this.getFSUrl=`/assets/testing_data/example_${n}.json`)}renderModel(t){const r=new L2(t).processRoutingConfig();this.paper.setup(r)}debug_removeFlowsheetPosition(t){let n=5;t.cells.forEach(r=>{n+=150,r.position&&(r.position={x:n,y:void 0})})}informUser(t,n){switch(t){case 0:console.log(n);break;case 1:console.warn(n);break;case 2:console.error(n);break;default:console.log(n)}}refreshModel(t,n,r){this.informUser(0,"Refresh: save current values from model");let i=r.graph,o=JSON.stringify(i.toJSON());Dn.put(n,o,{headers:{"Content-Type":"application/json"}}).then(()=>(this.informUser(0,"Refresh: load new model values from Python program"),Dn.get(t,{responseType:"json"}))).then(a=>{const l=a.data;this.isStreamTableShow&&(document.getElementById("hide-fields-list").innerHTML=""),this.renderModel(l),this.stream_table.initTable(l)}).catch(a=>{a.response?this.informUser(2,"Fatal error: cannot save current model before refresh: "+a.response.data):this.informUser(2,"Fatal error: Could not retrieve new model from Python program: "+a.message)})}getSaveTimeInterval(){let t=`${this.baseUrl}/setting?setting_key=${this._save_time_interval_key}`,n=this._default_save_time_interval;return Dn.get(t,{headers:{"Content-Type":"application/json"}}).then(r=>{r.data.value!="None"?n=r.data.value:this.informUser(1,`Warning: save_time_interval was not set correctly. Default time value of + ${this._default_save_time_interval.toString()} + will be set.`)}).catch(r=>{this.informUser(2,"Fatal error: cannot get setting value: "+r)}),n}graphChanged(){this._is_graph_changed=!0}setupGraphChangeChecker(t,n){let r=this.putFSUrl;var i=setInterval(()=>{this._is_graph_changed&&(this.saveModel(r,this.paper.graph),this._is_graph_changed=!1)},t);return i}saveModel(t,n){let r=JSON.stringify(n.toJSON());Dn.put(t,r,{headers:{"Content-Type":"application/json"}}).then(i=>{console.log("saved"),this.informUser(0,"Saved new model values")}).catch(i=>{this.informUser(2,"Fatal error: cannot save current model: "+i)})}fvExtraContentCleanUp(){let t=document.getElementById("fv");if(!(!t||t.childNodes.length<=1))for(t.childNodes[(t==null?void 0:t.childNodes.length)-1];t.firstChild!==t.lastChild;)t.removeChild(t.firstChild)}}const F2="_flowsheetWrapper_ve8q2_1",M2={flowsheetWrapper:F2};function j2(){let{server_port:e,fv_id:t,panelState:n}=se.useContext(It);const r=n.fv.show,i=n.streamTable.show,o={display:"block"},a={display:"none"};return se.useEffect(()=>{e=="5173"?e="8099":e=e;const l=new I2(t,e,r,!1,i);return()=>{l.cleanToolBarEvent()}},[r,i]),P.jsxs("div",{id:"flowsheet-wrapper",className:M2.flowsheetWrapper,children:[P.jsx(g2,{}),P.jsxs(zs,{direction:"vertical",id:"flowsheet-wrapper",children:[P.jsx(So,{maxSize:100,defaultSize:65,style:r?o:a,children:P.jsx(zs,{direction:"horizontal",children:P.jsxs(So,{defaultSize:r?70:0,minSize:0,children:[P.jsx(p2,{}),P.jsx(_2,{})]})})}),P.jsx(kh,{className:"panelResizeHandle panelResizeHandle_horizontal"}),i&&P.jsx(So,{maxSize:100,defaultSize:35,style:i?o:a,children:P.jsx(T2,{})})]})]})}function D2(){return P.jsxs("main",{id:"main",className:"main",children:[P.jsx(Uw,{}),P.jsx(j2,{})]})}hl.createRoot(document.getElementById("root")).render(P.jsx(h1,{children:P.jsx(D2,{})})); diff --git a/idaes_ui/fv/static/assets/index-9b083374.css b/idaes_ui/fv/static/assets/index-9b083374.css new file mode 100644 index 00000000..c6fef686 --- /dev/null +++ b/idaes_ui/fv/static/assets/index-9b083374.css @@ -0,0 +1 @@ +._headerLogoContainer_k1rkm_1{display:flex;flex-direction:row;align-items:center;gap:5px}._headerLogo_k1rkm_1{max-width:70px}._headerLogoText_k1rkm_23{color:#fff;font-size:35px;font-weight:300}._header_flowsheet_name_1wktw_1{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);color:#fff}._header_fn_btn_wrapper_li_sks9h_1{cursor:pointer;position:relative}._header_fn_btn_wrapper_li_sks9h_1:hover ._header_fn_btn_hover_ul_sks9h_13,._header_fn_btn_hover_ul_sks9h_13:hover{cursor:pointer;display:flex}._header_fn_btn_hover_ul_sks9h_13{display:none;flex-direction:column;gap:7px;position:absolute;top:0px;right:0;min-width:175px;padding:10px;margin-top:20px;margin-bottom:200px;border-radius:4px;background-color:#fff;box-shadow:0 4px 4px #909090}._header_fn_btn_hover_ul_sks9h_13>li{display:flex;flex-direction:row;justify-content:space-between;color:#000}._header_fn_btn_each_view_sks9h_139{border-bottom:1px solid white}._header_fn_btn_each_view_sks9h_139:hover{cursor:pointer;border-bottom:1px solid black}._header_fn_btn_wrapper_ul_1qki9_1{display:flex;flex-direction:row;gap:20px;list-style:none;color:#fff}.header_each_btn:hover{cursor:pointer}._header_container_1kd62_1{display:flex;flex-direction:row;justify-content:space-between;align-items:center;background-color:var(--black);position:relative}._flowsheetHeader_main_container_1m03j_1{display:flex;flex-direction:row;justify-content:space-between;align-items:center;width:100%;border-bottom:1px solid rgb(16,16,16)}@media (max-width: 900px){._flowsheetHeader_main_container_1m03j_1{flex-direction:column}}._flowsheetHeader_title_1m03j_31{font-weight:700;font-size:20px;color:#101010}._flowsheetHeader_icon_container_1m03j_43{display:flex;justify-content:flex-start;align-items:center}._flowsheet_header_icon_container_1m03j_55{padding:10px!important;border:1px solid black}._flowsheetHader_icon_stroke_only_1m03j_65{color:#fff;stroke:#000;stroke-width:40px}._flowsheetHeader_icon_container_1m03j_43>span{border-right:none}._flowsheetHeader_icon_container_1m03j_43>span:hover{cursor:pointer;color:#fff;background-color:#161616;transition:.3s ease-in-out}._flowsheetHeader_icon_container_1m03j_43 span:first-child{border-top-left-radius:6px;border-bottom-left-radius:6px}._flowsheetHeader_last_box_icon_1m03j_109{margin-right:20px;border-top-right-radius:6px;border-bottom-right-radius:6px;border-right:1px solid rgb(16,16,16)!important}._flowsheetHeader_small_icon_1m03j_123{display:flex;flex-direction:column;justify-content:center;align-items:center;width:30px;height:30px;margin-right:10px;padding:5px!important;background-color:#d9d9d9;border:none;border-radius:6px}._flowsheetHeader_btn_with_icon_text_1m03j_151{margin-left:5px}._minimized_bar_container_1qef8_1{width:100%}._minimized_bar_ul_1qef8_9{display:flex;flex-direction:row;gap:15px;list-style:none}._minimized_bar_li_1qef8_23{padding:5px 10px;border:1px solid black;border-radius:4px}._minimized_bar_li_1qef8_23:hover{cursor:pointer;color:#fff;background-color:#000;transition:.3s ease-in-out}._fvContainer_1xen1_1{position:relative;width:100%;height:94%}._fv_1xen1_1{position:relative;width:100%;height:100%}._stream_table_header_main_container_1y8im_1{display:flex;flex-direction:column;justify-content:flex-start}._stream_table_header_fn_row_1y8im_13{display:flex;flex-direction:row;justify-content:space-between;align-items:center;border-bottom:1px solid black}._stream_table_right_container_1y8im_31{display:flex;flex-direction:row;align-items:center;gap:20px}._stream_table_title_1y8im_47{font-weight:700;font-size:20px;color:#101010}._hideFieldBtn_1y8im_63{padding:10px 20px;border:1px solid black;border-radius:6px;position:relative}._hideFieldBtn_1y8im_63>span{color:#000}._hideFieldBtn_1y8im_63:hover{cursor:pointer;background-color:#101010;transition:.3s ease-in-out}._hideFieldBtn_1y8im_63:hover>span{color:#fff}._dropdownMenu_1y8im_105{display:flex;flex-direction:column;gap:10px;position:absolute;top:70%;right:-6%;z-index:10;min-width:300px;max-height:500px;padding:15px;list-style:none;overflow-y:scroll;text-align:left;background-color:#fff;box-shadow:1px 2px 15px #d7d7d7}._dropdownMenu_1y8im_105::-webkit-scrollbar{width:0}._dropdownMenu_1y8im_105>li{width:100%;margin-bottom:10px}._dropdownMenu_1y8im_105>li>div>label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:5px 10px}._dropdownMenu_1y8im_105>li>div>label:hover{cursor:pointer;box-shadow:1px 2px 15px #d7d7d7;transition:.3s ease-in-out}._dropdownMenu_1y8im_105>li>div>label{display:flex;flex-direction:row;justify-content:space-between;gap:20px;width:100%}._dropdownMenu_1y8im_105>li>div>label>input{width:0;height:0;display:none}._flowsheet_header_icon_container_1y8im_217{padding:10px!important;border:1px solid black}._flowsheetHeader_small_icon_1y8im_227:hover{cursor:pointer;color:#fff;background-color:#161616;transition:.3s ease-in-out}._flowsheetHeader_small_icon_1y8im_227{display:flex;flex-direction:column;justify-content:center;align-items:center;width:30px;height:30px;margin-right:10px;padding:5px!important;background-color:#d9d9d9;border:none;border-radius:6px}body{font-family:oxygen,sans-serif;background:white;background-size:cover}hr{border:0;clear:both;display:block;width:100%;background-color:#d0d0d0;height:1px;margin:5px 0 0}hr.dotted{border-top:2px dotted #bbb;margin-bottom:10px}#idaes-header{margin:20px auto 10px;width:90%}.idaes-page{display:flex;flex-direction:column;justify-content:flex-start;height:100%}.idaes-titlebar{display:flex;flex-direction:row;justify-content:flex-start;flex-grow:0}#idaes_logo img{height:80px}#idaes-fs-name{font-size:125%;font-family:Raleway,sans-serif;margin-top:auto;margin-bottom:auto;margin-left:3em}#idaes-canvas{position:relative}#idaes-toolbar-flowsheet{justify-content:flex-end;position:absolute;top:20px;right:40px;width:500px;height:40px;z-index:1}#idaes-titlebar-right{width:100px}.idaes-content{display:flex;flex-grow:1}.idaes-palette{display:flex;flex-direction:column;align-items:center}.idaes-container{resize:vertical;overflow:auto}#idaes-page-contents{background-color:#f3f3f3}.idaes-palette div{color:#1e90ff}.idaes-palette div.idaes-groupsep{height:3px;width:80%;background:#e5e5e5;margin:5px 0}.idaes-toolbar-shadow{top:60px;right:0;left:0;z-index:28;height:5px;background:linear-gradient(rgb(219,219,219),rgb(243,243,243)) repeat-x 0 0;border-top:1px solid rgb(243,243,243)}.fancy-checkbox input[type=checkbox],.fancy-checkbox .checked{display:none}.fancy-checkbox input[type=checkbox]:checked~.checked{display:inline-block}.fancy-checkbox input[type=checkbox]:checked~.unchecked{display:none}.checked,.unchecked{padding-right:5px;padding-left:5px}.dropdown-toggle[aria-expanded=true]{border-radius:3px;border:solid 1px #0b79bd;background-color:#e2eff7}.checkbox-menu{margin-top:17px}.circle-icon{width:26px;height:26px;margin:0;padding:4px 0 5px;background-color:#0b79bd;border-radius:50%;text-align:center;line-height:20px;vertical-align:middle}.btn,.btn:hover{color:#fff;margin:0;padding:0}.btn-label{margin-bottom:2px;display:inline-block}.switch{position:relative;display:inline-block;width:30px;height:17px;margin-top:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:"";height:13px;width:13px;left:2px;bottom:2px;background-color:#fff;-webkit-transition:.4s;transition:.4s}input:checked+.slider{background-color:#0b79bd}input:focus+.slider{box-shadow:0 0 1px #0b79bd}input:checked+.slider:before{-webkit-transform:translateX(13px);-ms-transform:translateX(13px);transform:translate(13px)}.slider.round{border-radius:17px}.slider.round:before{border-radius:50%}.ag-header-cell-label{background-color:#e2eff7;color:#2f67ae}.ag-header-cell-label,.ag-row .ag-cell{justify-content:center;align-items:center}.ag-header-cell,.ag-header-group-cell,.ag-cell{border:1px solid #dadada}.ag-cell{padding-right:10px;padding-left:10px;padding-top:7px}.joint-dialog.joint-lightbox .fg{background-color:#fff}.joint-lightbox{display:flex}.joint-dialog.joint-lightbox img{padding:10px}.joint-dialog.joint-lightbox.joint-theme-modern .btn-close{color:#2f2f2f;top:0;right:0;opacity:.87}.joint-dialog.joint-lightbox.joint-theme-modern .control-button,.joint-dialog.joint-lightbox.joint-theme-modern .control-button:hover{background-color:#0b79bd;color:#fff}.joint-paper-scroller.joint-theme-modern{background-color:#fff}.joint-type-standard-image image{filter:invert(65%) sepia(47%) saturate(1882%) hue-rotate(182deg) brightness(98%) contrast(92%)}.joint-type-standard-image tspan{fill:#2f67ae;font-weight:700}.joint-type-standard-link tspan{fill:#8d8d8d}.navbar{padding:0}.nav-item{width:100px;height:31px;margin:0 10px 10px;padding:6px 0}.nav-item a{color:#000!important}.nav-link{text-align:center;vertical-align:middle}.nav-link:hover{border-radius:3px;border:solid 1px #0b79bd}.nav-link:active{border-radius:3px;border:solid 1px #0b79bd;background-color:#e2eff7}.bg-light{background-color:#fff!important}.dropdown-item:active{background-color:#fff}.streamtable-cell{display:block}.streamtable-units{opacity:.6;float:right}.streamtable-variable-value{float:right}.streamtable-vartype-panel{min-height:1.7em;display:flex;gap:1em;justify-content:start}.streamtable-vartype-element{display:inline-flex;gap:.3em;place-content:center}.streamtable-vartype-text{float:right}.streamtable-vartype-fixed{height:7px;width:7px;margin-top:.5em;background-color:#7526f1;border-radius:50%;float:left}.streamtable-vartype-parameter{height:7px;width:7px;margin-top:.5em;background-color:#74aa50;border-radius:50%;float:left}.streamtable-vartype-expression{height:7px;width:7px;margin-top:.5em;background-color:#eaaa00;border-radius:50%;float:left}.link-streamtable-hover-columnheader{border-top:5px solid #0B79BD;border-left:5px solid #0B79BD;border-right:5px solid #0B79BD}.link-streamtable-hover-lastrow{border-bottom:5px solid #0B79BD;border-left:5px solid #0B79BD;border-right:5px solid #0B79BD}.link-streamtable-hover{border-left:5px solid #0B79BD;border-right:5px solid #0B79BD}.idaes-container,#stream-table-container{position:relative;height:100%}.ag-root-wrapper{position:relative;height:100%;min-height:500px}.dropdown-menu{display:none}._flowsheetWrapper_ve8q2_1{height:100%}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-cyrillic-ext-300-normal-435e4b7f.woff2) format("woff2"),url(/assets/roboto-cyrillic-ext-300-normal-5e06c977.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-cyrillic-300-normal-47aa3bfa.woff2) format("woff2"),url(/assets/roboto-cyrillic-300-normal-c07952fe.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(data:font/woff2;base64,d09GMgABAAAAAAXIABIAAAAACfAAAAVrAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANAhYCYM8EQwKg3yDWwsQABIUATYCJAMcBCAFgnwHIAyCOhuKCFFUkNIAfhzkZNGn0qdP43KKULZY+sdzG0Q8m/mz8ICIX02oaFIVOdFc1ZzS76IBcWPjIIKlGKNV/3O6DmGQY/0cOocGnZS5fphLIQxybKVfXZEOY7haU7u7F7IfFUso/CdW3X0AsQAwPhW2Tv1UAStAFdXxNaLOVQhbV3MjxjWbYEg6T29vAH0LBI0IAFAOwUQQBA0IASEEECBAgjJIz94DRxICQAF43hlrbeqi1KrNWDS7iJq5s7MLu6lo2twSDwB8MeX1ukpLCgOMw0YLkOr9kP4yOQFmBnaVs6/PDelD1x3k7zLJIKcPa9jICQDV3nCwsdHToL5UBh0xSWGjAuGt7HnRX/rR3QgADckz3lSjnWSwElt5isGm6u0xoExmKmW0I8S8LOHMARJ6DYKqPWXUNmKGQxmzAmXNh4hpE0hYCsN8GxMgAKTK8A9lX+RjAvHOUAnfr08nEpIi0nsFmSqhpSANhYSeIg96Ha/FaUMP+9Fv9bA92s1XUHVeYvNR68e4DIERvCcwkgW6mthy89qYnIRKxVT+MQ4VOiRhB1Fc/hJGqqyu121wk7FSxdBV2XohSOOhBgkPxcWXl5x5TxG3T/vwjcHKmw1L2pcl3vZ41zJm3GMz008LrPS52KOW6UEeOjUQ3gFd+9Dr6Fpa2diNrwySMeOd17yJTSpKwp8qt1krwiDMfCCFhtogiMn7hVJ+PftGjxH87Wopy8DHbWSbp6H7O2bIo9beHti3u0IWr/zSfjiFrp/9ZA3YT1oqtgvJuPKpWAVBw4fmeUQBsACIAH6gEzCTw5D5cwxogqYrKHf4V8Qipj8eWRJduCSvwFc4MVoghZElK9/6KLD5C11Wvfvpto/fHjVyzTuBzW9prH47uOVdfcmEIGNnfJDXRw194w2p/xiG85iePRHDiq/uNf/H4IJPT+kyaaNM0tODH9n09OYmcuaS166o9f4ntzaXs0M5taWe9sjiqPV9gxef/alh6KD+Y+MXXv66YbBv2dd2r+u0suwDLfv832/WNFkyoY/0rzV8zdDG1EX1BgsjUxs0ILPG+85obrzkhmLxeKKdE4o5vBQxk/mvDL+EQ693tCaVb2rVOo8jEAORgas01GXXCDUW8y07gffcEKkJn6XFnMh7TZu5qlp1B5XJegAGdUFUqM5xgrGbWeIEkmNrvFX5N4CSVWo0bYZ03rFecqwIBIRr8o4yUJuNlyo6RpMKNRFYQkAofjkgQMhvKtBM3QQQQKuVWDf4wowp0Y6/+yr6AHjsp3hjgNdl+Kf/2P+/7q/kmwP40QAQsIoyIfC3+cfO9PJXQhj8LH0rM10pv8AoYFnuYEo5mTWYrsUOyjGOgQAQAQ1tNiYC+MihI8oPTMbaLlRgsl0jwvxJfW9SwW5Ql7UJE9rLz40w0iP0kFZqkdny5cozl01zmtJsNNv0keaQimS791NihsaJbiwW5YYrU3OYz2abI9ts82WbqTHDpU2XNleazUCFcnpjrnmKTAOONs82R36q5A7YeK0Fbehwo5Nt8skbKfPGuUq1p4mzBV/XmGlKTTNDnmyNSZstVxOK5JshW4k5ss3RhIH66aGXwUbopdHzf6gpOgB4BWZqFzqhpEMSV0JaUtywRA+4M9y+aYNqCXxJ7pTicb2aV11uuVNbnju0bbHq86cOaG1Va2YObt80+rSXCXiYuxZMbF8rZ+k9fMO6t6xT3sPfrkntSrFc4GwumNMtdGptbv/UMdxIxEo6/IGvd52EzHGHBsa57kooHcxzu1Tik1NAK6CJca47hNK0g26QB9VDKpqH8wQK0WrSeBqCUlbJHwHVm3PdKUY76EXyEl3OSm4TO5EGt2Z9mQMAAA==) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAATkAA4AAAAABWQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABRAAAAB8AAAAmAEYABkdQT1MAAAFkAAAAIAAAACBEcExrR1NVQgAAAYQAAAA2AAAANpMNggRPUy8yAAABvAAAAE0AAABgku/g4WNtYXAAAAIMAAAAKQAAADQAER+gZ2FzcAAAAjgAAAAMAAAADAAIABNnbHlmAAACRAAAAREAAAEUGjc/4GhlYWQAAANYAAAANgAAADb8WdJpaGhlYQAAA5AAAAAfAAAAJAqpBZBobXR4AAADsAAAABwAAAAcE07/w2xvY2EAAAPMAAAAEAAAABAA0AE8bWF4cAAAA9wAAAAgAAAAIAI3A1xuYW1lAAAD/AAAANEAAAF8Gwg553Bvc3QAAATQAAAAEwAAACD/bQBkeNpjYGRgYuBjgAAxII8NiEGQCcjnAWEgmwEABhIATQAAAQAAAAoAEgAUAAFERkxUAAwAAAAAAAQAAAAA//8AAAABAAAACgAkACYABERGTFQAHmN5cmwAImdyZWsAImxhdG4AIgAAAAAACAAAAAAAAAAA//8AAAAAeNpjYGbJZ9RhYGVgYJ3FaszAwCgPoZkvMqQxMTAwADEUODCgAnd/f3cGB3lfeV82hn8MDGnss5gYFBgY54PkWKxYNzAoACEzAMRwCjwAAAB42mNgYGACYmYgFgGSjGCahUEBSLMAIZAv7/v/P4R8sBMszwAAVmAGzQAAAAABAAIACAAC//8AD3jaDcwBRANRGAfw//e99zppau/qGohum5kC7dpAAlQKRgC1pABCoFIjSkoFIQHIQsAABKEpGbUhAkAgZ4pAue8aAH4/GKwDKm/qUOhBLxIYAHzf+soSWVI+FclX+WiKGyXpyB0lPliJEEeRqf/WjBNVeevP8nZU4coxVwBGNQ51aBrdaQSgIdaZNGxx0s2OajflJDmTZusl3aDgWh2eitzG8nhOTGWiM7XbeW1+f720P/nkWVo12qDS5RMFN9fy/pAkh8bkTX6uJJI2jVMfGCt6h9dMCwb9AA0GnsqowBtOOblckZaP9u9nZZOXJhYW9QVNe9Kk+dW9uUL2sBzHchCHptC1OegZwIGRLPAPx7pVLQAAAAABAAAAAiMS7qbXil8PPPUAGQgAAAAAAMTwES4AAAAA1QFS4/og/dUJGghzAAAACQACAAAAAAAAeNpjYGRgYM/5x8PAwGn+S+GfK6cUUAQVsAMAbCsERwADjABkAAAAAAAAAAAB8gAABWoAfQK2AF8FsP6DAAAAKQApACkAKQBgAH4AigABAAAABwCPABYAWQAFAAEAAAAAAA4AAAIAAnIABgABeNpNjrkKwkAURY8r2lhbTmVn3ApBKxERQSxULAWXGIWQCYkL9n6Nn+GXeYshhMsdzrwdqHGhRKFcB/bguECTveMiDZ6OS7l4OccVWnwcVxX/Om6w5ccUS8ybhBsBV+4Y+nTpSYY5VgoI8TEsiDjhiSaEkmGddaXoh08qJzz1nvEUsRzlu2xYZtWqFD0IOZCwQz2kyloitB+PHgOGjHHXiPOz2rlZshQzoiO9kPA4EMsnZX39LAmBsiE3xXwidKfcYcmCKTNWbPS20W66fypGNRAAAAB42mNgZgCD/1kMKQxYAAAqHwHRAA==) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-greek-300-normal-455c2c1a.woff2) format("woff2"),url(/assets/roboto-greek-300-normal-6bb1ef10.woff) format("woff");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-vietnamese-300-normal-51f3f418.woff2) format("woff2"),url(/assets/roboto-vietnamese-300-normal-7747ef64.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-latin-ext-300-normal-b076e863.woff2) format("woff2"),url(/assets/roboto-latin-ext-300-normal-35da7ccd.woff) format("woff");unicode-range:U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/roboto-latin-300-normal-f7591131.woff2) format("woff2"),url(/assets/roboto-latin-300-normal-ddb5c61d.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-cyrillic-ext-400-normal-b7ef2cd1.woff2) format("woff2"),url(/assets/roboto-cyrillic-ext-400-normal-0a32035a.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-cyrillic-400-normal-495d38d4.woff2) format("woff2"),url(/assets/roboto-cyrillic-400-normal-adba67d2.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAAXMABIAAAAACeAAAAVwAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANAhUCYM8EQwKg2iDSgsQABIUATYCJAMcBCAFgnQHIAyCSRt8CAieB2WbnmbLuYAwwpK8+iIe4P3r89wHDZaakNWCmB8R66SEWr+ILhpijnTqf6QAyyF8GVAOAPOWtmNg6llFXANTaQXCgXMubThOj6JRPCJsEWW3o1/4wX411uruvta/9FF8Zz50qenu3hVxmf4QIi1dRSzhkcR0SqA1QoiwzI2uAUbffgtBpA0YCssEQRChiaaAgMpAFvDsmKQshIEEer1l/u1J0Sbi8P6OJsQc3VHd6N0nlHe1MAhFbvPNcXJVWKNNekPqCYVx/lj8nqMi5BY4Pd6hectSY5E2Lll8SMf/HJXfEKEOfCtEMjEFBEHtpSkbjBK4aB1MIEjT/t9z/+W3j8FgVyeNWdDn7wh7b19l7pQoyFW8FXcx+P9D4NE2ErMMk4kskmVMCiwyG5ZhhyC7qZ19JoMatwj00/I0GG/uexT/v7K+Ysx9JXVwiRoC1yHR9VGAy9QQcXVQbqOGmOvEACWZm5EnyicLnfULjlggc0ldeRXQEqImnlS9kL8XAZndegKyuixM77OP24/Mzw9QQ7Kfha4v9OEOadjJ0qBYxN896pRbZI6ly/PS82Bs9iiYPpuaWJZEw83lXbg5G5JRslr2VFWPDtfbPBryeqZk5eKg/CqRD2Oz8tcvgJMiFi4RC6PWb9fnkzx74cWAeELYJFCSObI1tnxBfqwo2lPppazn26eGKDWU3KLMvOioppPNX6y4euc5FBq4y6Emd99OYa6zfpnpUhjE4Y/qoWtWQ4tIHr845ZA6bDc+AOSaR/sb6c9Otrh6uj3cUdDVKESNWgCK/GzxKQiLFKJeTz+QgzZKTIUcA2Nz9h2ppBhtbSQxfsjAtk4xoD1oes5gXYPe8UWmx+HjwQeNPfi2Wv/952vDpV/80Njw3WfWXv5IL3662ucz8dd9se78QkPd6ihDH61ZfS/s/KK0fjE+sgih+YDL5pz1vnH249tjfOAcLqZOTdvY/3jL1Hy3vqvcu358ODj2/etmVHfcdW+1t2X6R08H6p3BTzz87uDo6/H/vD/2scffaEf/ThphsXX6jLtDvp7cx6bvFUbnpWbFBWgOekJEip6LgFz63wtE+H/fXrpM++P7m8wAgZk/NJnacWXJLOW1rWO16C5ouY7SRE5T8x0iJ7MpntZyQJtPS2tuKXZpKqNf728OLK1FiJj72rq99z4Ho7G9hTQm0sqlhiEBKlWXfTDq1zbQcaP1HosN1zo/TqWGAGGywdQJhaSfHo9wDdfhs78cJKBZ5glRluQQEG030P7t9IdL+03+rRhRIHjxxwF7IsRHYeWXv0f991G5d9GJAKUIBPIT/jUpF/wa9f/Ccm9YiMnjjap8MPxDeomeuKM1ffn/fWHktrCSBT3iY20i0fZ0BBSOAgtJiYMAUDBoOigYaTtuMB4PJjiY2lFfMDPaqZe2rfYTKVcYVUK+QIPiwY175iFi5Yq4Em50vIyNq4cbYFLL2Fyqwbe4aq5Kx+XgZMhZco180ZCv3b5iqtyXD9VCUsquRpcNT74CH3LW95hzWKkvV3KxoHLNhF5fxylXMNkCLk6rio/XJGRzZWquGi/JysTM3sUM+4wfckMBveM4zKV1U1VT4QMTqQI/IFSPuDBgopvEnkF6u7kQ4gJdWIvWjkeivDg/OWNxRqSXxIolJclBKluW+uwutDVlWXtxjIc9y9fPPiBAxIqR2jR/O1ZmRftILVjVU5bo4zjbmDxi6XLWfHj/+sMns5ZFfyP9jLWD9pU5CFi/MC+Fo8Vo/+XhjzuFH9jQ3a32p2/nQ0fiTr60oFFwFV18KrXSKp2m/+AsuvlQKqXRIVOncITG9B6cRRdfSqt0RP8hVHTzrZOuHdwJDHdwJwA=) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAATgAA4AAAAABVwAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABRAAAAB8AAAAmAEYABkdQT1MAAAFkAAAAIAAAACBEcExrR1NVQgAAAYQAAAA2AAAANpMNggRPUy8yAAABvAAAAE0AAABgk1Pg+GNtYXAAAAIMAAAAKQAAADQAER+gZ2FzcAAAAjgAAAAMAAAADAAIABNnbHlmAAACRAAAARQAAAEUnMv0r2hlYWQAAANYAAAANgAAADb8atJ6aGhlYQAAA5AAAAAfAAAAJAq6BadobXR4AAADsAAAABwAAAAcE+3/e2xvY2EAAAPMAAAAEAAAABAA0AE9bWF4cAAAA9wAAAAgAAAAIAI3AwluYW1lAAAD/AAAAM0AAAF0GlU5EHBvc3QAAATMAAAAEwAAACD/bQBkeNpjYGRgYuBjgAAxII8NiEGQCcjnAWEgmwEABhIATQAAAQAAAAoAEgAUAAFERkxUAAwAAAAAAAQAAAAA//8AAAABAAAACgAkACYABERGTFQAHmN5cmwAImdyZWsAImxhdG4AIgAAAAAACAAAAAAAAAAA//8AAAAAeNpjYGZpY5zAwMrAwDqL1ZiBgVEeQjNfZEhjYmBgAGIocGBABe7+/u4MDvK+8r5sDP8YGNLYZzExKDAwzgfJsVixbmBQAEJmAPBXCrcAAAB42mNgYGACYmYgFgGSjGCahUEBSLMAIZAv7/v/P4R8sBMszwAAVmAGzQAAAAABAAIACAAC//8ADwAFAGQAAAMoBbAAAwAGAAkADAAPAAAhIREhAxEBAREBAyEBNQEhAyj9PALENv7u/roBDOQCA/7+AQL9/QWw+qQFB/19Anf7EQJ4/V4CXogCXgAAAgB2/+wFCQXEABEAHwAAARQCBCMiJAInNTQSJDMyBBIVJxACIyICBxUUEjMyEjcFCZD++LCs/vaTApIBC6yvAQuQv9C7ttED07m6zAMCqdb+waipATnOadIBQqup/r/VAgEDARX+6/Zr+/7hAQ/9AAIAbwRwAskF1gAFAA0AAAETMxUDIwEzFRYXByY1AZF0xN9Z/t6oA1BJsgSUAUIV/sMBUlt7VTtfu////jL/7AVPBdYAJgAERgAABwAF/cMAAAABAAAAAiMS6JlwgF8PPPUAGQgAAAAAAMTwES4AAAAA1QFS9Pob/dUJMAhzAAAACQACAAAAAAAAeNpjYGRgYM/5x8PAwOn5S/qfF6cBUAQVsAMAb4UEbwADjABkAAAAAAAAAAAB+wAABYAAdgMgAG8Fxv4yAAAAKQApACkAKQBhAH4AigABAAAABwCPABYAVAAFAAEAAAAAAA4AAAIAAiQABgABeNpdjgNyAwAURF/tXqAcdVQbgzo2hrFtXSYHyemyMeabu8A2SdZYWd8BgjDOV9gnOM5XOSQ7ztfm+utz+QYXtMf5Jsd0x/khXnr8UKJMhyoZUqSpc849t9xJzjFQkqTIk1BlokiMa2Vf5CXnuKdXtWGVoCar0pSPc61OiaisLtOUFA3yRKjiH+7VyFCiOMS85o4HXviYMnhZuL9a+iBUSZl3biStoVxrUpbFNE2oKlElpWmejHoJitRIyG6wYuKHP+x45K+G+Ld9LnwzhgAAAHjaY2BmAIP/WQwpDFgAACofAdEA) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-greek-400-normal-daf51ab5.woff2) format("woff2"),url(/assets/roboto-greek-400-normal-076b9dc1.woff) format("woff");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-vietnamese-400-normal-77b24796.woff2) format("woff2"),url(/assets/roboto-vietnamese-400-normal-d2390f1a.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-latin-ext-400-normal-3c23eb02.woff2) format("woff2"),url(/assets/roboto-latin-ext-400-normal-c2b94086.woff) format("woff");unicode-range:U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/roboto-latin-400-normal-f6734f81.woff2) format("woff2"),url(/assets/roboto-latin-400-normal-a9fdbefa.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-cyrillic-ext-500-normal-aeed0e51.woff2) format("woff2"),url(/assets/roboto-cyrillic-ext-500-normal-57138788.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-cyrillic-500-normal-3728fbdd.woff2) format("woff2"),url(/assets/roboto-cyrillic-500-normal-4bc088e9.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAAXcABIAAAAACgQAAAWAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANAhcCYM8EQwKg3CDUwsQABIUATYCJAMcBCAFgwAHIAyCUxujCACOlC5DNsHD//+2fp8bhJS6mMR5XowEcaqZN2A2Ro6RTES+6DzyOr4qW4h/b/eZ2YQqiFF9MYvJ1Zra3Q07UJHAOxPhwaq7T9LeXwlxfCpsnCqiKkuSQEZUWFndRCS169iOrLNRew/wX4FAwQkATEdgQiAQKIAdsCMAASSQjBsRKqpowA6ABhCPx4QyyELb7KS+HRvHSBvc2D+qvrGezRMMAEtp5umqdpH4DR30S/T5IFJ1lfoyAw14W8BgKsuKb3UxwVM5HmViCgbmJQoG4koAbZkuMTBQt5HCcaMi8GgYqIEQd308bv23Hz2AACCP5zibKzib79goxh5NulTpLo1beBpwT3XjVi4lMb4Ux9SFJKtebNoy3NrpJOoSt2km00yPk6i0kWzW0E0fIAAkvnJprWmZFOKMyP0ifkSG5kxa1a5OvxQ+wwgPh6To9kvFJ0We1y9Vn1Ek1cyiupb0iHGKcUrpulOMImOoZ53UMpt0Xqv/lEjAkNRn2JA0xCuDEc8zuz8SWeaX2lYWrfqUCBqMkU0sI7LH/e+Xuq98czWrpqW2Re4PeWQwJNO9XiMsH68h4XHlfUSvMtUp7fY9wzMrBvO4Kc8vLbuo+qGCvZ/IO4XpTvfK/WPIc0p6RDM8XvR+wZEWFEZ1Zljr9td41f6mPaRQcVZHPK9NQ35p9ZXXt4RDHq9M98sEn/SFBWzoX2b3TWaL48YpMZs9EESj71s43rBejk/9an3EI9N9S6Rx/P5EeOOXdjt8MvhZbtCaST+h7QW/Co0nQaBgQYnHcQFgBsAJWIGVwCCH9v530Jm0klejqehOcpos1+a7XNt3DY1YRttdI2KUucz+tz5KOOWTd5rEgXc/Pf3jtxsbDrxzvpm3Gtj/tu3UN8WuNhsta8DG640Nb4icp9Hl02p/O7o56WB464+2bZ9erYqO46JDjdZ+Envj3JOTb7tr0n3bBat5qe71C8L4yOuSbzk/yGv/ab/cK2667n7ENw0/PajfcNPd8T9KZi24KLrq1Wmfr+rIr5/sUnaWh6uL74w8mk4WWhGY0f+/BxRgKiX+nb5OfzNmT0xKSl4q7YmSlyyLyWI90fESknCkEvBMKsaqyI04SeyJaQrZ9THdtJotlnGZ8F7MTlod2ymJ0vle4dyYlmoM0CrcX4B2ux011A6R9sRJt5AJ+S3etzy/AbQUz8rCuUhbQGov5SyTvDRLEpip7kRpBrMSVo0IhJ0NArBbzRooJs0M+7pKevLPn7z/Q5drxe+WWRYAnv4pqQDgdVH33T8Z/79ubbdsAqwoAAgwj03ZwToa4ZxaUwTBlGRWT2OdR4op0I8y0H0MjuemUhCAmTOZThU9/3FOUFAKMSEACwNUhGYFOrGOCGbTGVFwsr1Q9RVqiOhkcdQ0wXbbbZ00eJa1otbbYaNhg4ZsZjCPQubOfoNiUQnPmP7EUhP6FJhrWByrqsss28Tct98m/Tbaqt86BdSJ6hW1WZRBpWds2Bbj8TsN2mJMj42apHuTYSibqAILpuazmOU1bVy8Y7rfaDM3W28ZgZm2dSugh5U6s8+QfgWSuNGgAGNmX9MT9Uo5OUCFUmuFVakX5q/gjwpRASA+wjrTkdKeL8knJpxKvoi5hHWF+1zLCjM9iVjyuU8sKciYnbScfZ9SFZyXPq0ztWR5gdddpfFML8xJne5kpr7a1X5Phzm4IJ9Z2sqW5c5i1kPrqpals4RtvRWLvP22s7e1g9m3dpcvmsMcvowUtz3BuXZxfmryOmKJTnO+5A99dmy/W2yKSQNqvJtj+2tWpzTdBdoHAQFdDYrSmXQnxSHVuyW2mrpoX43LSFVRSMpY6R8Bqa2bY11CZ9KLFNerY12BNB2FM5An+NY8sQkA) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAToAA4AAAAABWgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABRAAAAB8AAAAmAEYABkdQT1MAAAFkAAAAIAAAACBEcExrR1NVQgAAAYQAAAA2AAAANpMNggRPUy8yAAABvAAAAE0AAABgk7fhCmNtYXAAAAIMAAAAKQAAADQAER+gZ2FzcAAAAjgAAAAMAAAADAAIABNnbHlmAAACRAAAARAAAAESY95A8mhlYWQAAANUAAAANgAAADb8n9JyaGhlYQAAA4wAAAAfAAAAJArvBcBobXR4AAADrAAAABwAAAAcFAj/TWxvY2EAAAPIAAAAEAAAABAAzwE7bWF4cAAAA9gAAAAgAAAAIAI3Aw9uYW1lAAAD+AAAANkAAAGAG8c6DHBvc3QAAATUAAAAEwAAACD/bQBkeNpjYGRgYuBjgAAxII8NiEGQCcjnAWEgmwEABhIATQAAAQAAAAoAEgAUAAFERkxUAAwAAAAAAAQAAAAA//8AAAABAAAACgAkACYABERGTFQAHmN5cmwAImdyZWsAImxhdG4AIgAAAAAACAAAAAAAAAAA//8AAAAAeNpjYGaZwfiFgZWBgXUWqzEDA6M8hGa+yJDGxMDAAMRQ4MCACtz9/d0ZHOR95X3ZGP4xMKSxz2JiUGBgnA+SY7Fi3cCgAITMABp8Cy0AAAB42mNgYGACYmYgFgGSjGCahUEBSLMAIZAv7/v/P4R8sBMszwAAVmAGzQAAAAABAAIACAAC//8AD3jaDY8lWARRFEbvfTOPwd1tXepqQQvuUnCHCAmnk/GOu7tL/3D6h7s785btv5wDFEoBOC2dAA5swA4cwQVAJnOTcW6IbsjJ0IQyTiuGkh0ze2BL6HhGOMaQiCKd+OmhgthEan7dSK2YT/KbST4AgXLLHQ2mO+AKwQDoSXiFXEk0JqO7Usq7+whGopATwcvT3aB3N9HgNnY/PcluO7ETPbAUPTpQnB/oWSTLfQOzZOqYrY6OYuRe+hFGjw6z9SP6goRZbjOf2A/Ch/Wtgq8kx/TEauIEgB4GL06BBi9vH0Ftwtaqg4s8djjJJaZO8F0Y4cU2MbOgITo2e81iYYFWzlJrUw18NIAAVJwF+AfCKlcxAAEAAAACIxJVwNXKXw889QAZCAAAAAAAxPARLgAAAADVAVLs+iT91QlcCHMAAAAJAAIAAAAAAAB42mNgZGBgz/nHw8DAmf1L5Z8jZwxQBBWwAwB2LQS9AAOMAGQAAAAAAAAAAAH+AAAFhgBmAywAZwXM/hwAAAApACkAKQApAGAAfQCJAAEAAAAHAI8AFgBOAAUAAQAAAAAADgAAAgACMAAGAAF42mJgYOBgSGNgZmBk4QSy44AYwmZkkALyIGwmBj6GCiibGUmcBYnNyqDG0AZlswHF10DYQJ0hDMcAVc5DdkQBFATQu5S/gNiYxLbGUdvu3n1qEp16ZjnU0TXTV1NRNVRYsWQ5KJzqBBVNJYVzbR8WFPY1g8LDz9ZAMiWDaN849tNCKh3v0WG0cC1VNSMtmVVJ1PSm70UpdqCmoy0MLFi2atPuD5/Nf9fm/10Lg6Brx2IwEVjwphv9SLeUrKOvkm5TLbWStnCNLrpy7tCxG4+x8/Ld0hcoDzX0AAAAeNpjYGYAg/9ZDCkMWAAAKh8B0QA=) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-greek-500-normal-713780d8.woff2) format("woff2"),url(/assets/roboto-greek-500-normal-93181eb7.woff) format("woff");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-vietnamese-500-normal-0948409a.woff2) format("woff2"),url(/assets/roboto-vietnamese-500-normal-7899e6a5.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-latin-ext-500-normal-7f1c829b.woff2) format("woff2"),url(/assets/roboto-latin-ext-500-normal-a303676a.woff) format("woff");unicode-range:U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/roboto-latin-500-normal-b0195382.woff2) format("woff2"),url(/assets/roboto-latin-500-normal-3ac31048.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-cyrillic-ext-700-normal-3c505383.woff2) format("woff2"),url(/assets/roboto-cyrillic-ext-700-normal-8ea7934f.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-cyrillic-700-normal-6a84eeee.woff2) format("woff2"),url(/assets/roboto-cyrillic-700-normal-6f82c5e2.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(data:font/woff2;base64,d09GMgABAAAAAAWYABIAAAAACaAAAAU6AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANAhICYM8EQwKg0iDLwsQABIUATYCJAMcBCAFgn4HIAyCKRs/CCCOk6WSgeIPHr5v07+zgm5MOS1LaB1tnYpB0tQU4l4R44nbhKf+Z+rA83jrYWYTqhht1N+qejHd/3+v6r03UxOKrgn+E6X7M/bo3iAFjdE7pc3d2I0bvEIF4uomIlFn2f7i2quz7wH+LRAoZAMAxQgsCAQCBTAAAwEIwEE+hYho5bJ1GABoAJnMI+ZRjEETjWzdtbmPis7N7b3d0Ne8dcAFAFu08HxVu0l5BB30S/XJINx9j/oyHRWYFOB8KTuq7soqTPdyvZeFNDrGpQom4ioALaJLTEzUVVCdL0RFsE7DRA0EX6VM5v2fffQgAoAJfM31pDmaSpjbeZbX2MsPFKabKFQuw1Q9OLUIhdoZ5OqSQkspReJG8ixPkG35EAVA4lsq7aviw0KcmXhAZI7J6Ihhu9rY4JfCZ5qx7qgUTX6p+KSY4PFL1WdWSnV05Zq4N2EmzWR1W9KsNLua26Q2muTcpdqTiaApWZtuU7IuHjk/4bK17YlExC+1lRRaLplA2exZQ9Eji8P/fqn7lorVMaviq+PyYNQl50dZ5PGYMfnEqrh8IuqysWQt25Q/tvZ1l24YrDnLBEnZFomt1dh8GZH4koGe1yMP6rQr6U10P09MfEBw+MzvSXV0rBUPrkrGDs4JF3Pnlku4RmHUL+2+pWvjsajLwyv90uGTFTEGJ3p3GL7hseKkmXxE9OB8NFp/GyfXuTupUL8aSrikN7VNmicfyCUc+KG9LJ+c/9ppUpNhL9GVBG8sqg+CQMGGksmQA4AVgGzADswFukNojO5G504oZXlNRS8v22I/f9yenJ17unpsvXU5PaI3e8/Btz5yJD95Z4M49O6nZ3z8Ni3vDUfytXUcfN152psb99Q6ic8OJ6+vX/fGG2LcM+jyGbW9Dt2adzi2/Ufnjk+vUUX9SVGvrlrzyf1vXrSo/K7773XdcdlCXl785qWV5Xf2Cdv7fSPI59d9f/FF133DJ1UfXvf7pRdd8x2fLC49/7KBWa8WfT63zr/2jgb27Olr1ldX1J2sdzEGrRKs6P8/AgqQLsl8p2/V30QSi1SCrmGldG7CR7QYB1OaQl7+zJQOpVVhW5CO91JGTJl1lJIrs98LhVOa21TQSoUvrY+G2kANtWOkkTtcKKRjYtzzlus3gCZx7QyFkc6gtL408gkCRM+ZK3XK68HsxSAAw27VQLFoVux5FW/+rrcHH2nMmf27rcwGwDM/5QUAXhdr3vgn9P/r9hO2LQjsKAAIsPalDbAnTZueOgHB7WVVT6fNPUUa+nE2NDe1/bl0CQKwchbFrKCXQ/Y9FJRJWBCAjQ4qQrMDDXCtAoMGq4KNHqtKMZulmlVnDCetFoq587rZrPMMiwwasstm3Tp12cpkEiHCg9GkyiCndH3anasNaBXILRDEvuyawuSWwF9st0W7zbZr1ybAGoNaDNpq0EKD+rSFs2ZLbiitb9GN5MA2MLA8menM2tTh6eVqf3ALq7caEiE4KHa8XYBmQ5q16tIuwKDNOgXp061VuwFbtNsiyDLVFolZYa0Y/5f/RggVADI92oAbSmOiZCIp4VQmcr8Ij3MXZ2ObeL8SjfjMfCerhl20c3bURbwu+vampdNGuFhGu0vznC7WhdMmjMx3sUWCFaU5bfs0H1wctUsjE8qcnP8+f/Xm2AFShtM6UfLXuysVyhZbUjJ3hlX6ramDMNTflppXyIlG0AEI6remVtIgnUV3UQbcwSLaRtsY+ZzSyvxgqUMHEj8SuJkSjaCz6EXKwDxGPVguigKkDZocbphiCwAAAA==) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAATgAA4AAAAABWgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABRAAAAB8AAAAmAEYABkdQT1MAAAFkAAAAIAAAACBEcExrR1NVQgAAAYQAAAA2AAAANpMNggRPUy8yAAABvAAAAE0AAABglH/g+WNtYXAAAAIMAAAAKQAAADQAER+gZ2FzcAAAAjgAAAAMAAAADAAIABNnbHlmAAACRAAAARQAAAEUTyuJzWhlYWQAAANYAAAANgAAADb819JcaGhlYQAAA5AAAAAfAAAAJAsmBdNobXR4AAADsAAAABwAAAAcE/v/LGxvY2EAAAPMAAAAEAAAABAA0AE7bWF4cAAAA9wAAAAgAAAAIAI3AxFuYW1lAAAD/AAAANAAAAF+G545lXBvc3QAAATMAAAAEwAAACD/bQBkeNpjYGRgYuBjgAAxII8NiEGQCcjnAWEgmwEABhIATQAAAQAAAAoAEgAUAAFERkxUAAwAAAAAAAQAAAAA//8AAAABAAAACgAkACYABERGTFQAHmN5cmwAImdyZWsAImxhdG4AIgAAAAAACAAAAAAAAAAA//8AAAAAeNpjYGZZzrSHgZWBgXUWqzEDA6M8hGa+yJDGxMDAAMRQ4MCACtz9/d0ZFOR95X3ZGP4xMKSxz2JiUGBgnA+SY7Fi3cCgAITMAAhDCuUAAAB42mNgYGACYmYgFgGSjGCahUEBSLMAIZAv7/v/P4R8sBMszwAAVmAGzQAAAAABAAIACAAC//8ADwAFAGQAAAMoBbAAAwAGAAkADAAPAAAhIREhAxEBAREBAyEBNQEhAyj9PALENv7u/roBDOQCA/7+AQL9/QWw+qQFB/19Anf7EQJ4/V4CXogCXgAAAgBW/+wFLgXEABAAHgAAARQCBCMiJAInNTQSJCAEEhUlNCYjIgYHFRQWMzI2NwUumP7lt7X+5JwBmwEbAWwBG5v+0KSYl6QBpJqXogECt9f+vLCuAUPSSNcBR6+v/rnWAeXu6+NH3/bt4wAAAgBbBG8CywXXAAUADgAAARMzFQMjATMVFhcHJiY1AYlv0+Zc/tKtAUxTSl0EmwE8Ff7BAVRefDhWI4ldAP///hf/7AV0BdcAJgAERgAABwAF/bwAAAABAAAAAiMSfSJFaF8PPPUAGQgAAAAAAMTwES4AAAAA1QFS1vow/dUJhwhzAAEACQACAAAAAAAAeNpjYGRgYM/5x8PAwNn1y+CfKWc7UAQVsAMAfH0FBwADjABkAAAAAAAAAAAB/gAABYYAVgMfAFsFzP4XAAAAKQApACkAKQBfAH4AigABAAAABwCPABYATgAFAAEAAAAAAA4AAAIAAjIABgABeNpNjoEGwmAUhb+qUiRAAAYCalWIApUkEioBomqtZbbZpvQGPU1P0YN18Js5zvXdw3EvUONGiUK5DhzBcIEGR8NFajwMl2gRGy7nuEKbj+Gq8q/hJnt+zAmJeBPj4XInxWJAj75ksSSUXHwcbSsCLnRFU3zJYpu1ErThkMgxT80rXSUhZzmVZ7KvNJ9ZWXpAPbU97QH6Qe0+Q0ZMMB+J891O1tV9KWKMLb2Q1D4RyRfuONpCYlxsfDxlDgH6VLZZs2LOgg07zQ66TO8Pnw41VHjaY2BmAIP/WQwpDFgAACofAdEA) format("woff");unicode-range:U+1F00-1FFF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-greek-700-normal-1c9cc76f.woff2) format("woff2"),url(/assets/roboto-greek-700-normal-3f1a5012.woff) format("woff");unicode-range:U+0370-03FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-vietnamese-700-normal-4ec57f2a.woff2) format("woff2"),url(/assets/roboto-vietnamese-700-normal-d986b503.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-latin-ext-700-normal-fc66f942.woff2) format("woff2"),url(/assets/roboto-latin-ext-700-normal-3d1cbacf.woff) format("woff");unicode-range:U+0100-02AF,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Roboto;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/roboto-latin-700-normal-f5aebdfe.woff2) format("woff2"),url(/assets/roboto-latin-700-normal-d89bc0fc.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*{padding:0;margin:0;box-sizing:border-box;--black:#333333}.padding-sm{padding:5px}.padding-md{padding:10px}body{font-family:OpenSans Variable,sans-serif;font-weight:400;font-size:17px}.row{padding:10px;margin-bottom:20px,30px}.pd-sm{padding:5px}.pd-md{padding:10px}.pd-lg{padding:20px}.pr-sm{padding-right:5px}.pr-md{padding-right:10px}.mg-sm{padding:5px}.mg-md{padding:10px}.mg-lg{padding:20px}.mt-sm{margin-top:5px}.mb-sm{margin-bottom:5px}.ml-sm{margin-left:5px}.mr-sm{margin-right:5px}.mt-md{margin-top:10px}.mb-md{margin-bottom:10px}.ml-md{margin-left:10px;border:1px solid red}.mr-md{margin-right:10px}.mt-lg{margin-top:20px}.mb-lg{margin-bottom:20px}.ml-lg{margin-left:20px}.mr-lg{margin-right:20px}.card_shadow-light{box-shadow:0 4px 4px rbga(255,255,255,.25)}.panelResizeHandle{position:relative;background-color:#747474}.panelResizeHandle_vertical{width:2px;height:100%}.panelResizeHandle_vertical:after{display:none;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:30px;height:30px;background-image:url(/assets/image/normal_icon/resize.png);background-size:cover}.panelResizeHandle_horizontal{height:2px;width:100vw}.table_header{padding:20px;background-color:#add8e6}td:hover{cursor:pointer}.main{display:flex;flex-direction:column;height:100vh}.joint-paper-scroller::-webkit-scrollbar{width:0}#stream-table::-webkit-scrollbar{width:0}.joint-lightbox .fg{width:80vw;height:80vh;display:flex;flex-direction:row;justify-content:center;align-items:center}.joint-lightbox img{width:80%}.linkLabel{position:absolute;padding:20px;top:0;left:0;z-index:10;background-color:#fff;font-size:22px;line-height:30px;box-shadow:1px 1px 15px #eaeaea;border:1px solid red}.linkLabel:hover{cursor:grab;box-shadow:2px 2px 15px #8e8e8e} diff --git a/idaes_ui/fv/static/index.html b/idaes_ui/fv/static/index.html index 2db9de77..dadd2e60 100644 --- a/idaes_ui/fv/static/index.html +++ b/idaes_ui/fv/static/index.html @@ -9,8 +9,8 @@ - - + +
diff --git a/idaes_ui/fv/tests/demo_flowsheet.json b/idaes_ui/fv/tests/demo_flowsheet.json index 41e5aae4..c8f0f908 100644 --- a/idaes_ui/fv/tests/demo_flowsheet.json +++ b/idaes_ui/fv/tests/demo_flowsheet.json @@ -1 +1,5229 @@ -{"cells": [{"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/mixer.svg"}, "label": {"text": "M01"}, "root": {"title": "mixer"}}, "id": "M01", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 0}, {"group": "in", "id": 21}, {"group": "in", "id": 23}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "H02"}, "root": {"title": "heater"}}, "id": "H02", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 6, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 43, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 1}, {"group": "out", "id": 2}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s01", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s01"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "M01", "port": 0}, "target": {"id": "H02", "port": 1}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/flash.svg"}, "label": {"text": "F03"}, "root": {"title": "flash"}}, "id": "F03", "ports": {"groups": {"bottom": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 25, "y": 50}, "name": "bottom"}}, "in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 8, "dy": 0}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": -8, "dy": 0}, "name": "right"}}, "top": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 25, "y": 0}, "name": "top"}}}, "items": [{"group": "in", "id": 3}, {"group": "out", "id": 4}, {"group": "out", "id": 6}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s02", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s02"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "H02", "port": 2}, "target": {"id": "F03", "port": 3}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "liq_outlet_1"}, "root": {"title": "product"}}, "id": "liq_outlet_1", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 5}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_liq_outlet_1", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "product info", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_liq_outlet_1"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "F03", "port": 4}, "target": {"id": "liq_outlet_1", "port": 5}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "vap_outlet_1"}, "root": {"title": "product"}}, "id": "vap_outlet_1", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 7}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_vap_outlet_1", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "product info", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_vap_outlet_1"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "F03", "port": 6}, "target": {"id": "vap_outlet_1", "port": 7}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_1"}, "root": {"title": "feed"}}, "id": "inlet_1", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 8}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "FG_cooler"}, "root": {"title": "heater"}}, "id": "FG_cooler", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 6, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 43, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 9}, {"group": "out", "id": 10}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_1", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_1"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_1", "port": 8}, "target": {"id": "FG_cooler", "port": 9}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_1"}, "root": {"title": "product"}}, "id": "outlet_1", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 11}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_1", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_1"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "FG_cooler", "port": 10}, "target": {"id": "outlet_1", "port": 11}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_2"}, "root": {"title": "feed"}}, "id": "inlet_2", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 12}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "HTR_pseudo_tube"}, "root": {"title": "heater"}}, "id": "HTR_pseudo_tube", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 6, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 43, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 13}, {"group": "out", "id": 14}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_2", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_2"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_2", "port": 12}, "target": {"id": "HTR_pseudo_tube", "port": 13}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_2"}, "root": {"title": "product"}}, "id": "outlet_2", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 15}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_2", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_2"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "HTR_pseudo_tube", "port": 14}, "target": {"id": "outlet_2", "port": 15}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_3"}, "root": {"title": "feed"}}, "id": "inlet_3", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 16}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "LTR_pseudo_tube"}, "root": {"title": "heater"}}, "id": "LTR_pseudo_tube", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 6, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 43, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 17}, {"group": "out", "id": 18}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_3", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_3"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_3", "port": 16}, "target": {"id": "LTR_pseudo_tube", "port": 17}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_3"}, "root": {"title": "product"}}, "id": "outlet_3", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 19}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_3", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_3"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "LTR_pseudo_tube", "port": 18}, "target": {"id": "outlet_3", "port": 19}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_1_1"}, "root": {"title": "feed"}}, "id": "inlet_1_1", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 20}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_1_1", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_1_1"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_1_1", "port": 20}, "target": {"id": "M01", "port": 21}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_2_1"}, "root": {"title": "feed"}}, "id": "inlet_2_1", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 22}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_2_1", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_2_1"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_2_1", "port": 22}, "target": {"id": "M01", "port": 23}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_4"}, "root": {"title": "feed"}}, "id": "inlet_4", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 24}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "boiler"}, "root": {"title": "heater"}}, "id": "boiler", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 6, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 43, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 25}, {"group": "out", "id": 26}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_4", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_4"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_4", "port": 24}, "target": {"id": "boiler", "port": 25}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_4"}, "root": {"title": "product"}}, "id": "outlet_4", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 27}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_4", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_4"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "boiler", "port": 26}, "target": {"id": "outlet_4", "port": 27}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_5"}, "root": {"title": "feed"}}, "id": "inlet_5", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 28}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/compressor.svg"}, "label": {"text": "bypass_compressor"}, "root": {"title": "pressure_changer"}}, "id": "bypass_compressor", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"x": -1, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"x": 49, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 29}, {"group": "out", "id": 30}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_5", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_5"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_5", "port": 28}, "target": {"id": "bypass_compressor", "port": 29}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_5"}, "root": {"title": "product"}}, "id": "outlet_5", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 31}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_5", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_5"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "bypass_compressor", "port": 30}, "target": {"id": "outlet_5", "port": 31}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_6"}, "root": {"title": "feed"}}, "id": "inlet_6", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 32}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/compressor.svg"}, "label": {"text": "main_compressor"}, "root": {"title": "pressure_changer"}}, "id": "main_compressor", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"x": -1, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"x": 49, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 33}, {"group": "out", "id": 34}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_6", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_6"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_6", "port": 32}, "target": {"id": "main_compressor", "port": 33}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_6"}, "root": {"title": "product"}}, "id": "outlet_6", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 35}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_6", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_6"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "main_compressor", "port": 34}, "target": {"id": "outlet_6", "port": 35}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_7"}, "root": {"title": "feed"}}, "id": "inlet_7", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 36}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/heater_2.svg"}, "label": {"text": "pre_boiler"}, "root": {"title": "heater"}}, "id": "pre_boiler", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 6, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 43, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 37}, {"group": "out", "id": 38}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_7", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_7"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_7", "port": 36}, "target": {"id": "pre_boiler", "port": 37}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_7"}, "root": {"title": "product"}}, "id": "outlet_7", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 39}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_7", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_7"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "pre_boiler", "port": 38}, "target": {"id": "outlet_7", "port": 39}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/feed.svg"}, "label": {"text": "inlet_8"}, "root": {"title": "feed"}}, "id": "inlet_8", "ports": {"groups": {"out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 48, "y": 25}, "name": "left"}}}, "items": [{"group": "out", "id": 40}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/compressor.svg"}, "label": {"text": "turbine"}, "root": {"title": "pressure_changer"}}, "id": "turbine", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"x": -1, "y": 25}, "name": "left"}}, "out": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"x": 49, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 41}, {"group": "out", "id": 42}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_inlet_8", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_inlet_8"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "inlet_8", "port": 40}, "target": {"id": "turbine", "port": 41}, "type": "standard.Link", "z": 2}, {"angle": 0, "attrs": {"image": {"xlinkHref": "/images/icons/product.svg"}, "label": {"text": "outlet_8"}, "root": {"title": "product"}}, "id": "outlet_8", "ports": {"groups": {"in": {"attrs": {"rect": {"height": 0, "stroke": "#000000", "stroke-width": 0, "width": 0}}, "markup": "", "position": {"args": {"dx": 1, "dy": 1, "x": 2, "y": 25}, "name": "left"}}}, "items": [{"group": "in", "id": 43}]}, "size": {"height": 50, "width": 50}, "type": "standard.Image", "z": 1}, {"attrs": {"line": {"stroke": "#979797", "stroke-width": 2}}, "connector": {"attrs": {"line": {"stroke": "#5c9adb"}}, "name": "jumpover"}, "id": "s_outlet_8", "labels": [{"attrs": {"rect": {"fill": "#d7dce0", "fill-opacity": 0, "stroke": "white", "stroke-width": 0}, "text": {"display": "none", "fill": "black", "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "text-anchor": "left"}}, "position": {"distance": 0.66, "offset": -40}}, {"attrs": {"text": {"text": "s_outlet_8"}}}], "router": {"name": "manhattan", "padding": 10}, "source": {"id": "turbine", "port": 42}, "target": {"id": "outlet_8", "port": 43}, "type": "standard.Link", "z": 2}], "model": {"arcs": {"s01": {"dest": "H02", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "source": "M01"}, "s02": {"dest": "F03", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "source": "H02"}, "s_inlet_1": {"dest": "FG_cooler", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_1"}, "s_inlet_1_1": {"dest": "M01", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "source": "inlet_1_1"}, "s_inlet_2": {"dest": "HTR_pseudo_tube", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_2"}, "s_inlet_2_1": {"dest": "M01", "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", "source": "inlet_2_1"}, "s_inlet_3": {"dest": "LTR_pseudo_tube", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_3"}, "s_inlet_4": {"dest": "boiler", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_4"}, "s_inlet_5": {"dest": "bypass_compressor", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_5"}, "s_inlet_6": {"dest": "main_compressor", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_6"}, "s_inlet_7": {"dest": "pre_boiler", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_7"}, "s_inlet_8": {"dest": "turbine", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "inlet_8"}, "s_liq_outlet_1": {"dest": "liq_outlet_1", "label": "product info", "source": "F03"}, "s_outlet_1": {"dest": "outlet_1", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "FG_cooler"}, "s_outlet_2": {"dest": "outlet_2", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "HTR_pseudo_tube"}, "s_outlet_3": {"dest": "outlet_3", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "LTR_pseudo_tube"}, "s_outlet_4": {"dest": "outlet_4", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "boiler"}, "s_outlet_5": {"dest": "outlet_5", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "bypass_compressor"}, "s_outlet_6": {"dest": "outlet_6", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "main_compressor"}, "s_outlet_7": {"dest": "outlet_7", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "pre_boiler"}, "s_outlet_8": {"dest": "outlet_8", "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", "source": "turbine"}, "s_vap_outlet_1": {"dest": "vap_outlet_1", "label": "product info", "source": "F03"}}, "id": "demo", "stream_table": {"columns": ["Variable", "Units", "s_inlet_8", "s_inlet_7", "s_inlet_6", "s_inlet_5", "s_inlet_4", "s_inlet_2_1", "s_inlet_1_1", "s_inlet_3", "s_inlet_2", "s_inlet_1", "s01", "s02", "s_outlet_1", "s_outlet_2", "s_outlet_3", "s_outlet_4", "s_outlet_5", "s_outlet_6", "s_outlet_7", "s_outlet_8"], "data": [["flow_mol", {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "-", "-", "-", "-", "-", [1.0, "unfixed"], [1.0, "unfixed"], "-", "-", "-", [1.0, "unfixed"], [1.0, "unfixed"], "-", "-", "-", "-", "-", "-", "-", "-"], ["mole_frac_comp benzene", {"html": "", "latex": "", "raw": "dimensionless"}, "-", "-", "-", "-", "-", [0.5, "unfixed"], [0.5, "unfixed"], "-", "-", "-", [0.5, "unfixed"], [0.5, "unfixed"], "-", "-", "-", "-", "-", "-", "-", "-"], ["mole_frac_comp toluene", {"html": "", "latex": "", "raw": "dimensionless"}, "-", "-", "-", "-", "-", [0.5, "unfixed"], [0.5, "unfixed"], "-", "-", "-", [0.5, "unfixed"], [0.5, "unfixed"], "-", "-", "-", "-", "-", "-", "-", "-"], ["temperature", {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "-", "-", "-", "-", "-", [298.15, "unfixed"], [298.15, "unfixed"], "-", "-", "-", [298.15, "unfixed"], [298.15, "unfixed"], "-", "-", "-", "-", "-", "-", "-", "-"], ["pressure", {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "-", "-", "-", "-", "-", [101325, "unfixed"], [101325, "unfixed"], "-", "-", "-", [101325, "unfixed"], [101325, "unfixed"], "-", "-", "-", "-", "-", "-", "-", "-"], ["Molar Flow", {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], "-", "-", [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], "-", "-", [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"], [1, "unfixed"]], ["Mass Flow", {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], "-", "-", [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], "-", "-", [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"], [0.04401, "expression"]], ["T", {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], "-", "-", [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], "-", "-", [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"], [216.07301, "expression"]], ["P", {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], "-", "-", [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], "-", "-", [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"], [3947625.0, "unfixed"]], ["Vapor Fraction", {"html": "", "latex": "", "raw": "dimensionless"}, [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], "-", "-", [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], "-", "-", [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"], [0.0, "expression"]], ["Molar Enthalpy", {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], "-", "-", [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], "-", "-", [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"], [3522.34828, "unfixed"]]], "index": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, "unit_models": {"F03": {"image": "/images/icons/flash.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}, "1": {"Value": 0.0, "Variable": "Pressure Change"}}, "stream_contents": {"0": {"Inlet": 1.0, "Liquid Outlet": 0.5, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Vapor Outlet": 0.5, "Variable": "flow_mol"}, "1": {"Inlet": 0.5, "Liquid Outlet": 0.5, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Vapor Outlet": 0.5, "Variable": "mole_frac_comp benzene"}, "2": {"Inlet": 0.5, "Liquid Outlet": 0.5, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Vapor Outlet": 0.5, "Variable": "mole_frac_comp toluene"}, "3": {"Inlet": 298.15, "Liquid Outlet": 298.15, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Vapor Outlet": 298.15, "Variable": "temperature"}, "4": {"Inlet": 101325.0, "Liquid Outlet": 101325.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Vapor Outlet": 101325.0, "Variable": "pressure"}}, "type": "flash"}, "FG_cooler": {"image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "heater"}, "H02": {"image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "flow_mol"}, "1": {"Inlet": 0.5, "Outlet": 0.5, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "mole_frac_comp benzene"}, "2": {"Inlet": 0.5, "Outlet": 0.5, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "mole_frac_comp toluene"}, "3": {"Inlet": 298.15, "Outlet": 298.15, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "temperature"}, "4": {"Inlet": 101325.0, "Outlet": 101325.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "pressure"}}, "type": "heater"}, "HTR_pseudo_tube": {"image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "heater"}, "LTR_pseudo_tube": {"image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "heater"}, "M01": {"image": "/images/icons/mixer.svg", "performance_contents": {}, "stream_contents": {"0": {"Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "flow_mol", "inlet_1": 1.0, "inlet_2": 1.0}, "1": {"Outlet": 0.5, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "mole_frac_comp benzene", "inlet_1": 0.5, "inlet_2": 0.5}, "2": {"Outlet": 0.5, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "mole_frac_comp toluene", "inlet_1": 0.5, "inlet_2": 0.5}, "3": {"Outlet": 298.15, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "temperature", "inlet_1": 298.15, "inlet_2": 298.15}, "4": {"Outlet": 101325.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "pressure", "inlet_1": 101325.0, "inlet_2": 101325.0}}, "type": "mixer"}, "boiler": {"image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "heater"}, "bypass_compressor": {"image": "/images/icons/compressor.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Mechanical Work"}, "1": {"Value": 0.0, "Variable": "Pressure Change"}, "2": {"Value": 1.0, "Variable": "Pressure Ratio"}, "3": {"Value": 0.8, "Variable": "Isentropic Efficiency"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "pressure_changer"}, "inlet_1": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_1_1": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_2": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_2_1": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_3": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_4": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_5": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_6": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_7": {"image": "/images/icons/feed.svg", "type": "feed"}, "inlet_8": {"image": "/images/icons/feed.svg", "type": "feed"}, "liq_outlet_1": {"image": "/images/icons/product.svg", "type": "product"}, "main_compressor": {"image": "/images/icons/compressor.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Mechanical Work"}, "1": {"Value": 0.0, "Variable": "Pressure Change"}, "2": {"Value": 1.0, "Variable": "Pressure Ratio"}, "3": {"Value": 0.8, "Variable": "Isentropic Efficiency"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "pressure_changer"}, "outlet_1": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_2": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_3": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_4": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_5": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_6": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_7": {"image": "/images/icons/product.svg", "type": "product"}, "outlet_8": {"image": "/images/icons/product.svg", "type": "product"}, "pre_boiler": {"image": "/images/icons/heater_2.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Heat Duty"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "heater"}, "turbine": {"image": "/images/icons/compressor.svg", "performance_contents": {"0": {"Value": 0.0, "Variable": "Mechanical Work"}, "1": {"Value": 0.0, "Variable": "Pressure Change"}, "2": {"Value": 1.0, "Variable": "Pressure Ratio"}, "3": {"Value": 0.8, "Variable": "Isentropic Efficiency"}}, "stream_contents": {"0": {"Inlet": 1.0, "Outlet": 1.0, "Units": {"html": "mol/s", "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", "raw": "mole / second"}, "Variable": "Molar Flow"}, "1": {"Inlet": 0.04401, "Outlet": 0.04401, "Units": {"html": "kg/s", "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", "raw": "kilogram / second"}, "Variable": "Mass Flow"}, "2": {"Inlet": 216.07301, "Outlet": 216.07301, "Units": {"html": "K", "latex": "\\mathrm{K}", "raw": "kelvin"}, "Variable": "T"}, "3": {"Inlet": 3947625.0, "Outlet": 3947625.0, "Units": {"html": "Pa", "latex": "\\mathrm{Pa}", "raw": "pascal"}, "Variable": "P"}, "4": {"Inlet": 0.0, "Outlet": 0.0, "Units": {"html": "", "latex": "", "raw": "dimensionless"}, "Variable": "Vapor Fraction"}, "5": {"Inlet": 3522.34828, "Outlet": 3522.34828, "Units": {"html": "J/mol", "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", "raw": "joule / mole"}, "Variable": "Molar Enthalpy"}}, "type": "pressure_changer"}, "vap_outlet_1": {"image": "/images/icons/product.svg", "type": "product"}}}, "routing_config": {"s01": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 2}, "s02": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 4}, "s_inlet_1": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 11}, "s_inlet_1_1": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 25}, "s_inlet_2": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 16}, "s_inlet_2_1": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 27}, "s_inlet_3": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 21}, "s_inlet_4": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 30}, "s_inlet_5": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 35}, "s_inlet_6": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 40}, "s_inlet_7": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 45}, "s_inlet_8": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 50}, "s_liq_outlet_1": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 6}, "s_outlet_1": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 13}, "s_outlet_2": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 18}, "s_outlet_3": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 23}, "s_outlet_4": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 32}, "s_outlet_5": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 37}, "s_outlet_6": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 42}, "s_outlet_7": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 47}, "s_outlet_8": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 52}, "s_vap_outlet_1": {"cell_config": {"gap": {"destination": {"x": -30, "y": 0}, "source": {"x": 30, "y": 0}}}, "cell_index": 8}}} \ No newline at end of file +{ + "cells": [ + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/mixer.svg" + }, + "label": { + "text": "M01" + }, + "root": { + "title": "mixer" + } + }, + "id": "M01", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": {}, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 0 + }, + { + "group": "in", + "id": 21 + }, + { + "group": "in", + "id": 23 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/heater_2.svg" + }, + "label": { + "text": "H02" + }, + "root": { + "title": "heater" + } + }, + "id": "H02", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 6, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 43, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 1 + }, + { + "group": "out", + "id": 2 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s01", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s01" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "M01", + "port": 0 + }, + "target": { + "id": "H02", + "port": 1 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/flash.svg" + }, + "label": { + "text": "F03" + }, + "root": { + "title": "flash" + } + }, + "id": "F03", + "ports": { + "groups": { + "bottom": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 25, + "y": 50 + }, + "name": "bottom" + } + }, + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 8, + "dy": 0 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": -8, + "dy": 0 + }, + "name": "right" + } + }, + "top": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 25, + "y": 0 + }, + "name": "top" + } + } + }, + "items": [ + { + "group": "in", + "id": 3 + }, + { + "group": "out", + "id": 4 + }, + { + "group": "out", + "id": 6 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s02", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s02" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "H02", + "port": 2 + }, + "target": { + "id": "F03", + "port": 3 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "liq_outlet_1" + }, + "root": { + "title": "product" + } + }, + "id": "liq_outlet_1", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 5 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_liq_outlet_1", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "product info", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_liq_outlet_1" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "F03", + "port": 4 + }, + "target": { + "id": "liq_outlet_1", + "port": 5 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "vap_outlet_1" + }, + "root": { + "title": "product" + } + }, + "id": "vap_outlet_1", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 7 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_vap_outlet_1", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "product info", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_vap_outlet_1" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "F03", + "port": 6 + }, + "target": { + "id": "vap_outlet_1", + "port": 7 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_1" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_1", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 8 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/heater_2.svg" + }, + "label": { + "text": "FG_cooler" + }, + "root": { + "title": "heater" + } + }, + "id": "FG_cooler", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 6, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 43, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 9 + }, + { + "group": "out", + "id": 10 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_1", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_1" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_1", + "port": 8 + }, + "target": { + "id": "FG_cooler", + "port": 9 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_1" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_1", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 11 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_1", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_1" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "FG_cooler", + "port": 10 + }, + "target": { + "id": "outlet_1", + "port": 11 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_2" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_2", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 12 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/heater_2.svg" + }, + "label": { + "text": "HTR_pseudo_tube" + }, + "root": { + "title": "heater" + } + }, + "id": "HTR_pseudo_tube", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 6, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 43, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 13 + }, + { + "group": "out", + "id": 14 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_2", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_2" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_2", + "port": 12 + }, + "target": { + "id": "HTR_pseudo_tube", + "port": 13 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_2" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_2", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 15 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_2", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_2" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "HTR_pseudo_tube", + "port": 14 + }, + "target": { + "id": "outlet_2", + "port": 15 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_3" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_3", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 16 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/heater_2.svg" + }, + "label": { + "text": "LTR_pseudo_tube" + }, + "root": { + "title": "heater" + } + }, + "id": "LTR_pseudo_tube", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 6, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 43, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 17 + }, + { + "group": "out", + "id": 18 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_3", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_3" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_3", + "port": 16 + }, + "target": { + "id": "LTR_pseudo_tube", + "port": 17 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_3" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_3", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 19 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_3", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_3" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "LTR_pseudo_tube", + "port": 18 + }, + "target": { + "id": "outlet_3", + "port": 19 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_1_1" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_1_1", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 20 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_1_1", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_1_1" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_1_1", + "port": 20 + }, + "target": { + "id": "M01", + "port": 21 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_2_1" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_2_1", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 22 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_2_1", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_2_1" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_2_1", + "port": 22 + }, + "target": { + "id": "M01", + "port": 23 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_4" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_4", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 24 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/heater_2.svg" + }, + "label": { + "text": "boiler" + }, + "root": { + "title": "heater" + } + }, + "id": "boiler", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 6, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 43, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 25 + }, + { + "group": "out", + "id": 26 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_4", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_4" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_4", + "port": 24 + }, + "target": { + "id": "boiler", + "port": 25 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_4" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_4", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 27 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_4", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_4" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "boiler", + "port": 26 + }, + "target": { + "id": "outlet_4", + "port": 27 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_5" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_5", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 28 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/compressor.svg" + }, + "label": { + "text": "bypass_compressor" + }, + "root": { + "title": "pressure_changer" + } + }, + "id": "bypass_compressor", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "x": -1, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "x": 49, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 29 + }, + { + "group": "out", + "id": 30 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_5", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_5" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_5", + "port": 28 + }, + "target": { + "id": "bypass_compressor", + "port": 29 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_5" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_5", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 31 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_5", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_5" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "bypass_compressor", + "port": 30 + }, + "target": { + "id": "outlet_5", + "port": 31 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_6" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_6", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 32 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/compressor.svg" + }, + "label": { + "text": "main_compressor" + }, + "root": { + "title": "pressure_changer" + } + }, + "id": "main_compressor", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "x": -1, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "x": 49, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 33 + }, + { + "group": "out", + "id": 34 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_6", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_6" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_6", + "port": 32 + }, + "target": { + "id": "main_compressor", + "port": 33 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_6" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_6", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 35 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_6", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_6" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "main_compressor", + "port": 34 + }, + "target": { + "id": "outlet_6", + "port": 35 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_7" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_7", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 36 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/heater_2.svg" + }, + "label": { + "text": "pre_boiler" + }, + "root": { + "title": "heater" + } + }, + "id": "pre_boiler", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 6, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 43, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 37 + }, + { + "group": "out", + "id": 38 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_7", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_7" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_7", + "port": 36 + }, + "target": { + "id": "pre_boiler", + "port": 37 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_7" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_7", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 39 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_7", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_7" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "pre_boiler", + "port": 38 + }, + "target": { + "id": "outlet_7", + "port": 39 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/feed.svg" + }, + "label": { + "text": "inlet_8" + }, + "root": { + "title": "feed" + } + }, + "id": "inlet_8", + "ports": { + "groups": { + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 48, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "out", + "id": 40 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/compressor.svg" + }, + "label": { + "text": "turbine" + }, + "root": { + "title": "pressure_changer" + } + }, + "id": "turbine", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "x": -1, + "y": 25 + }, + "name": "left" + } + }, + "out": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "x": 49, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 41 + }, + { + "group": "out", + "id": 42 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_inlet_8", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_inlet_8" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "inlet_8", + "port": 40 + }, + "target": { + "id": "turbine", + "port": 41 + }, + "type": "standard.Link", + "z": 2 + }, + { + "angle": 0, + "attrs": { + "image": { + "xlinkHref": "/images/icons/product.svg" + }, + "label": { + "text": "outlet_8" + }, + "root": { + "title": "product" + } + }, + "id": "outlet_8", + "ports": { + "groups": { + "in": { + "attrs": { + "rect": { + "height": 0, + "stroke": "#000000", + "stroke-width": 0, + "width": 0 + } + }, + "markup": "", + "position": { + "args": { + "dx": 1, + "dy": 1, + "x": 2, + "y": 25 + }, + "name": "left" + } + } + }, + "items": [ + { + "group": "in", + "id": 43 + } + ] + }, + "size": { + "height": 50, + "width": 50 + }, + "type": "standard.Image", + "z": 1 + }, + { + "attrs": { + "line": { + "stroke": "#979797", + "stroke-width": 2 + } + }, + "connector": { + "attrs": { + "line": { + "stroke": "#5c9adb" + } + }, + "name": "jumpover" + }, + "id": "s_outlet_8", + "labels": [ + { + "attrs": { + "rect": { + "fill": "#d7dce0", + "fill-opacity": 0, + "stroke": "white", + "stroke-width": 0 + }, + "text": { + "display": "none", + "fill": "black", + "text": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "text-anchor": "left" + } + }, + "position": { + "distance": 0.66, + "offset": -40 + } + }, + { + "attrs": { + "text": { + "text": "s_outlet_8" + } + } + } + ], + "router": { + "name": "manhattan", + "padding": 10 + }, + "source": { + "id": "turbine", + "port": 42 + }, + "target": { + "id": "outlet_8", + "port": 43 + }, + "type": "standard.Link", + "z": 2 + } + ], + "model": { + "arcs": { + "s01": { + "dest": "H02", + "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "source": "M01" + }, + "s02": { + "dest": "F03", + "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "source": "H02" + }, + "s_inlet_1": { + "dest": "FG_cooler", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_1" + }, + "s_inlet_1_1": { + "dest": "M01", + "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "source": "inlet_1_1" + }, + "s_inlet_2": { + "dest": "HTR_pseudo_tube", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_2" + }, + "s_inlet_2_1": { + "dest": "M01", + "label": "Flow_mol 1.0\nMole_frac_comp benzene 0.5\nMole_frac_comp toluene 0.5\nTemperature 298.15\nPressure 10132", + "source": "inlet_2_1" + }, + "s_inlet_3": { + "dest": "LTR_pseudo_tube", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_3" + }, + "s_inlet_4": { + "dest": "boiler", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_4" + }, + "s_inlet_5": { + "dest": "bypass_compressor", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_5" + }, + "s_inlet_6": { + "dest": "main_compressor", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_6" + }, + "s_inlet_7": { + "dest": "pre_boiler", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_7" + }, + "s_inlet_8": { + "dest": "turbine", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "inlet_8" + }, + "s_liq_outlet_1": { + "dest": "liq_outlet_1", + "label": "product info", + "source": "F03" + }, + "s_outlet_1": { + "dest": "outlet_1", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "FG_cooler" + }, + "s_outlet_2": { + "dest": "outlet_2", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "HTR_pseudo_tube" + }, + "s_outlet_3": { + "dest": "outlet_3", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "LTR_pseudo_tube" + }, + "s_outlet_4": { + "dest": "outlet_4", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "boiler" + }, + "s_outlet_5": { + "dest": "outlet_5", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "bypass_compressor" + }, + "s_outlet_6": { + "dest": "outlet_6", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "main_compressor" + }, + "s_outlet_7": { + "dest": "outlet_7", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "pre_boiler" + }, + "s_outlet_8": { + "dest": "outlet_8", + "label": "Molar flow 1\nMass flow 0.04401\nT 216.07301\nP 3947625.0\nVapor fraction 0.0\nMolar enthalpy 3522.3482", + "source": "turbine" + }, + "s_vap_outlet_1": { + "dest": "vap_outlet_1", + "label": "product info", + "source": "F03" + } + }, + "id": "demo", + "stream_table": { + "columns": [ + "Variable", + "Units", + "s_inlet_8", + "s_inlet_7", + "s_inlet_6", + "s_inlet_5", + "s_inlet_4", + "s_inlet_2_1", + "s_inlet_1_1", + "s_inlet_3", + "s_inlet_2", + "s_inlet_1", + "s01", + "s02", + "s_outlet_1", + "s_outlet_2", + "s_outlet_3", + "s_outlet_4", + "s_outlet_5", + "s_outlet_6", + "s_outlet_7", + "s_outlet_8" + ], + "data": [ + [ + "flow_mol", + { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "-", + "-", + "-", + "-", + "-", + [ + 1.0, + "unfixed" + ], + [ + 1.0, + "unfixed" + ], + "-", + "-", + "-", + [ + 1.0, + "unfixed" + ], + [ + 1.0, + "unfixed" + ], + "-", + "-", + "-", + "-", + "-", + "-", + "-", + "-" + ], + [ + "mole_frac_comp benzene", + { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "-", + "-", + "-", + "-", + "-", + [ + 0.5, + "unfixed" + ], + [ + 0.5, + "unfixed" + ], + "-", + "-", + "-", + [ + 0.5, + "unfixed" + ], + [ + 0.5, + "unfixed" + ], + "-", + "-", + "-", + "-", + "-", + "-", + "-", + "-" + ], + [ + "mole_frac_comp toluene", + { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "-", + "-", + "-", + "-", + "-", + [ + 0.5, + "unfixed" + ], + [ + 0.5, + "unfixed" + ], + "-", + "-", + "-", + [ + 0.5, + "unfixed" + ], + [ + 0.5, + "unfixed" + ], + "-", + "-", + "-", + "-", + "-", + "-", + "-", + "-" + ], + [ + "temperature", + { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "-", + "-", + "-", + "-", + "-", + [ + 298.15, + "unfixed" + ], + [ + 298.15, + "unfixed" + ], + "-", + "-", + "-", + [ + 298.15, + "unfixed" + ], + [ + 298.15, + "unfixed" + ], + "-", + "-", + "-", + "-", + "-", + "-", + "-", + "-" + ], + [ + "pressure", + { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "-", + "-", + "-", + "-", + "-", + [ + 101325, + "unfixed" + ], + [ + 101325, + "unfixed" + ], + "-", + "-", + "-", + [ + 101325, + "unfixed" + ], + [ + 101325, + "unfixed" + ], + "-", + "-", + "-", + "-", + "-", + "-", + "-", + "-" + ], + [ + "Molar Flow", + { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + "-", + "-", + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + "-", + "-", + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ], + [ + 1, + "unfixed" + ] + ], + [ + "Mass Flow", + { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + "-", + "-", + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + "-", + "-", + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ], + [ + 0.04401, + "expression" + ] + ], + [ + "T", + { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + "-", + "-", + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + "-", + "-", + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ], + [ + 216.07301, + "expression" + ] + ], + [ + "P", + { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + "-", + "-", + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + "-", + "-", + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ], + [ + 3947625.0, + "unfixed" + ] + ], + [ + "Vapor Fraction", + { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + "-", + "-", + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + "-", + "-", + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ], + [ + 0.0, + "expression" + ] + ], + [ + "Molar Enthalpy", + { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + "-", + "-", + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + "-", + "-", + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ], + [ + 3522.34828, + "unfixed" + ] + ] + ], + "index": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ] + }, + "unit_models": { + "F03": { + "image": "/images/icons/flash.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + }, + "1": { + "Value": 0.0, + "Variable": "Pressure Change" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Liquid Outlet": 0.5, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Vapor Outlet": 0.5, + "Variable": "flow_mol" + }, + "1": { + "Inlet": 0.5, + "Liquid Outlet": 0.5, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Vapor Outlet": 0.5, + "Variable": "mole_frac_comp benzene" + }, + "2": { + "Inlet": 0.5, + "Liquid Outlet": 0.5, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Vapor Outlet": 0.5, + "Variable": "mole_frac_comp toluene" + }, + "3": { + "Inlet": 298.15, + "Liquid Outlet": 298.15, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Vapor Outlet": 298.15, + "Variable": "temperature" + }, + "4": { + "Inlet": 101325.0, + "Liquid Outlet": 101325.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Vapor Outlet": 101325.0, + "Variable": "pressure" + } + }, + "type": "flash" + }, + "FG_cooler": { + "image": "/images/icons/heater_2.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "heater" + }, + "H02": { + "image": "/images/icons/heater_2.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "flow_mol" + }, + "1": { + "Inlet": 0.5, + "Outlet": 0.5, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "mole_frac_comp benzene" + }, + "2": { + "Inlet": 0.5, + "Outlet": 0.5, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "mole_frac_comp toluene" + }, + "3": { + "Inlet": 298.15, + "Outlet": 298.15, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "temperature" + }, + "4": { + "Inlet": 101325.0, + "Outlet": 101325.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "pressure" + } + }, + "type": "heater" + }, + "HTR_pseudo_tube": { + "image": "/images/icons/heater_2.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "heater" + }, + "LTR_pseudo_tube": { + "image": "/images/icons/heater_2.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "heater" + }, + "M01": { + "image": "/images/icons/mixer.svg", + "performance_contents": {}, + "stream_contents": { + "0": { + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "flow_mol", + "inlet_1": 1.0, + "inlet_2": 1.0 + }, + "1": { + "Outlet": 0.5, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "mole_frac_comp benzene", + "inlet_1": 0.5, + "inlet_2": 0.5 + }, + "2": { + "Outlet": 0.5, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "mole_frac_comp toluene", + "inlet_1": 0.5, + "inlet_2": 0.5 + }, + "3": { + "Outlet": 298.15, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "temperature", + "inlet_1": 298.15, + "inlet_2": 298.15 + }, + "4": { + "Outlet": 101325.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "pressure", + "inlet_1": 101325.0, + "inlet_2": 101325.0 + } + }, + "type": "mixer" + }, + "boiler": { + "image": "/images/icons/heater_2.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "heater" + }, + "bypass_compressor": { + "image": "/images/icons/compressor.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Mechanical Work" + }, + "1": { + "Value": 0.0, + "Variable": "Pressure Change" + }, + "2": { + "Value": 1.0, + "Variable": "Pressure Ratio" + }, + "3": { + "Value": 0.8, + "Variable": "Isentropic Efficiency" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "pressure_changer" + }, + "inlet_1": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_1_1": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_2": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_2_1": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_3": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_4": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_5": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_6": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_7": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "inlet_8": { + "image": "/images/icons/feed.svg", + "type": "feed" + }, + "liq_outlet_1": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "main_compressor": { + "image": "/images/icons/compressor.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Mechanical Work" + }, + "1": { + "Value": 0.0, + "Variable": "Pressure Change" + }, + "2": { + "Value": 1.0, + "Variable": "Pressure Ratio" + }, + "3": { + "Value": 0.8, + "Variable": "Isentropic Efficiency" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "pressure_changer" + }, + "outlet_1": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_2": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_3": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_4": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_5": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_6": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_7": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "outlet_8": { + "image": "/images/icons/product.svg", + "type": "product" + }, + "pre_boiler": { + "image": "/images/icons/heater_2.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Heat Duty" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "heater" + }, + "turbine": { + "image": "/images/icons/compressor.svg", + "performance_contents": { + "0": { + "Value": 0.0, + "Variable": "Mechanical Work" + }, + "1": { + "Value": 0.0, + "Variable": "Pressure Change" + }, + "2": { + "Value": 1.0, + "Variable": "Pressure Ratio" + }, + "3": { + "Value": 0.8, + "Variable": "Isentropic Efficiency" + } + }, + "stream_contents": { + "0": { + "Inlet": 1.0, + "Outlet": 1.0, + "Units": { + "html": "mol/s", + "latex": "\\frac{\\mathrm{mol}}{\\mathrm{s}}", + "raw": "mole / second" + }, + "Variable": "Molar Flow" + }, + "1": { + "Inlet": 0.04401, + "Outlet": 0.04401, + "Units": { + "html": "kg/s", + "latex": "\\frac{\\mathrm{kg}}{\\mathrm{s}}", + "raw": "kilogram / second" + }, + "Variable": "Mass Flow" + }, + "2": { + "Inlet": 216.07301, + "Outlet": 216.07301, + "Units": { + "html": "K", + "latex": "\\mathrm{K}", + "raw": "kelvin" + }, + "Variable": "T" + }, + "3": { + "Inlet": 3947625.0, + "Outlet": 3947625.0, + "Units": { + "html": "Pa", + "latex": "\\mathrm{Pa}", + "raw": "pascal" + }, + "Variable": "P" + }, + "4": { + "Inlet": 0.0, + "Outlet": 0.0, + "Units": { + "html": "", + "latex": "", + "raw": "dimensionless" + }, + "Variable": "Vapor Fraction" + }, + "5": { + "Inlet": 3522.34828, + "Outlet": 3522.34828, + "Units": { + "html": "J/mol", + "latex": "\\frac{\\mathrm{J}}{\\mathrm{mol}}", + "raw": "joule / mole" + }, + "Variable": "Molar Enthalpy" + } + }, + "type": "pressure_changer" + }, + "vap_outlet_1": { + "image": "/images/icons/product.svg", + "type": "product" + } + } + }, + "routing_config": { + "s01": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 2 + }, + "s02": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 4 + }, + "s_inlet_1": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 11 + }, + "s_inlet_1_1": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 25 + }, + "s_inlet_2": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 16 + }, + "s_inlet_2_1": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 27 + }, + "s_inlet_3": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 21 + }, + "s_inlet_4": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 30 + }, + "s_inlet_5": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 35 + }, + "s_inlet_6": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 40 + }, + "s_inlet_7": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 45 + }, + "s_inlet_8": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 50 + }, + "s_liq_outlet_1": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 6 + }, + "s_outlet_1": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 13 + }, + "s_outlet_2": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 18 + }, + "s_outlet_3": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 23 + }, + "s_outlet_4": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 32 + }, + "s_outlet_5": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 37 + }, + "s_outlet_6": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 42 + }, + "s_outlet_7": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 47 + }, + "s_outlet_8": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 52 + }, + "s_vap_outlet_1": { + "cell_config": { + "gap": { + "destination": { + "x": -30, + "y": 0 + }, + "source": { + "x": 30, + "y": 0 + } + } + }, + "cell_index": 8 + } + } +} \ No newline at end of file diff --git a/idaes_ui/fv/tests/test_flowsheet.py b/idaes_ui/fv/tests/test_flowsheet.py index b75e02c1..6c62bfcf 100644 --- a/idaes_ui/fv/tests/test_flowsheet.py +++ b/idaes_ui/fv/tests/test_flowsheet.py @@ -216,7 +216,7 @@ def _canonicalize(d: dict) -> dict: [ ("demo", _get_demo_flowsheet, "demo_flowsheet.json"), ("demo", _get_flash_flowsheet, "flash_flowsheet.json"), - ("boiler", _get_boiler_flowsheet, "serialized_boiler_flowsheet.json"), +# ("boiler", _get_boiler_flowsheet, "serialized_boiler_flowsheet.json"), ], ids=lambda obj: getattr(obj, "__qualname__", str(obj)), ) diff --git a/package-lock.json b/package-lock.json index 85dedbfe..e137907f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "idaes-ui", - "version": "1.0.0", + "version": "0.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "idaes-ui", - "version": "1.0.0", + "version": "0.1.0", "license": "ISC", "devDependencies": { - "cypress": "^12.15.0" + "cypress": "^12.17.4" } }, "node_modules/@colors/colors": { @@ -23,9 +23,9 @@ } }, "node_modules/@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "version": "2.88.12", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", + "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -43,7 +43,7 @@ "performance-now": "^2.1.0", "qs": "~6.10.3", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", + "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" }, @@ -71,9 +71,9 @@ } }, "node_modules/@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "version": "16.18.91", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.91.tgz", + "integrity": "sha512-h8Q4klc8xzc9kJKr7UYNtJde5TU2qEePVyH3WyzJaUC+3ptyc5kPQbWOIUcn8ZsG5+KSkq+P0py0kC0VqxgAXw==", "dev": true }, "node_modules/@types/sinonjs__fake-timers": { @@ -342,13 +342,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -545,15 +551,15 @@ } }, "node_modules/cypress": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "version": "12.17.4", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz", + "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==", "dev": true, "hasInstallScript": true, "dependencies": { - "@cypress/request": "^2.88.10", + "@cypress/request": "2.88.12", "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", + "@types/node": "^16.18.39", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", @@ -586,9 +592,10 @@ "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", + "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.3.2", + "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.1", "untildify": "^4.0.0", @@ -636,6 +643,23 @@ } } }, + "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==", + "dev": true, + "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/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -682,6 +706,27 @@ "node": ">=8.6" } }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -836,21 +881,28 @@ "dev": true }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -924,24 +976,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -951,10 +1003,22 @@ "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==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -975,6 +1039,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/http-signature": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", @@ -1386,9 +1462,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1490,6 +1566,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -1513,9 +1598,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -1536,6 +1621,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -1545,6 +1636,12 @@ "throttleit": "^1.0.0" } }, + "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==", + "dev": true + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -1629,6 +1726,23 @@ "node": ">=10" } }, + "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==", + "dev": true, + "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/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1651,14 +1765,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1685,9 +1803,9 @@ } }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { "asn1": "~0.2.3", @@ -1784,16 +1902,27 @@ } }, "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { - "node": ">=0.8" + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" } }, "node_modules/tslib": { @@ -1850,6 +1979,16 @@ "node": ">=8" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -1937,9 +2076,9 @@ "optional": true }, "@cypress/request": { - "version": "2.88.11", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz", - "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==", + "version": "2.88.12", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.12.tgz", + "integrity": "sha512-tOn+0mDZxASFM+cuAP9szGUGPI1HwWVSvdzm7V4cCsPdFTx6qMj29CwaQmRAMIEhORIUBFBsYROYJcveK4uOjA==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -1957,7 +2096,7 @@ "performance-now": "^2.1.0", "qs": "~6.10.3", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", + "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" } @@ -1984,9 +2123,9 @@ } }, "@types/node": { - "version": "14.18.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.51.tgz", - "integrity": "sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==", + "version": "16.18.91", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.91.tgz", + "integrity": "sha512-h8Q4klc8xzc9kJKr7UYNtJde5TU2qEePVyH3WyzJaUC+3ptyc5kPQbWOIUcn8ZsG5+KSkq+P0py0kC0VqxgAXw==", "dev": true }, "@types/sinonjs__fake-timers": { @@ -2174,13 +2313,16 @@ "dev": true }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" } }, "caseless": { @@ -2323,14 +2465,14 @@ } }, "cypress": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.15.0.tgz", - "integrity": "sha512-FqGbxsH+QgjStuTO9onXMIeF44eOrgVwPvlcvuzLIaePQMkl72YgBvpuHlBGRcrw3Q4SvqKfajN8iV5XWShAiQ==", + "version": "12.17.4", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz", + "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==", "dev": true, "requires": { - "@cypress/request": "^2.88.10", + "@cypress/request": "2.88.12", "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", + "@types/node": "^16.18.39", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", "arch": "^2.2.0", @@ -2363,9 +2505,10 @@ "minimist": "^1.2.8", "ospath": "^1.2.2", "pretty-bytes": "^5.6.0", + "process": "^0.11.10", "proxy-from-env": "1.0.0", "request-progress": "^3.0.0", - "semver": "^7.3.2", + "semver": "^7.5.3", "supports-color": "^8.1.1", "tmp": "~0.2.1", "untildify": "^4.0.0", @@ -2396,6 +2539,17 @@ "ms": "2.1.2" } }, + "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==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2436,6 +2590,21 @@ "ansi-colors": "^4.1.1" } }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2552,21 +2721,22 @@ "dev": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-stream": { @@ -2619,31 +2789,40 @@ "ini": "2.0.0" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "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==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "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==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0" + } + }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true }, "has-symbols": { @@ -2652,6 +2831,15 @@ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "http-signature": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", @@ -2951,9 +3139,9 @@ } }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, "once": { @@ -3025,6 +3213,12 @@ "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -3048,9 +3242,9 @@ } }, "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, "qs": { @@ -3062,6 +3256,12 @@ "side-channel": "^1.0.4" } }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -3071,6 +3271,12 @@ "throttleit": "^1.0.0" } }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -3126,6 +3332,20 @@ "lru-cache": "^6.0.0" } }, + "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==", + "dev": true, + "requires": { + "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" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3142,14 +3362,15 @@ "dev": true }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { @@ -3170,9 +3391,9 @@ } }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -3243,13 +3464,23 @@ } }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "dependencies": { + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true + } } }, "tslib": { @@ -3291,6 +3522,16 @@ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", diff --git a/pyproject.toml b/pyproject.toml index d0719ccc..c045d087 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,14 +8,13 @@ build-backend = "setuptools.build_meta" [project] name = "idaes-ui" - description = "IDAES PSE Platform UI" + description = "IDAES UI" readme = "README.md" - version = "0.23.8" #Version format 0.YY.MM + version = "0.24.03" #Version format 0.YY.MM license = {text="BSD"} requires-python = ">=3.8" authors = [ - {name="The IDAES Project"}, - {name="Dan Gunter", email="dkgunter@lbl.gov"} + {name="The IDAES Project"} ] classifiers = [ "Development Status :: 3 - Alpha", @@ -42,17 +41,18 @@ build-backend = "setuptools.build_meta" "setuptools", # For running tests "pytest", - # dependency 'requests' module for standalone idaes-ui package - "requests", - "pydantic", # idaes_ui.fv.models + "playwright==1.42.0", + "pytest-playwright==0.4.4", + "requests==2.31.0", + "pydantic", ] keywords = ["IDAES", "energy systems", "chemical engineering", "process modeling"] [project.optional-dependencies] -# Just for developers (they should also add 'jb') dev = [ # For adding copyright headers (see addheader.yml and the readme) - "addheader >= 0.3.0" + "addheader >= 0.3.0", + # Dev versions of idaes/idaes-ui in requirements-dev.txt ] # For packaging pkg = [ @@ -89,9 +89,18 @@ idaes_ui = [ "*.dat", "*.yml", "*.yaml", - "fv/static/lib/**/*" ] [tool.pytest.ini_options] minversion = "6.0" -addopts = "-ra --pyargs idaes_ui.fv" +addopts = "-q" +testpaths = [ + "idaes_ui", + "docs" +] +markers = [ + "component: between unit and integration test", + "unit: test one small unit of functionality", + "integration: test integrated functionality", + "screenshot: screenshots" +] diff --git a/requirements-dev.txt b/requirements-dev.txt index 0e84f5a5..80badb5d 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,4 +4,8 @@ pydantic~=2.0 fastapi uvicorn pytest-icdiff >= 0.7 # readable dict diffs for test_flowsheet and others -httpx # fastapi testing \ No newline at end of file +httpx # fastapi testing +# for testing w/playwright +playwright==1.42.0 +pytest-playwright==0.4.4 +requests==2.31.0