From e638ba6d27cfdbe2f8678e3f091d25bc47c84700 Mon Sep 17 00:00:00 2001 From: Forster <112929809+FrostyHec@users.noreply.github.com> Date: Fri, 13 Sep 2024 02:49:58 +0800 Subject: [PATCH 01/21] frontend transfer --- .../hubble-fe-new/.env.development | 1 + .../hubble-fe-new/.env.production | 0 hugegraph-hubble/hubble-fe-new/.eslintrc.js | 31 + hugegraph-hubble/hubble-fe-new/.gitignore | 23 + hugegraph-hubble/hubble-fe-new/README.md | 70 + .../hubble-fe-new/package-lock.json | 24772 ++++++++++++++++ hugegraph-hubble/hubble-fe-new/package.json | 78 + .../public/favicon.ico | Bin .../hubble-fe-new/public/index.html | 52 + .../hubble-fe-new/public/logo192.png | Bin 0 -> 5347 bytes .../hubble-fe-new/public/logo512.png | Bin 0 -> 9664 bytes .../public/manifest.json | 10 + .../hubble-fe-new/public/robots.txt | 3 + hugegraph-hubble/hubble-fe-new/src/App.css | 74 + hugegraph-hubble/hubble-fe-new/src/App.js | 16 + hugegraph-hubble/hubble-fe-new/src/App.scss | 26 + .../hubble-fe-new/src/App.test.js | 8 + .../hubble-fe-new/src/api/analysis.js | 185 + .../hubble-fe-new/src/api/auth.js | 199 + .../hubble-fe-new/src/api/cloud.js | 36 + .../hubble-fe-new/src/api/index.js | 9 + .../hubble-fe-new/src/api/manage.js | 350 + .../hubble-fe-new/src/api/request.js | 96 + .../hubble-fe-new/src/api/request2.js | 109 + .../hubble-fe-new/src/assets/canvas_bg.png | Bin 0 -> 980 bytes .../src/assets}/ic_arrow.svg | 17 - .../src/assets}/ic_arrow_selected.svg | 17 - .../src/assets}/ic_biaoge_normal.svg | 17 - .../src/assets}/ic_biaoge_pressed.svg | 21 +- .../src/assets}/ic_done_144.svg | 17 - .../src/assets}/ic_fail.svg | 17 - .../src/assets}/ic_json_normal.svg | 17 - .../src/assets}/ic_json_pressed.svg | 21 +- .../src/assets}/ic_loading_back.svg | 17 - .../src/assets}/ic_loading_front.svg | 17 - .../src/assets}/ic_sousuo_empty.svg | 17 - .../hubble-fe-new/src/assets/ic_straight.svg | 13 + .../src/assets/ic_straight_selected.svg | 13 + .../src/assets}/ic_tuzhanshi_normal.svg | 17 - .../src/assets}/ic_tuzhanshi_pressed.svg | 21 +- .../src/assets/layout_circular.svg | 1 + .../src/assets/layout_concentric.svg | 1 + .../hubble-fe-new/src/assets/layout_dagre.svg | 1 + .../hubble-fe-new/src/assets/layout_force.svg | 1 + .../hubble-fe-new/src/assets/layout_grid.svg | 8 + .../src/assets/layout_radial.svg | 7 + .../src/assets}/logo.png | Bin .../hubble-fe-new/src/assets/logo_img.png | Bin 0 -> 37853 bytes .../hubble-fe-new/src/assets/logo_new.png | Bin 0 -> 79524 bytes .../hubble-fe-new/src/assets/logo_text.png | Bin 0 -> 85845 bytes .../src/components/CodeEditor/index.js | 81 + .../components/CodeEditor/syntax/cypher.js | 113 + .../components/CodeEditor/syntax/gremlin.js | 158 + .../src/components/CodeEditor/syntax/index.js | 4 + .../src/components/ColorSelect/index.js | 63 + .../components/ColorSelect/index.module.scss | 47 + .../src/components/ERView/EditLayer.js | 71 + .../src/components/ERView/config.js | 289 + .../src/components/ERView/data/edge.json | 232 + .../src/components/ERView/data/group.json | 95 + .../src/components/ERView/data/property.json | 32 + .../src/components/ERView/data/test.json | 295 + .../src/components/ERView/data/vertex.json | 123 + .../src/components/ERView/index.js | 341 + .../src/components/ERView/index.module.scss | 13 + .../src/components/ERView/utils.js | 99 + .../src/components/ExecutionContent/index.js | 52 + .../ExecutionContent/index.module.scss | 4 + .../src/components/GraphinView/index.js | 49 + .../src/components/IconSelect/index.js | 88 + .../components/IconSelect/index.module.scss | 29 + .../src/components/ListButton/index.js | 21 + .../src/components/SelectUser/index.js | 123 + .../src/components/Sidebar/index.ant.js | 106 + .../src/components/Sidebar/index.module.scss | 3 + .../src/components/SlideComponent/index.js | 27 + .../SlideComponent/index.module.scss | 22 + .../src/components/Status/index.js | 49 + .../src/components/Status/index.module.scss | 26 + .../src/components/TableHeader/index.js | 11 + .../components/TableHeader/index.module.scss | 3 + .../src/components/Topbar/index.ant.js | 53 + .../src/components/Topbar/index.module.scss | 27 + .../src/customHook/useCustomEdge.js | 50 + .../src/customHook/useCustomGrid.js | 285 + .../src/customHook/useCustomNode.js | 159 + .../src/customHook/useDownloadJson.js | 24 + hugegraph-hubble/hubble-fe-new/src/index.css | 18 + hugegraph-hubble/hubble-fe-new/src/index.js | 24 + .../hubble-fe-new/src/layout.ant.js | 23 + hugegraph-hubble/hubble-fe-new/src/logo.svg | 1 + .../src/modules/Context/index.js | 19 + .../src/modules/GraphAnalysis/index.js | 131 + .../algorithm/AlgorithmSearch/index.js | 36 + .../AlgorithmSearch/index.module.scss | 9 + .../GraphResult/GraphMenuBar/index.js | 170 + .../GraphResult/GraphToolBar/index.js | 54 + .../algorithm/GraphResult/Home/index.js | 521 + .../GraphResult/Home/index.module.scss | 11 + .../algorithm/GraphResult/JaccView/index.js | 23 + .../GraphResult/JaccView/index.module.scss | 13 + .../GraphResult/NeighborRankView/index.js | 45 + .../NeighborRankView/index.module.scss | 25 + .../GraphResult/RankApiView/index.js | 45 + .../GraphResult/RankApiView/index.module.scss | 13 + .../algorithm/GraphResult/utils/index.js | 116 + .../src/modules/algorithm/Home/index.js | 297 + .../modules/algorithm/Home/index.module.scss | 6 + .../algorithm/LogsDetail/ExecuteLog/index.js | 167 + .../LogsDetail/ExecuteLog/index.module.scss | 6 + .../algorithm/LogsDetail/Favorite/index.js | 208 + .../LogsDetail/Favorite/index.module.scss | 22 + .../algorithm/LogsDetail/Home/index.js | 159 + .../LogsDetail/Home/index.module.scss | 28 + .../AlgorithmNameHeader/index.js | 136 + .../AlgorithmNameHeader/index.module.scss | 48 + .../algorithmsForm/BoolSelectItem/index.js | 31 + .../algorithmsForm/CapacityItem/index.js | 23 + .../algorithmsForm/DirectionItem/index.js | 35 + .../algorithm/algorithmsForm/Home/index.js | 51 + .../algorithmsForm/Home/index.module.scss | 56 + .../algorithmsForm/LabelItem/index.js | 21 + .../algorithmsForm/LimitItem/index.js | 26 + .../algorithmsForm/MaxDegreeItem/index.js | 26 + .../algorithmsForm/MaxDepthItem/index.js | 25 + .../algorithmsForm/NearestItem/index.js | 28 + .../Olap/BetweennessCentrality/index.js | 160 + .../BetweennessCentralityVermeer/index.js | 157 + .../Olap/ClosenessCentrality/index.js | 163 + .../Olap/ClosenessCentralityVermeer/index.js | 157 + .../Olap/ClusterCoefficient/index.js | 139 + .../Olap/DegreeCentrality/index.js | 155 + .../Olap/DegreeCentralityVermeer/index.js | 149 + .../Olap/FilterSubGraphMatching/index.js | 145 + .../Olap/FilteredRingsDetection/index.js | 173 + .../algorithmsForm/Olap/KCore/index.js | 137 + .../algorithmsForm/Olap/KCoreVermeer/index.js | 144 + .../Olap/LabelPropagationAlgorithm/index.js | 129 + .../LabelPropagationAlgorithmVermeer/index.js | 144 + .../algorithmsForm/Olap/Links/index.js | 154 + .../algorithmsForm/Olap/Louvain/index.js | 152 + .../Olap/OlapComputerItem/index.js | 70 + .../algorithmsForm/Olap/OlapItem/index.js | 131 + .../algorithmsForm/Olap/PageRank/index.js | 159 + .../Olap/PageRankVermeer/index.js | 161 + .../Olap/PersonalPageRank/index.js | 190 + .../Olap/RingsDetection/index.js | 138 + .../algorithmsForm/Olap/SSSPVermeer/index.js | 143 + .../Olap/TriangleCount/index.js | 159 + .../Olap/TriangleCountVermeer/index.js | 134 + .../Olap/WeaklyConnectedComponent/index.js | 139 + .../WeaklyConnectedComponentVermeer/index.js | 145 + .../algorithmsForm/OlapHome/index.js | 113 + .../algorithmsForm/OlapHome/index.module.scss | 4 + .../algorithmsForm/Oltp/AdamicAdar/index.js | 170 + .../algorithmsForm/Oltp/AllPaths/index.js | 221 + .../algorithmsForm/Oltp/Crosspoints/index.js | 198 + .../Oltp/CustomizedCrosspoints/Home/index.js | 162 + .../PathPatternForm/index.js | 144 + .../Oltp/CustomizedPaths/Home/index.js | 182 + .../Oltp/CustomizedPaths/StepItem/index.js | 180 + .../algorithmsForm/Oltp/Egonet/index.js | 267 + .../Oltp/Egonet/index.module.scss | 40 + .../Oltp/FindShortestPath/index.js | 198 + .../Oltp/FindShortestPathWithWeight/index.js | 199 + .../Oltp/FusiformSimilarity/index.js | 238 + .../Oltp/JaccardSimilarityGet/index.js | 135 + .../Oltp/JaccardSimilarityPost/index.js | 274 + .../algorithmsForm/Oltp/KneighborGet/index.js | 135 + .../Oltp/KneighborPost/index.js | 284 + .../algorithmsForm/Oltp/KoutGet/index.js | 152 + .../Oltp/KoutPost/Home/index.js | 220 + .../Oltp/KoutPost/StepFormItem/index.js | 111 + .../Oltp/MultiNodesShortestPath/index.js | 249 + .../Oltp/NeighborRankApi/index.js | 290 + .../algorithmsForm/Oltp/OltpItem/index.js | 136 + .../Oltp/OltpItem/index.module.scss | 49 + .../algorithmsForm/Oltp/Paths/index.js | 179 + .../algorithmsForm/Oltp/RankApi/index.js | 211 + .../algorithmsForm/Oltp/Rays/index.js | 190 + .../Oltp/ResourceAllocation/index.js | 155 + .../algorithmsForm/Oltp/Rings/index.js | 134 + .../Oltp/SameNeighbors/index.js | 138 + .../Oltp/SameNeighborsBatch/index.js | 157 + .../algorithmsForm/Oltp/ShortestPath/index.js | 151 + .../Oltp/SingleSourceShortestPath/index.js | 193 + .../Oltp/TemplatePaths/Home/index.js | 186 + .../Oltp/TemplatePaths/StepFormItem/index.js | 171 + .../algorithmsForm/OltpHome/index.js | 112 + .../algorithmsForm/OltpHome/index.module.scss | 4 + .../algorithmsForm/StepsItems/index.js | 121 + .../StepsItems/index.module.scss | 32 + .../algorithmsForm/VerticesItems/index.js | 88 + .../VerticesItems/index.module.scss | 42 + .../algorithm/algorithmsForm/utils/index.js | 270 + .../src/modules/analysis/Home/index.js | 398 + .../analysis/LogsDetail/ExecuteLog/index.js | 198 + .../LogsDetail/ExecuteLog/index.module.scss | 5 + .../analysis/LogsDetail/Favorite/index.js | 231 + .../LogsDetail/Favorite/index.module.scss | 21 + .../modules/analysis/LogsDetail/Home/index.js | 175 + .../LogsDetail/Home/index.module.scss | 28 + .../analysis/QueryBar/ContentCommon/index.js | 222 + .../QueryBar/ContentCommon/index.module.scss | 53 + .../modules/analysis/QueryBar/Home/index.js | 88 + .../analysis/QueryBar/Home/index.module.scss | 24 + .../GraphResult/GraphMenubar/index.js | 163 + .../GraphResult/GraphToolBar/index.js | 54 + .../QueryResult/GraphResult/Home/index.js | 552 + .../GraphResult/Home/index.module.scss | 5 + .../QueryResult/GraphResult/utils/index.js | 113 + .../analysis/QueryResult/Home/index.js | 109 + .../QueryResult/Home/index.module.scss | 109 + .../analysis/QueryResult/JsonView/index.js | 79 + .../QueryResult/JsonView/index.module.scss | 6 + .../analysis/QueryResult/TableView/index.js | 87 + .../QueryResult/TableView/index.module.scss | 5 + .../src/modules/asyncTasks/Detail/index.js | 277 + .../asyncTasks/Detail/index.module.scss | 21 + .../src/modules/asyncTasks/Home/index.js | 137 + .../modules/asyncTasks/Home/index.module.scss | 15 + .../src/modules/asyncTasks/Result/index.js | 57 + .../asyncTasks/Result/index.module.scss | 4 + .../src/modules/component/Canvas3D/index.js | 148 + .../component/Canvas3D/index.module.scss | 55 + .../src/modules/component/ClearGraph/index.js | 59 + .../component/ClosePanelButton/index.js | 36 + .../ClosePanelButton/index.module.scss | 15 + .../src/modules/component/Context/index.js | 16 + .../modules/component/DynamicAddEdge/index.js | 344 + .../DynamicAddEdge/index.module.scss | 39 + .../modules/component/DynamicAddNode/index.js | 236 + .../DynamicAddNode/index.module.scss | 21 + .../modules/component/EditElement/index.js | 423 + .../component/EditElement/index.module.scss | 64 + .../src/modules/component/ExportData/index.js | 155 + .../src/modules/component/FitCenter/index.js | 32 + .../src/modules/component/FixNode/index.js | 62 + .../src/modules/component/FullScreen/index.js | 54 + .../src/modules/component/Graph/index.css | 22 + .../src/modules/component/Graph/index.js | 207 + .../modules/component/Graph/index.module.scss | 48 + .../GraphRenderModeSwitcher/index.js | 29 + .../GraphRenderModeSwitcher/index.module.scss | 69 + .../component/GraphStatusView/index.js | 138 + .../GraphStatusView/index.module.scss | 40 + .../src/modules/component/ImportData/index.js | 70 + .../modules/component/JaccRankView/index.js | 33 + .../component/JaccRankView/index.module.scss | 46 + .../modules/component/LayoutConfig/index.js | 38 + .../modules/component/Legend/customLegend.js | 296 + .../src/modules/component/Legend/index.js | 79 + .../src/modules/component/Menu/index.js | 131 + .../src/modules/component/MenuBar/index.js | 43 + .../component/MenuBar/index.module.scss | 10 + .../src/modules/component/MiniMap/index.js | 28 + .../src/modules/component/NewConfig/index.js | 66 + .../src/modules/component/NumberCard/index.js | 61 + .../component/NumberCard/index.module.scss | 35 + .../src/modules/component/RedoUndo/index.js | 155 + .../modules/component/RefreshGraph/index.js | 32 + .../src/modules/component/Search/index.js | 279 + .../modules/component/SettingConfig/index.js | 38 + .../component/SettingConfigPanel/index.js | 433 + .../SettingConfigPanel/index.module.scss | 23 + .../src/modules/component/Statistics/index.js | 32 + .../BarChartComponent/index.js | 95 + .../GraphStatistics/Header/index.js | 29 + .../GraphStatistics/Header/index.module.scss | 9 + .../GraphStatistics/Home/index.js | 205 + .../GraphStatistics/Home/index.module.scss | 5 + .../component/StatisticsPanel/Home/index.js | 48 + .../StatisticsPanel/Home/index.module.scss | 26 + .../StatisticsPanel/LabelStatistics/index.js | 78 + .../LabelStatistics/index.module.scss | 12 + .../component/TaskNavigateView/index.js | 44 + .../TaskNavigateView/index.module.scss | 11 + .../src/modules/component/ToolBar/index.js | 60 + .../component/ToolBar/index.module.scss | 22 + .../src/modules/component/Tooltip/index.js | 73 + .../component/Tooltip/index.module.scss | 23 + .../src/modules/component/TopBar/index.js | 291 + .../component/TopBar/index.module.scss | 70 + .../modules/component/ZeroDegreeNode/index.js | 42 + .../src/modules/component/ZoomGraph/index.js | 40 + .../filter/FilterDrawer/FilterForm.js | 211 + .../component/filter/FilterDrawer/config.js | 33 + .../component/filter/FilterDrawer/index.js | 218 + .../filter/FilterDrawer/index.module.scss | 11 + .../modules/component/filter/Home/index.js | 69 + .../layoutConfigPanel/Circular/index.js | 78 + .../Circular/index.module.scss | 35 + .../layoutConfigPanel/Concentric/index.js | 82 + .../layoutConfigPanel/Dagre/index.js | 79 + .../layoutConfigPanel/Force/index.js | 63 + .../component/layoutConfigPanel/Grid/index.js | 54 + .../component/layoutConfigPanel/Home/index.js | 291 + .../layoutConfigPanel/Home/index.module.scss | 67 + .../layoutConfigPanel/Radial/index.js | 91 + .../styleConfig/ConfigModal/index.js | 586 + .../styleConfig/ConfigModal/index.module.scss | 8 + .../component/styleConfig/Home/index.js | 67 + .../src/modules/navigation/AdminItem/index.js | 35 + .../navigation/AdminItem/index.module.scss | 8 + .../modules/navigation/AnalyseItem/index.js | 27 + .../navigation/AnalyseItem/index.module.scss | 8 + .../modules/navigation/ConsoleItem/index.js | 61 + .../navigation/ConsoleItem/index.module.scss | 8 + .../src/modules/navigation/Home/index.js | 43 + .../modules/navigation/Home/index.module.scss | 18 + .../src/modules/navigation/Item/index.js | 61 + .../modules/navigation/Item/index.module.scss | 15 + .../modules/navigation/ManageItem/index.js | 31 + .../navigation/ManageItem/index.module.scss | 8 + .../modules/navigation/ModuleButton/index.js | 22 + .../navigation/ModuleButton/index.module.scss | 29 + .../src/pages/Account/EditLayer.js | 482 + .../hubble-fe-new/src/pages/Account/index.js | 223 + .../src/pages/Account/index.module.scss | 3 + .../src/pages/AsyncTaskResult/index.js | 5 + .../hubble-fe-new/src/pages/Bill/index.js | 135 + .../src/pages/Datasource/EditLayer.js | 608 + .../src/pages/Datasource/config.js | 8 + .../src/pages/Datasource/index.js | 175 + .../src/pages/Datasource/index.module.scss | 0 .../hubble-fe-new/src/pages/Error404/index.js | 13 + .../hubble-fe-new/src/pages/Graph/Card.js | 101 + .../src/pages/Graph/EditLayer.js | 284 + .../hubble-fe-new/src/pages/Graph/index.js | 453 + .../src/pages/Graph/index.module.scss | 83 + .../src/pages/GraphAnalysis/index.js | 13 + .../src/pages/GraphDetail/assets/aaa.svg | 1 + .../GraphDetail/assets/collaboration-full.svg | 1 + .../src/pages/GraphDetail/index.js | 147 + .../src/pages/GraphDetail/index.module.scss | 38 + .../src/pages/GraphSpace/Card.js | 171 + .../src/pages/GraphSpace/EditLayer.js | 365 + .../src/pages/GraphSpace/index.js | 337 + .../src/pages/GraphSpace/index.module.scss | 98 + .../hubble-fe-new/src/pages/Login/index.js | 69 + .../src/pages/Login/index.module.scss | 33 + .../src/pages/Meta/Edge/EditLayer.js | 324 + .../src/pages/Meta/Edge/index.js | 208 + .../src/pages/Meta/EdgeIndex/index.js | 61 + .../hubble-fe-new/src/pages/Meta/ImageView.js | 175 + .../hubble-fe-new/src/pages/Meta/ListView.js | 44 + .../src/pages/Meta/Property/EditLayer.js | 68 + .../src/pages/Meta/Property/index.js | 167 + .../src/pages/Meta/Vertex/EditLayer.js | 271 + .../src/pages/Meta/Vertex/index.js | 197 + .../src/pages/Meta/VertexIndex/index.js | 67 + .../src/pages/Meta/common/Colorbox.js | 56 + .../src/pages/Meta/common/RelateProperty.js | 142 + .../pages/Meta/common/RelatePropertyIndex.js | 217 + .../src/pages/Meta/common/config.js | 104 + .../src/pages/Meta/common/index.module.scss | 12 + .../hubble-fe-new/src/pages/Meta/index.js | 86 + .../hubble-fe-new/src/pages/My/EditLayer.js | 58 + .../hubble-fe-new/src/pages/My/index.js | 154 + .../src/pages/My/index.module.scss | 15 + .../src/pages/Navigation/index.js | 15 + .../src/pages/Order/EditLayer.js | 265 + .../hubble-fe-new/src/pages/Order/index.js | 223 + .../src/pages/Resource/EditLayer.js | 585 + .../hubble-fe-new/src/pages/Resource/index.js | 200 + .../src/pages/Resource/index.module.scss | 19 + .../hubble-fe-new/src/pages/Role/Auth.js | 157 + .../hubble-fe-new/src/pages/Role/EditLayer.js | 311 + .../hubble-fe-new/src/pages/Role/index.js | 342 + .../src/pages/Role/index.module.scss | 23 + .../hubble-fe-new/src/pages/Role/treeData.js | 156 + .../src/pages/Schema/EditLayer.js | 135 + .../hubble-fe-new/src/pages/Schema/index.js | 158 + .../src/pages/Super/EditLayer.js | 66 + .../hubble-fe-new/src/pages/Super/index.js | 141 + .../src/pages/Super/index.module.scss | 3 + .../src/pages/Task/components/EditLayer.js | 103 + .../src/pages/Task/components/TopStatistic.js | 67 + .../src/pages/Task/components/ViewLayer.js | 81 + .../pages/Task/components/index.module.scss | 43 + .../hubble-fe-new/src/pages/Task/config.js | 14 + .../hubble-fe-new/src/pages/Task/index.js | 323 + .../src/pages/Task/index.module.scss | 41 + .../src/pages/TaskDetail/index.js | 100 + .../src/pages/TaskEdit/BaseForm.js | 148 + .../src/pages/TaskEdit/BaseForm/index.js | 147 + .../src/pages/TaskEdit/FieldForm.js | 168 + .../src/pages/TaskEdit/FieldForm/index.js | 169 + .../src/pages/TaskEdit/MappingForm.js | 536 + .../src/pages/TaskEdit/MappingForm/Edge.js | 269 + .../pages/TaskEdit/MappingForm/EdgeList.js | 0 .../src/pages/TaskEdit/MappingForm/Vertex.js | 207 + .../pages/TaskEdit/MappingForm/VertexList.js | 540 + .../src/pages/TaskEdit/MappingForm/index.js | 247 + .../src/pages/TaskEdit/ScheduleForm.js | 66 + .../src/pages/TaskEdit/ScheduleForm/index.js | 77 + .../hubble-fe-new/src/pages/TaskEdit/index.js | 281 + .../src/pages/TaskEdit/index.module.scss | 71 + .../hubble-fe-new/src/pages/Test/index.js | 5 + .../hubble-fe-new/src/reportWebVitals.js | 13 + .../hubble-fe-new/src/routes/index.js | 79 + .../hubble-fe-new/src/setupProxy.js | 14 + .../hubble-fe-new/src/setupTests.js | 5 + .../hubble-fe-new/src/utils/constants.js | 358 + .../src/utils/convertNumberToChinese.js | 39 + .../src/utils/convertStringToJSON.js | 15 + .../hubble-fe-new/src/utils/filter.js | 260 + .../hubble-fe-new/src/utils/format.js | 40 + .../src/utils/formatGraphInData.js | 128 + .../src/utils/formatGraphResultData.js | 503 + .../src/utils/formatTimeDuration.js | 37 + .../src/utils/getNodesFromParams.js | 28 + .../hubble-fe-new/src/utils/graph.js | 325 + .../src/utils/handleGraphState.js | 87 + .../hubble-fe-new/src/utils/removeNilKeys.js | 39 + .../hubble-fe-new/src/utils/rules.js | 158 + .../hubble-fe-new/src/utils/user.js | 44 + hugegraph-hubble/hubble-fe/.env | 18 - hugegraph-hubble/hubble-fe/CHANGELOG.md | 76 - hugegraph-hubble/hubble-fe/CHANGELOG.zh-CN.md | 133 - hugegraph-hubble/hubble-fe/README.md | 3 - hugegraph-hubble/hubble-fe/add-license.js | 74 - .../hubble-fe/config-overrides.js | 53 - hugegraph-hubble/hubble-fe/package.json | 78 - hugegraph-hubble/hubble-fe/public/index.html | 38 - .../hubble-fe/src/assets/imgs/ic_add.svg | 56 - .../hubble-fe/src/assets/imgs/ic_add_node.svg | 33 - .../hubble-fe/src/assets/imgs/ic_arrow_16.svg | 28 - .../src/assets/imgs/ic_arrow_blue.svg | 34 - .../src/assets/imgs/ic_arrow_white.svg | 36 - .../hubble-fe/src/assets/imgs/ic_back_32.svg | 36 - .../src/assets/imgs/ic_back_32_normal.svg | 27 - .../src/assets/imgs/ic_back_32_pressed.svg | 27 - .../src/assets/imgs/ic_biaoge_hover.svg | 26 - .../src/assets/imgs/ic_cebianshouqi.svg | 30 - .../src/assets/imgs/ic_cebianzhankai.svg | 30 - .../hubble-fe/src/assets/imgs/ic_close_16.svg | 31 - .../src/assets/imgs/ic_close_white.svg | 30 - .../src/assets/imgs/ic_daorushuju_normal.svg | 26 - .../src/assets/imgs/ic_daorushuju_pressed.svg | 26 - .../hubble-fe/src/assets/imgs/ic_error_12.svg | 28 - .../src/assets/imgs/ic_fangda_16.svg | 30 - .../src/assets/imgs/ic_json_hover.svg | 30 - .../src/assets/imgs/ic_liebiaomoshi_black.svg | 30 - .../src/assets/imgs/ic_liebiaomoshi_white.svg | 30 - .../src/assets/imgs/ic_loading@2x.svg | 65 - .../src/assets/imgs/ic_middle_16.svg | 33 - .../hubble-fe/src/assets/imgs/ic_pass.svg | 38 - .../src/assets/imgs/ic_progress_done.svg | 35 - .../src/assets/imgs/ic_quanping_16.svg | 28 - .../src/assets/imgs/ic_question_mark.svg | 36 - .../hubble-fe/src/assets/imgs/ic_refresh.svg | 38 - .../src/assets/imgs/ic_renwuguanli_normal.svg | 24 - .../assets/imgs/ic_renwuguanli_pressed.svg | 25 - .../src/assets/imgs/ic_shuju_normal.svg | 34 - .../src/assets/imgs/ic_shuju_pressed.svg | 34 - .../hubble-fe/src/assets/imgs/ic_straight.svg | 30 - .../src/assets/imgs/ic_straight_selected.svg | 30 - .../src/assets/imgs/ic_suoxiao_16.svg | 29 - .../hubble-fe/src/assets/imgs/ic_topback.svg | 35 - .../src/assets/imgs/ic_tuichuquanping_16.svg | 32 - .../src/assets/imgs/ic_tumoshi_black.svg | 35 - .../src/assets/imgs/ic_tumoshi_white.svg | 35 - .../src/assets/imgs/ic_tuzhanshi_hover.svg | 29 - .../src/assets/imgs/ic_xiazai_16.svg | 28 - .../src/assets/imgs/ic_yingshe_16.svg | 31 - .../src/assets/imgs/ic_yuanshuju_normal.svg | 31 - .../src/assets/imgs/ic_yuanshuju_pressed.svg | 31 - .../assets/imgs/icon_clickarrow_left_grey.svg | 30 - .../imgs/icon_clickarrow_rigth_grey.svg | 30 - .../hubble-fe/src/components/App.tsx | 89 - .../src/components/common/AppBar.less | 95 - .../src/components/common/AppBar.tsx | 76 - .../components/common/LoadingDataView.less | 45 - .../src/components/common/LoadingDataView.tsx | 58 - .../src/components/common/Tooltip.tsx | 98 - .../hubble-fe/src/components/common/index.ts | 22 - .../graph-management/GraphManagement.less | 236 - .../graph-management/GraphManagement.tsx | 53 - .../GraphManagementEmptyList.tsx | 86 - .../GraphManagementHeader.tsx | 117 - .../GraphManagementLimitHint.tsx | 48 - .../graph-management/GraphManagementList.tsx | 475 - .../GraphManagementSidebar.tsx | 402 - .../graph-management/NewGraphConfig.tsx | 250 - .../async-tasks/AsyncTaskList.less | 295 - .../async-tasks/AsyncTaskList.tsx | 855 - .../async-tasks/AsyncTaskResult.less | 31 - .../async-tasks/AsyncTaskResult.tsx | 71 - .../graph-management/async-tasks/index.ts | 20 - .../data-analyze/DataAnalyze.less | 1230 - .../data-analyze/DataAnalyze.tsx | 105 - .../data-analyze/DataAnalyzeContent.tsx | 48 - .../data-analyze/DataAnalyzeInfoDrawer.tsx | 364 - .../data-analyze/DynamicAddEdge.tsx | 362 - .../data-analyze/DynamicAddNode.tsx | 369 - .../ExecLogAndQueryCollections.tsx | 1088 - .../data-analyze/GremlinKeyWords.ts | 45 - .../data-analyze/QueryAndAlgorithmLibrary.tsx | 633 - .../data-analyze/algorithm/AllPath.tsx | 407 - .../data-analyze/algorithm/CustomPath.tsx | 1115 - .../data-analyze/algorithm/FocusDetection.tsx | 423 - .../data-analyze/algorithm/Jaccard.tsx | 278 - .../data-analyze/algorithm/KHop.tsx | 408 - .../data-analyze/algorithm/KStepNeighbor.tsx | 348 - .../data-analyze/algorithm/LoopDetection.tsx | 407 - .../algorithm/ModelSimilarity.tsx | 1166 - .../data-analyze/algorithm/NeighborRank.tsx | 500 - .../data-analyze/algorithm/PersonalRank.tsx | 451 - .../algorithm/RadiographicInspection.tsx | 422 - .../data-analyze/algorithm/SameNeighbor.tsx | 318 - .../data-analyze/algorithm/ShortestPath.tsx | 454 - .../algorithm/ShortestPathAll.tsx | 469 - .../SingleSourceWeightedShortestPath.tsx | 522 - .../algorithm/WeightedShortestPath.tsx | 500 - .../data-analyze/common/Favorite.tsx | 170 - .../graph-management/data-analyze/index.ts | 20 - .../query-result/GraphPopOver.tsx | 231 - .../query-result/GraphQueryResult.tsx | 659 - .../query-result/JSONQueryResult.tsx | 41 - .../query-result/QueryFilterOptions.tsx | 405 - .../data-analyze/query-result/QueryResult.tsx | 243 - .../query-result/TableQueryResult.tsx | 91 - .../data-analyze/query-result/index.ts | 20 - .../data-import/import-tasks/ImportFinish.tsx | 102 - .../import-tasks/ImportManager.less | 213 - .../import-tasks/ImportManager.tsx | 110 - .../import-tasks/ImportTaskList.tsx | 768 - .../data-import/import-tasks/ImportTasks.less | 111 - .../data-import/import-tasks/ImportTasks.tsx | 134 - .../data-import/import-tasks/UploadEntry.less | 106 - .../data-import/import-tasks/UploadEntry.tsx | 1034 - .../datamap-configs/DataMapConfigs.less | 393 - .../datamap-configs/DataMapConfigs.tsx | 80 - .../import-tasks/datamap-configs/EdgeMap.tsx | 1707 -- .../datamap-configs/FileConfigs.tsx | 395 - .../TypeConfigManipulations.tsx | 65 - .../datamap-configs/TypeConfigs.tsx | 273 - .../import-tasks/datamap-configs/TypeInfo.tsx | 350 - .../datamap-configs/VertexMap.tsx | 1628 - .../import-tasks/datamap-configs/index.ts | 20 - .../import-tasks/error-logs/JobErrorLogs.less | 65 - .../import-tasks/error-logs/JobErrorLogs.tsx | 125 - .../error-logs/TaskErrorLogs.less | 25 - .../import-tasks/error-logs/TaskErrorLogs.tsx | 58 - .../import-tasks/error-logs/index.ts | 21 - .../data-import/import-tasks/index.ts | 22 - .../job-details/BasicSettings.tsx | 258 - .../job-details/DataImportDetails.tsx | 34 - .../import-tasks/job-details/DataMaps.tsx | 36 - .../import-tasks/job-details/JobDetails.less | 86 - .../import-tasks/job-details/JobDetails.tsx | 90 - .../job-details/UploadedFiles.tsx | 44 - .../import-tasks/job-details/index.ts | 20 - .../server-data-import/ImportConfigs.tsx | 862 - .../server-data-import/ServerDataImport.less | 107 - .../server-data-import/ServerDataImport.tsx | 33 - .../import-tasks/server-data-import/index.ts | 20 - .../graph-management/data-import/index.ts | 20 - .../src/components/graph-management/index.ts | 32 - .../metadata-configs/MetadataConfigs.less | 282 - .../metadata-configs/MetadataConfigs.tsx | 197 - .../metadata-configs/common/EmptyDataView.tsx | 53 - .../edge-type/EdgeTypeList.less | 23 - .../edge-type/EdgeTypeList.tsx | 1957 -- .../edge-type/NewEdgeType.less | 23 - .../edge-type/NewEdgeType.tsx | 1099 - .../edge-type/ReuseEdgeTypes.less | 100 - .../edge-type/ReuseEdgeTypes.tsx | 1237 - .../metadata-configs/edge-type/index.ts | 21 - .../graph-view/CheckAndEditEdge.tsx | 1415 - .../graph-view/CheckAndEditVertex.tsx | 1310 - .../graph-view/CheckProperty.tsx | 239 - .../graph-view/CreateEdge.tsx | 1177 - .../graph-view/CreateProperty.tsx | 215 - .../graph-view/CreateVertex.tsx | 1142 - .../graph-view/GraphView.less | 178 - .../metadata-configs/graph-view/GraphView.tsx | 477 - .../metadata-configs/graph-view/index.ts | 20 - .../metadata-configs/index.ts | 20 - .../property-index/PropertyIndex.less | 50 - .../property-index/PropertyIndex.tsx | 307 - .../metadata-configs/property-index/index.ts | 20 - .../property/MetadataProperties.less | 104 - .../property/MetadataProperties.tsx | 912 - .../property/ReuseProperties.less | 100 - .../property/ReuseProperties.tsx | 542 - .../metadata-configs/property/index.ts | 21 - .../vertex-type/NewVertexType.less | 1637 - .../vertex-type/NewVertexType.tsx | 1023 - .../vertex-type/ReuseVertexTypes.less | 100 - .../vertex-type/ReuseVertexTypes.tsx | 1052 - .../vertex-type/VertexTypeList.less | 23 - .../vertex-type/VertexTypeList.tsx | 1888 -- .../metadata-configs/vertex-type/index.ts | 21 - .../src/components/hubble-ui/index.tsx | 311 - .../src/components/hubble-ui/src/index.less | 104 - hugegraph-hubble/hubble-fe/src/hooks/index.ts | 22 - .../hubble-fe/src/hooks/useInitDataImport.tsx | 237 - .../src/hooks/useLocationWithConfirmation.tsx | 65 - .../hubble-fe/src/hooks/useMultiKeyPress.tsx | 52 - hugegraph-hubble/hubble-fe/src/i18n/index.ts | 37 - .../en-US/graph-managment/AsyncTasks.json | 64 - .../GraphManagementSidebar.json | 5 - .../en-US/graph-managment/addition.json | 348 - .../en-US/graph-managment/common.json | 5 - .../data-import/import-tasks/ImportTasks.json | 342 - .../en-US/graph-managment/dataAnalyze.json | 287 - .../resources/en-US/graph-managment/index.ts | 32 - .../src/i18n/resources/en-US/index.ts | 39 - .../hubble-fe/src/i18n/resources/index.ts | 21 - .../zh-CN/graph-managment/AsyncTasks.json | 64 - .../GraphManagementSidebar.json | 5 - .../zh-CN/graph-managment/addition.json | 348 - .../zh-CN/graph-managment/common.json | 5 - .../data-import/import-tasks/ImportTasks.json | 343 - .../zh-CN/graph-managment/dataAnalyze.json | 654 - .../resources/zh-CN/graph-managment/index.ts | 32 - .../src/i18n/resources/zh-CN/index.ts | 39 - hugegraph-hubble/hubble-fe/src/index.less | 320 - hugegraph-hubble/hubble-fe/src/index.tsx | 36 - .../hubble-fe/src/react-app-env.d.ts | 18 - .../GraphManagementStore/asyncTasksStore.ts | 230 - .../algorithmAnalyzerStore.ts | 1901 -- .../dataAnalyzeStore/dataAnalyzeStore.ts | 2538 -- .../dataImportStore/ImportManagerStore.ts | 383 - .../dataImportStore/dataImportRootStore.ts | 407 - .../dataImportStore/dataMapStore.ts | 1321 - .../dataImportStore/serverDataImportStore.ts | 516 - .../graphManagementStore.ts | 571 - .../metadataConfigsStore/edgeTypeStore.ts | 1533 - .../metadataConfigsStore/graphViewStore.ts | 334 - .../metadataConfigsStore.ts | 65 - .../metadataPropertyIndexStore.ts | 245 - .../metadataPropertyStore.ts | 590 - .../metadataConfigsStore/vertexTypeStore.ts | 1266 - .../hubble-fe/src/stores/appStore.ts | 81 - .../src/stores/factory/asyncTasksStore.ts | 46 - .../dataAnalyzeStore/algorithmStore.ts | 529 - .../dataAnalyzeStore/dataAnalyzeStore.ts | 183 - .../dataImportStore/dataImportRootStore.ts | 61 - .../factory/dataImportStore/dataMapStore.ts | 99 - .../dataImportStore/importManagmentStore.ts | 51 - .../dataImportStore/serverDataImportStore.ts | 92 - .../hubble-fe/src/stores/index.ts | 48 - .../GraphManagementStore/asyncTasksStore.ts | 31 - .../GraphManagementStore/dataAnalyzeStore.ts | 328 - .../GraphManagementStore/dataImportStore.ts | 179 - .../graphManagementStore.ts | 61 - .../metadataConfigsStore.ts | 219 - .../hubble-fe/src/stores/types/common.ts | 26 - .../hubble-fe/src/stores/utils/index.ts | 273 - .../hubble-fe/src/third-party.d.ts | 18 - .../src/utils/calcAlgorithmFormWidth.ts | 24 - .../src/utils/convertStringToJSON.ts | 32 - .../src/utils/filterEmptyAlgorightmParams.ts | 36 - .../src/utils/formatAlgorithmStatement.ts | 271 - .../hubble-fe/src/utils/getUnicodeLength.ts | 24 - hugegraph-hubble/hubble-fe/src/utils/index.ts | 40 - .../hubble-fe/src/utils/isDataTypeNumeric.ts | 27 - .../hubble-fe/tsconfig-extend.json | 8 - hugegraph-hubble/hubble-fe/tsconfig.json | 28 - hugegraph-hubble/hubble-fe/yarn.lock | 13380 --------- 663 files changed, 68896 insertions(+), 80246 deletions(-) create mode 100644 hugegraph-hubble/hubble-fe-new/.env.development create mode 100644 hugegraph-hubble/hubble-fe-new/.env.production create mode 100644 hugegraph-hubble/hubble-fe-new/.eslintrc.js create mode 100644 hugegraph-hubble/hubble-fe-new/.gitignore create mode 100644 hugegraph-hubble/hubble-fe-new/README.md create mode 100644 hugegraph-hubble/hubble-fe-new/package-lock.json create mode 100644 hugegraph-hubble/hubble-fe-new/package.json rename hugegraph-hubble/{hubble-fe => hubble-fe-new}/public/favicon.ico (100%) create mode 100644 hugegraph-hubble/hubble-fe-new/public/index.html create mode 100644 hugegraph-hubble/hubble-fe-new/public/logo192.png create mode 100644 hugegraph-hubble/hubble-fe-new/public/logo512.png rename hugegraph-hubble/{hubble-fe => hubble-fe-new}/public/manifest.json (62%) create mode 100644 hugegraph-hubble/hubble-fe-new/public/robots.txt create mode 100644 hugegraph-hubble/hubble-fe-new/src/App.css create mode 100644 hugegraph-hubble/hubble-fe-new/src/App.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/App.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/App.test.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/analysis.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/auth.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/cloud.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/manage.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/request.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/api/request2.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/canvas_bg.png rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_arrow.svg (53%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_arrow_selected.svg (51%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_biaoge_normal.svg (67%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_biaoge_pressed.svg (65%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_done_144.svg (90%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_fail.svg (88%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_json_normal.svg (70%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_json_pressed.svg (69%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_loading_back.svg (89%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_loading_front.svg (74%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_sousuo_empty.svg (90%) create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/ic_straight.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/ic_straight_selected.svg rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_tuzhanshi_normal.svg (79%) rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/ic_tuzhanshi_pressed.svg (77%) create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/layout_circular.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/layout_concentric.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/layout_dagre.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/layout_force.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/layout_grid.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/layout_radial.svg rename hugegraph-hubble/{hubble-fe/src/assets/imgs => hubble-fe-new/src/assets}/logo.png (100%) create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/logo_img.png create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/logo_new.png create mode 100644 hugegraph-hubble/hubble-fe-new/src/assets/logo_text.png create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/cypher.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/gremlin.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/config.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/data/edge.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/data/group.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/data/property.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/data/test.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/data/vertex.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ERView/utils.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/GraphinView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/ListButton/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/Status/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/Status/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/customHook/useCustomEdge.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/customHook/useCustomGrid.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/customHook/useCustomNode.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/customHook/useDownloadJson.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/index.css create mode 100644 hugegraph-hubble/hubble-fe-new/src/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/layout.ant.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/logo.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/Context/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/GraphAnalysis/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphMenuBar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphToolBar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/utils/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/AlgorithmNameHeader/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/AlgorithmNameHeader/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/BoolSelectItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/CapacityItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/DirectionItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/LabelItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/LimitItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDegreeItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDepthItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/NearestItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentralityVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClosenessCentrality/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClosenessCentralityVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClusterCoefficient/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/DegreeCentrality/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/DegreeCentralityVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilterSubGraphMatching/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilteredRingsDetection/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCore/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCoreVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithm/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithmVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/Links/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/Louvain/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/OlapComputerItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/OlapItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/PageRank/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/PageRankVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/PersonalPageRank/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/RingsDetection/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/SSSPVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/TriangleCount/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/TriangleCountVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/WeaklyConnectedComponent/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/WeaklyConnectedComponentVermeer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/OlapHome/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/OlapHome/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/AdamicAdar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/AllPaths/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/Crosspoints/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/CustomizedCrosspoints/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/CustomizedCrosspoints/PathPatternForm/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/CustomizedPaths/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/CustomizedPaths/StepItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/Egonet/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/Egonet/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/FindShortestPath/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/FindShortestPathWithWeight/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/FusiformSimilarity/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/JaccardSimilarityGet/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/JaccardSimilarityPost/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/KneighborGet/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/KneighborPost/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/KoutGet/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/KoutPost/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/KoutPost/StepFormItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/MultiNodesShortestPath/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/NeighborRankApi/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/OltpItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/OltpItem/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/Paths/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/RankApi/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/Rays/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/ResourceAllocation/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/Rings/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/SameNeighbors/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/SameNeighborsBatch/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/ShortestPath/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/SingleSourceShortestPath/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/TemplatePaths/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Oltp/TemplatePaths/StepFormItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/OltpHome/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/OltpHome/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/StepsItems/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/StepsItems/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/VerticesItems/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/VerticesItems/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/utils/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/LogsDetail/ExecuteLog/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/LogsDetail/ExecuteLog/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/LogsDetail/Favorite/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/LogsDetail/Favorite/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/LogsDetail/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/LogsDetail/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryBar/ContentCommon/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryBar/ContentCommon/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryBar/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryBar/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/GraphResult/GraphMenubar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/GraphResult/GraphToolBar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/GraphResult/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/GraphResult/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/GraphResult/utils/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/JsonView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/JsonView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/TableView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/analysis/QueryResult/TableView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/asyncTasks/Detail/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/asyncTasks/Detail/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/asyncTasks/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/asyncTasks/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/asyncTasks/Result/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/asyncTasks/Result/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Canvas3D/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Canvas3D/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ClearGraph/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ClosePanelButton/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ClosePanelButton/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Context/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/DynamicAddEdge/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/DynamicAddEdge/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/DynamicAddNode/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/DynamicAddNode/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/EditElement/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/EditElement/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ExportData/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/FitCenter/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/FixNode/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/FullScreen/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Graph/index.css create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Graph/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Graph/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/GraphRenderModeSwitcher/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/GraphRenderModeSwitcher/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/GraphStatusView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/GraphStatusView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ImportData/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/JaccRankView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/JaccRankView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/LayoutConfig/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Legend/customLegend.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Legend/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Menu/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/MenuBar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/MenuBar/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/MiniMap/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/NewConfig/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/NumberCard/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/NumberCard/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/RedoUndo/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/RefreshGraph/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Search/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/SettingConfig/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/SettingConfigPanel/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/SettingConfigPanel/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Statistics/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/BarChartComponent/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/GraphStatistics/Header/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/GraphStatistics/Header/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/GraphStatistics/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/GraphStatistics/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/LabelStatistics/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/StatisticsPanel/LabelStatistics/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/TaskNavigateView/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/TaskNavigateView/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ToolBar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ToolBar/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Tooltip/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/Tooltip/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/TopBar/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/TopBar/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ZeroDegreeNode/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/ZoomGraph/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/filter/FilterDrawer/FilterForm.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/filter/FilterDrawer/config.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/filter/FilterDrawer/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/filter/FilterDrawer/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/filter/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Circular/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Circular/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Concentric/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Dagre/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Force/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Grid/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/layoutConfigPanel/Radial/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/styleConfig/ConfigModal/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/styleConfig/ConfigModal/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/component/styleConfig/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/AdminItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/AdminItem/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/AnalyseItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/AnalyseItem/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/ConsoleItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/ConsoleItem/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/Home/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/Home/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/Item/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/Item/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/ManageItem/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/ManageItem/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/ModuleButton/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/modules/navigation/ModuleButton/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Account/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Account/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Account/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/AsyncTaskResult/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Bill/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Datasource/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Datasource/config.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Datasource/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Datasource/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Error404/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Graph/Card.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Graph/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Graph/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Graph/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphAnalysis/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphDetail/assets/aaa.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphDetail/assets/collaboration-full.svg create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphDetail/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphDetail/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphSpace/Card.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphSpace/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphSpace/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/GraphSpace/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Login/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Login/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/Edge/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/Edge/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/EdgeIndex/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/ImageView.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/ListView.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/Property/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/Property/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/Vertex/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/Vertex/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/VertexIndex/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/common/Colorbox.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/common/RelateProperty.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/common/RelatePropertyIndex.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/common/config.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/common/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Meta/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/My/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/My/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/My/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Navigation/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Order/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Order/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Resource/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Resource/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Resource/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Role/Auth.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Role/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Role/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Role/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Role/treeData.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Schema/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Schema/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Super/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Super/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Super/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/components/EditLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/components/TopStatistic.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/components/ViewLayer.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/components/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/config.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Task/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskDetail/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/BaseForm.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/BaseForm/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/FieldForm.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/FieldForm/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/MappingForm.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/MappingForm/Edge.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/MappingForm/EdgeList.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/MappingForm/Vertex.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/MappingForm/VertexList.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/MappingForm/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/ScheduleForm.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/ScheduleForm/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/TaskEdit/index.module.scss create mode 100644 hugegraph-hubble/hubble-fe-new/src/pages/Test/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/reportWebVitals.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/routes/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/setupProxy.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/setupTests.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/constants.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/convertNumberToChinese.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/convertStringToJSON.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/filter.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/format.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/formatGraphInData.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/formatGraphResultData.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/formatTimeDuration.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/getNodesFromParams.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/graph.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/handleGraphState.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/removeNilKeys.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/rules.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/utils/user.js delete mode 100644 hugegraph-hubble/hubble-fe/.env delete mode 100644 hugegraph-hubble/hubble-fe/CHANGELOG.md delete mode 100644 hugegraph-hubble/hubble-fe/CHANGELOG.zh-CN.md delete mode 100644 hugegraph-hubble/hubble-fe/README.md delete mode 100644 hugegraph-hubble/hubble-fe/add-license.js delete mode 100644 hugegraph-hubble/hubble-fe/config-overrides.js delete mode 100644 hugegraph-hubble/hubble-fe/package.json delete mode 100644 hugegraph-hubble/hubble-fe/public/index.html delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_add.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_add_node.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow_blue.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow_white.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_back_32.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_back_32_normal.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_back_32_pressed.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_hover.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_cebianshouqi.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_cebianzhankai.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_close_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_close_white.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_daorushuju_normal.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_daorushuju_pressed.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_error_12.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_fangda_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_hover.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_liebiaomoshi_black.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_liebiaomoshi_white.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading@2x.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_middle_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_pass.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_progress_done.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_quanping_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_question_mark.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_refresh.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_renwuguanli_normal.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_renwuguanli_pressed.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_shuju_normal.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_shuju_pressed.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_straight.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_straight_selected.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_suoxiao_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_topback.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuichuquanping_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tumoshi_black.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tumoshi_white.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_hover.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_xiazai_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_yingshe_16.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_yuanshuju_normal.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/ic_yuanshuju_pressed.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/icon_clickarrow_left_grey.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/assets/imgs/icon_clickarrow_rigth_grey.svg delete mode 100644 hugegraph-hubble/hubble-fe/src/components/App.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/common/AppBar.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/common/AppBar.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/common/LoadingDataView.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/common/LoadingDataView.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/common/Tooltip.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/common/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagement.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagement.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagementEmptyList.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagementHeader.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagementLimitHint.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagementList.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/GraphManagementSidebar.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/NewGraphConfig.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/async-tasks/AsyncTaskList.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/async-tasks/AsyncTaskList.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/async-tasks/AsyncTaskResult.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/async-tasks/AsyncTaskResult.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/async-tasks/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/DataAnalyze.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/DataAnalyze.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/DataAnalyzeContent.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/DataAnalyzeInfoDrawer.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/DynamicAddEdge.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/DynamicAddNode.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/ExecLogAndQueryCollections.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/GremlinKeyWords.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/QueryAndAlgorithmLibrary.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/AllPath.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KHop.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/common/Favorite.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryResult.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/components/hubble-ui/index.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/components/hubble-ui/src/index.less delete mode 100644 hugegraph-hubble/hubble-fe/src/hooks/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/hooks/useInitDataImport.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/hooks/useLocationWithConfirmation.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/hooks/useMultiKeyPress.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/AsyncTasks.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/addition.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/common.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/dataAnalyze.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/addition.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/common.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/index.less delete mode 100644 hugegraph-hubble/hubble-fe/src/index.tsx delete mode 100644 hugegraph-hubble/hubble-fe/src/react-app-env.d.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/asyncTasksStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/graphManagementStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/appStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/asyncTasksStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/algorithmStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataImportRootStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataMapStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/importManagmentStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/serverDataImportStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/asyncTasksStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataImportStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/graphManagementStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/metadataConfigsStore.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/types/common.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/stores/utils/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/third-party.d.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/calcAlgorithmFormWidth.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/convertStringToJSON.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/filterEmptyAlgorightmParams.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/formatAlgorithmStatement.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/getUnicodeLength.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/index.ts delete mode 100644 hugegraph-hubble/hubble-fe/src/utils/isDataTypeNumeric.ts delete mode 100644 hugegraph-hubble/hubble-fe/tsconfig-extend.json delete mode 100644 hugegraph-hubble/hubble-fe/tsconfig.json delete mode 100644 hugegraph-hubble/hubble-fe/yarn.lock diff --git a/hugegraph-hubble/hubble-fe-new/.env.development b/hugegraph-hubble/hubble-fe-new/.env.development new file mode 100644 index 000000000..9691c9554 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/.env.development @@ -0,0 +1 @@ +REACT_APP_BASE_URL=/ \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/.env.production b/hugegraph-hubble/hubble-fe-new/.env.production new file mode 100644 index 000000000..e69de29bb diff --git a/hugegraph-hubble/hubble-fe-new/.eslintrc.js b/hugegraph-hubble/hubble-fe-new/.eslintrc.js new file mode 100644 index 000000000..33690776f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/.eslintrc.js @@ -0,0 +1,31 @@ +module.exports = { + 'env': { + 'browser': true, + 'es2021': true, + }, + 'extends': [ + // "eslint:recommended", + // "plugin:react/recommended", + // "plugin:@typescript-eslint/recommended", + + '@ecomfe/eslint-config/baidu/default', // 根据代码库ES版本选择default或es5 + '@ecomfe/eslint-config/baidu/defect', // 根据代码库ES版本选择defect或defect-es5 + '@ecomfe/eslint-config', + '@ecomfe/eslint-config/typescript', + '@ecomfe/eslint-config/react', + ], + 'parser': '@typescript-eslint/parser', + 'parserOptions': { + 'ecmaFeatures': { + 'jsx': true, + }, + 'ecmaVersion': 12, + 'sourceType': 'module', + }, + 'plugins': [ + 'react', + '@typescript-eslint', + ], + 'rules': { + }, +}; diff --git a/hugegraph-hubble/hubble-fe-new/.gitignore b/hugegraph-hubble/hubble-fe-new/.gitignore new file mode 100644 index 000000000..4d29575de --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/hugegraph-hubble/hubble-fe-new/README.md b/hugegraph-hubble/hubble-fe-new/README.md new file mode 100644 index 000000000..58beeaccd --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/hugegraph-hubble/hubble-fe-new/package-lock.json b/hugegraph-hubble/hubble-fe-new/package-lock.json new file mode 100644 index 000000000..4ae5e7fcb --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/package-lock.json @@ -0,0 +1,24772 @@ +{ + "name": "hubble", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hubble", + "version": "0.1.0", + "dependencies": { + "@ant-design/icons": "^4.7.0", + "@antv/g6": "^4.6.15", + "@antv/graphin": "^2.7.12", + "@antv/graphin-components": "^2.4.0", + "@antv/graphin-icons": "^1.0.0", + "@antv/x6": "^1.34.6", + "@antv/x6-react-components": "^1.1.20", + "@antv/x6-react-shape": "^1.6.3", + "@babel/eslint-plugin": "^7.18.10", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@testing-library/user-event": "^13.5.0", + "3d-force-graph": "^1.71.2", + "ajv": "8.17.1", + "antd": "^4.23.1", + "axios": "^0.27.2", + "codemirror": "^6.0.1", + "cron-expression-validator": "^1.0.20", + "date-fns": "^2.29.3", + "echarts": "^5.4.1", + "http-proxy-middleware": "^2.0.6", + "install": "^0.13.0", + "json-bigint": "^1.0.0", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "node-gyp": "^9.4.0", + "node-sass": "^9.0.0", + "npm": "^8.13.2", + "react": "^18.2.0", + "react-color": "^2.19.3", + "react-dom": "^18.2.0", + "react-highlight-words": "^0.18.0", + "react-json-view": "^1.21.3", + "react-router-dom": "^6.3.0", + "react-scripts": "5.0.1", + "screenfull": "^6.0.2", + "typescript": "^4.7.4", + "validator": "^13.7.0", + "vis-network": "^9.1.2", + "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@ecomfe/eslint-config": "^7.4.0", + "@ecomfe/stylelint-config": "^1.1.2", + "eslint": "^8.19.0", + "eslint-plugin-react": "^7.30.1", + "resize-observer-polyfill": "^1.5.1" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/icons": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-4.8.3.tgz", + "integrity": "sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.3.0", + "@babel/runtime": "^7.11.2", + "classnames": "^2.2.6", + "lodash": "^4.17.15", + "rc-util": "^5.9.4" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" + }, + "node_modules/@ant-design/react-slick": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz", + "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==", + "dependencies": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@antv/algorithm": { + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@antv/algorithm/-/algorithm-0.1.26.tgz", + "integrity": "sha512-DVhcFSQ8YQnMNW34Mk8BSsfc61iC1sAnmcfYoXTAshYHuU50p/6b7x3QYaGctDNKWGvi1ub7mPcSY0bK+aN0qg==", + "dependencies": { + "@antv/util": "^2.0.13", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/dom-util": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@antv/dom-util/-/dom-util-2.0.4.tgz", + "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/event-emitter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@antv/event-emitter/-/event-emitter-0.1.3.tgz", + "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" + }, + "node_modules/@antv/g-base": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@antv/g-base/-/g-base-0.5.16.tgz", + "integrity": "sha512-jP06wggTubDPHXoKwFg3/f1lyxBX9ywwN3E/HG74Nd7DXqOXQis8tsIWW+O6dS/h9vyuXLd1/wDWkMMm3ZzXdg==", + "dependencies": { + "@antv/event-emitter": "^0.1.1", + "@antv/g-math": "^0.1.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.13", + "@types/d3-timer": "^2.0.0", + "d3-ease": "^1.0.5", + "d3-interpolate": "^3.0.1", + "d3-timer": "^1.0.9", + "detect-browser": "^5.1.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-canvas": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@antv/g-canvas/-/g-canvas-0.5.17.tgz", + "integrity": "sha512-sXYJMWTOlb/Ycb6sTKu00LcJqInXJY4t99+kSM40u2OfqrXYmaXDjHR7D2V0roMkbK/QWiWS9UnEidCR1VtMOA==", + "dependencies": { + "@antv/g-base": "^0.5.12", + "@antv/g-math": "^0.1.9", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-math": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@antv/g-math/-/g-math-0.1.9.tgz", + "integrity": "sha512-KHMSfPfZ5XHM1PZnG42Q2gxXfOitYveNTA7L61lR6mhZ8Y/aExsYmHqaKBsSarU0z+6WLrl9C07PQJZaw0uljQ==", + "dependencies": { + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0" + } + }, + "node_modules/@antv/g-svg": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@antv/g-svg/-/g-svg-0.5.7.tgz", + "integrity": "sha512-jUbWoPgr4YNsOat2Y/rGAouNQYGpw4R0cvlN0YafwOyacFFYy2zC8RslNd6KkPhhR3XHNSqJOuCYZj/YmLUwYw==", + "dependencies": { + "@antv/g-base": "^0.5.12", + "@antv/g-math": "^0.1.9", + "@antv/util": "~2.0.0", + "detect-browser": "^5.0.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-webgpu": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu/-/g-webgpu-0.7.2.tgz", + "integrity": "sha512-kw+oYGsdvj5qeUfy5DPb/jztZBV+2fmqBd3Vv8NlKatfBmv8AirYX/CCW74AUSdWm99rEiLyxFB1VdRZ6b/wnQ==", + "dependencies": { + "@antv/g-webgpu-core": "^0.7.2", + "@antv/g-webgpu-engine": "^0.7.2", + "gl-matrix": "^3.1.0", + "gl-vec2": "^1.3.0", + "lodash": "^4.17.15" + } + }, + "node_modules/@antv/g-webgpu-core": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu-core/-/g-webgpu-core-0.7.2.tgz", + "integrity": "sha512-xUMmop7f3Rs34zFYKXLqHhDR1CQTeDl/7vI7Sn3X/73BqJc3X3HIIRvm83Fg2CjVACaOzw4WeLRXNaOCp9fz9w==", + "dependencies": { + "eventemitter3": "^4.0.0", + "gl-matrix": "^3.1.0", + "lodash": "^4.17.15", + "probe.gl": "^3.1.1" + } + }, + "node_modules/@antv/g-webgpu-engine": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@antv/g-webgpu-engine/-/g-webgpu-engine-0.7.2.tgz", + "integrity": "sha512-lx8Y93IW2cnJvdoDRKyMmTdYqSC1pOmF0nyG3PGGyA0NI9vBYVgO0KTF6hkyWjdTWVq7XDZyf/h8CJridLh3lg==", + "dependencies": { + "@antv/g-webgpu-core": "^0.7.2", + "gl-matrix": "^3.1.0", + "lodash": "^4.17.15", + "regl": "^1.3.11" + } + }, + "node_modules/@antv/g6": { + "version": "4.8.24", + "resolved": "https://registry.npmjs.org/@antv/g6/-/g6-4.8.24.tgz", + "integrity": "sha512-bgj7sZ+z45JmOngIpYpwmSIg7SboMLZBoAlX0+RoAETZB3/xvZO0MXT3lCSyAhIgm5Sb68pekKi7OStuo04NyQ==", + "dependencies": { + "@antv/g6-pc": "0.8.24" + } + }, + "node_modules/@antv/g6-core": { + "version": "0.8.24", + "resolved": "https://registry.npmjs.org/@antv/g6-core/-/g6-core-0.8.24.tgz", + "integrity": "sha512-rgI3dArAD8uoSz2+skS4ctN4x/Of33ivTIKaEYYvClxgkLZWVz9zvocy+5AWcVPBHZsAXkZcdh9zndIoWY/33A==", + "dependencies": { + "@antv/algorithm": "^0.1.26", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-math": "^0.1.1", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "ml-matrix": "^6.5.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@antv/g6-element": { + "version": "0.8.24", + "resolved": "https://registry.npmjs.org/@antv/g6-element/-/g6-element-0.8.24.tgz", + "integrity": "sha512-61FXkt9LY+6EOUtSam1iFTOW2AM59sPVcV1BuPj4dXiD0dluLE+R7d8B/94g1tKDw9tsjhfUQGC7hTXscJRJFw==", + "dependencies": { + "@antv/g-base": "^0.5.1", + "@antv/g6-core": "0.8.24", + "@antv/util": "~2.0.5", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "@antv/g6": "4.8.24" + } + }, + "node_modules/@antv/g6-pc": { + "version": "0.8.24", + "resolved": "https://registry.npmjs.org/@antv/g6-pc/-/g6-pc-0.8.24.tgz", + "integrity": "sha512-nf0y1lrp8J5DotqRryXd2S/J30COW8spVcLF9gUqywGqQAHfE00Ywkqr+PZBnsfCZXsXCi9o0+CE9NrkWs4SBQ==", + "dependencies": { + "@ant-design/colors": "^4.0.5", + "@antv/algorithm": "^0.1.26", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-math": "^0.1.1", + "@antv/g-svg": "^0.5.1", + "@antv/g6-core": "0.8.24", + "@antv/g6-element": "0.8.24", + "@antv/g6-plugin": "0.8.24", + "@antv/hierarchy": "^0.6.10", + "@antv/layout": "^0.3.0", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "color": "^3.1.3", + "d3-force": "^2.0.1", + "dagre": "^0.8.5", + "insert-css": "^2.0.0", + "ml-matrix": "^6.5.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@antv/g6-pc/node_modules/@ant-design/colors": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-4.0.5.tgz", + "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", + "dependencies": { + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@antv/g6-plugin": { + "version": "0.8.24", + "resolved": "https://registry.npmjs.org/@antv/g6-plugin/-/g6-plugin-0.8.24.tgz", + "integrity": "sha512-ZIOnwLTC7SM2bFiJZ3vYFWnkyOCWKqnU96i/fBh1qAoY5slDS3hatenZWEXUtOcqaKw1h+5A5f72MRXqBBVn0g==", + "dependencies": { + "@antv/dom-util": "^2.0.2", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-svg": "^0.5.2", + "@antv/g6-core": "0.8.24", + "@antv/g6-element": "0.8.24", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/scale": "^0.3.4", + "@antv/util": "^2.0.9", + "insert-css": "^2.0.0" + }, + "peerDependencies": { + "@antv/g6": "4.8.24" + } + }, + "node_modules/@antv/graphin": { + "version": "2.7.27", + "resolved": "https://registry.npmjs.org/@antv/graphin/-/graphin-2.7.27.tgz", + "integrity": "sha512-cqsLl3xpZ5mPgTq5UufcqJDlxzKZSLk9/JWXmoQYpvDC4cpzDjBZeVlaDfhT8iToB5aR15CEIu6j+XsQDMqUsA==", + "dependencies": { + "@antv/g6": "^4.8.19", + "d3-quadtree": "^3.0.1", + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "lodash-es": ">=4.17.21", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@antv/graphin-components": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@antv/graphin-components/-/graphin-components-2.4.1.tgz", + "integrity": "sha512-Vaxhg1Jbv76j0SwrDLS5/VoHEx2mJW9CEbNdJ7HuWCaz24imvOymV4FpKSJND2PUq7BgIrzo48NaF3bpfiWZZA==", + "dependencies": { + "@antv/graphin": "^2.7.18" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@antv/graphin-icons": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@antv/graphin-icons/-/graphin-icons-1.0.0.tgz", + "integrity": "sha512-2nogK6ZrDklnfIOJrqOAgD7iFLjfZIjLbA8pDUbeXN5c9b0Mu84oCfyqg8OmWwvi9Gt80eUzoplo73gKjZECJg==" + }, + "node_modules/@antv/graphlib": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@antv/graphlib/-/graphlib-1.2.0.tgz", + "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + }, + "node_modules/@antv/hierarchy": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/@antv/hierarchy/-/hierarchy-0.6.12.tgz", + "integrity": "sha512-WvWT9WYtm2SvYunm1HtzrHazvOozeP4cPFDhJWsnLzmTGMX/tNhsoCD3O+DDB3aeDY8fyM+wfZDvLv7+/4lIeA==" + }, + "node_modules/@antv/layout": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@antv/layout/-/layout-0.3.25.tgz", + "integrity": "sha512-d29Aw1PXoAavMRZy7iTB9L5rMBeChFEX0BJ9ELP4TI35ySdCu07YbmPo9ju9OH/6sG2/NB3o85Ayxrre3iwX/g==", + "dependencies": { + "@antv/g-webgpu": "0.7.2", + "@antv/graphlib": "^1.0.0", + "@antv/util": "^3.3.2", + "d3-force": "^2.1.1", + "d3-quadtree": "^2.0.0", + "dagre-compound": "^0.0.11", + "ml-matrix": "6.5.0" + } + }, + "node_modules/@antv/layout/node_modules/@antv/util": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/@antv/util/-/util-3.3.7.tgz", + "integrity": "sha512-qqPg7rIPCsJyl7N56jAC25v/99mJ3ApVkgBsGijhiWrEeKvzXBPk1r5P77Pm9nCljpnn+hH8Z3t5AivbEoTJMg==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "gl-matrix": "^3.3.0", + "tslib": "^2.3.1" + } + }, + "node_modules/@antv/layout/node_modules/d3-quadtree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + }, + "node_modules/@antv/layout/node_modules/ml-matrix": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.5.0.tgz", + "integrity": "sha512-sms732Dge+rs5dU4mnjE0oqLWm1WujvR2fr38LgUHRG2cjXjWlO3WJupLYaSz3++2iYr0UrGDK72OAivr3J8dg==", + "dependencies": { + "ml-array-rescale": "^1.3.1" + } + }, + "node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmjs.org/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/path-util": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@antv/path-util/-/path-util-2.0.15.tgz", + "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", + "dependencies": { + "@antv/matrix-util": "^3.0.4", + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/path-util/node_modules/@antv/matrix-util": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@antv/matrix-util/-/matrix-util-3.0.4.tgz", + "integrity": "sha512-BAPyu6dUliHcQ7fm9hZSGKqkwcjEDVLVAstlHULLvcMZvANHeLXgHEgV7JqcAV/GIhIz8aZChIlzM1ZboiXpYQ==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.3.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/scale": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@antv/scale/-/scale-0.3.18.tgz", + "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", + "dependencies": { + "@antv/util": "~2.0.3", + "fecha": "~4.2.0", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/util": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@antv/util/-/util-2.0.17.tgz", + "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "dependencies": { + "csstype": "^3.0.8", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/x6": { + "version": "1.35.1", + "resolved": "https://registry.npmjs.org/@antv/x6/-/x6-1.35.1.tgz", + "integrity": "sha512-XLFSGbcT/MOI883YKql9J/CqHUCPZxgwfel+sNN1eQbHA+JXYsGt0t9+IJ1qieaYAlxjgio5up+S9I0n+8QL/A==", + "dependencies": { + "csstype": "^3.0.3", + "jquery": "^3.5.1", + "jquery-mousewheel": "^3.1.13", + "lodash-es": "^4.17.15", + "mousetrap": "^1.6.5", + "utility-types": "^3.10.0" + } + }, + "node_modules/@antv/x6-react-components": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/@antv/x6-react-components/-/x6-react-components-1.1.20.tgz", + "integrity": "sha512-HpQqjPCUo+jfcbfW2sr9oxuXMCxWnXxWvE8jXKJzvrlMNZ3kgfxNqMCRxwGi2QTCxLB3g/KYi5/n8kze8ui1/Q==", + "dependencies": { + "clamp": "^1.0.1", + "classnames": "^2.2.6", + "rc-dropdown": "^3.0.0-alpha.0", + "rc-util": "^4.15.7", + "react-color": "2.17.1", + "react-resize-detector": "^7.0.0", + "ua-parser-js": "^0.7.20" + }, + "peerDependencies": { + "antd": ">=4.4.2 || >=5.0.0-beta.0", + "react": ">=16.8.6 || >=17.0.0", + "react-dom": ">=16.8.6 || >=17.0.0" + } + }, + "node_modules/@antv/x6-react-components/node_modules/rc-util": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-4.21.1.tgz", + "integrity": "sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==", + "dependencies": { + "add-dom-event-listener": "^1.1.0", + "prop-types": "^15.5.10", + "react-is": "^16.12.0", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0" + } + }, + "node_modules/@antv/x6-react-components/node_modules/react-color": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.17.1.tgz", + "integrity": "sha512-S+I6TkUKJaqfALLkAIfiCZ/MANQyy7dKkf7g9ZU5GTUy2rf8c2Rx62otyvADAviWR+6HRkzdf2vL1Qvz9goCLQ==", + "dependencies": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.11", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@antv/x6-react-components/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/@antv/x6-react-shape": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@antv/x6-react-shape/-/x6-react-shape-1.6.6.tgz", + "integrity": "sha512-+SIvQWeGhfH9miKDQvJT497iVDs/CcMwcgbNKbPV6qTUaSUeXjz/bZy8knbQ5t9XtkVYeQXZP7swiKK2xMI0UQ==", + "peerDependencies": { + "@antv/x6": "^1.x", + "react": ">=16.8.6 || >=17.0.0", + "react-dom": ">=16.8.6 || >=17.0.0" + } + }, + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz", + "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-plugin": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.25.1.tgz", + "integrity": "sha512-jF04YOsrCbEeQk4s+FwsuRddwBiAHooMDG9/nrV83HiYQwEuQppbXTeXyydxCoH5oEWmVBI51wHuZrcIXMkPfw==", + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/eslint-parser": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", + "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", + "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-flow": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.1.tgz", + "integrity": "sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz", + "integrity": "sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", + "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.0.tgz", + "integrity": "sha512-5DbOvBbY4qW5l57cjDsmmpDh3/TeK1vXfTHa+BUMrRzdWdcxKZ4U4V7vQaTtOpApNU4kLS4FQ6cINtLg245LXA==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.0.0" + }, + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@codemirror/commands": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.6.0.tgz", + "integrity": "sha512-qnY+b7j1UNcTS31Eenuc/5YJB6gQOzkUoNmJQc0rznwqSRpeaWWpjkWy2C/MPTcePpsKJEM26hXrOXl1+nceXg==", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" + } + }, + "node_modules/@codemirror/language": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.2.tgz", + "integrity": "sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.0" + } + }, + "node_modules/@codemirror/lint": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", + "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==" + }, + "node_modules/@codemirror/view": { + "version": "6.32.0", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.32.0.tgz", + "integrity": "sha512-AgVNvED2QTsZp5e3syoHLsrWtwJFYWdx1Vr/m3f4h1ATQz0ax60CfXF3Htdmk69k2MlYZw8gXesnQdHtzyVmAw==", + "dependencies": { + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@ecomfe/eslint-config": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@ecomfe/eslint-config/-/eslint-config-7.5.1.tgz", + "integrity": "sha512-17Qc003QeeP9dZcI838owFLbSPjfCwZofYIu3zbLqpTVxdbxkkijj10fzYnMRGuOW0uGOzSqITzrIaJmLZRHBA==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "peerDependencies": { + "@babel/core": "^7.12.10", + "@babel/eslint-parser": "^7.12.1", + "@babel/eslint-plugin": "^7.12.1", + "@typescript-eslint/eslint-plugin": "^4.11.0 || 5.x || 6.x", + "@typescript-eslint/parser": "^4.11.0 || 5.x || 6.x", + "eslint": "^6.2.0 || 7.x || 8.x", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.2.0", + "eslint-plugin-san": "^1.0.0", + "eslint-plugin-vue": "^7.20.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + }, + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-react": { + "optional": true + }, + "eslint-plugin-react-hooks": { + "optional": true + }, + "eslint-plugin-san": { + "optional": true + }, + "eslint-plugin-vue": { + "optional": true + } + } + }, + "node_modules/@ecomfe/stylelint-config": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ecomfe/stylelint-config/-/stylelint-config-1.1.2.tgz", + "integrity": "sha512-rIrZ7EU+zGVnqWWvYrCJWNrV04jyRSOqbLhsH1vl2FgTyUOBbvErRHfPoGqng8S9MfbIunnkzCDaoqpw6G4Tzw==", + "dev": true, + "peerDependencies": { + "stylelint": ">=9" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" + }, + "node_modules/@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/environment/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/environment/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/test-result/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@jest/transform/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" + }, + "node_modules/@lezer/common": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz", + "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==" + }, + "node_modules/@lezer/highlight": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@probe.gl/env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@probe.gl/log": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0" + } + }, + "node_modules/@probe.gl/stats": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.1.tgz", + "integrity": "sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tweenjs/tween.js": { + "version": "23.1.3", + "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz", + "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==" + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/d3-timer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-2.0.3.tgz", + "integrity": "sha512-jhAJzaanK5LqyLQ50jJNIrB8fjL9gwWZTgYjevPvkDLMU+kTAZkYsobI59nYoeSrH1PucuyJEi247Pb90t6XUg==" + }, + "node_modules/@types/eslint": { + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" + }, + "node_modules/@types/node": { + "version": "22.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.4.2.tgz", + "integrity": "sha512-nAvM3Ey230/XzxtyDcJ+VjvlzpzoHwLsF7JaDRfoI0ytO0mVheerNmM45CtA0yOILXwXXxOrcUWH3wltX+7PSw==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/react": { + "version": "18.3.4", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.4.tgz", + "integrity": "sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/3d-force-graph": { + "version": "1.73.3", + "resolved": "https://registry.npmjs.org/3d-force-graph/-/3d-force-graph-1.73.3.tgz", + "integrity": "sha512-azb65Lwn2yr/fJ4+qrxjmstVxogjzwJIZL/fdboCKBg6ph/FLW+xdvYFEBZW92XxBn1C8yRKS3d2VkVT3BzLSw==", + "dependencies": { + "accessor-fn": "1", + "kapsule": "1", + "three": ">=0.118 <1", + "three-forcegraph": "1", + "three-render-objects": "^1.29" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accessor-fn": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/accessor-fn/-/accessor-fn-1.5.1.tgz", + "integrity": "sha512-zZpFYBqIL1Aqg+f2qmYHJ8+yIZF7/tP6PUGx2/QM0uGPSO5UegpinmkNwDohxWtOj586BpMPVRUjce2HI6xB3A==", + "engines": { + "node": ">=12" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "dependencies": { + "object-assign": "4.x" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antd": { + "version": "4.24.16", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.24.16.tgz", + "integrity": "sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons": "^4.8.2", + "@ant-design/react-slick": "~1.0.2", + "@babel/runtime": "^7.18.3", + "@ctrl/tinycolor": "^3.6.1", + "classnames": "^2.2.6", + "copy-to-clipboard": "^3.2.0", + "lodash": "^4.17.21", + "moment": "^2.29.2", + "rc-cascader": "~3.7.3", + "rc-checkbox": "~3.0.1", + "rc-collapse": "~3.4.2", + "rc-dialog": "~9.0.2", + "rc-drawer": "~6.3.0", + "rc-dropdown": "~4.0.1", + "rc-field-form": "~1.38.2", + "rc-image": "~5.13.0", + "rc-input": "~0.1.4", + "rc-input-number": "~7.3.11", + "rc-mentions": "~1.13.1", + "rc-menu": "~9.8.4", + "rc-motion": "^2.9.0", + "rc-notification": "~4.6.1", + "rc-pagination": "~3.2.0", + "rc-picker": "~2.7.6", + "rc-progress": "~3.4.2", + "rc-rate": "~2.9.3", + "rc-resize-observer": "^1.3.1", + "rc-segmented": "~2.3.0", + "rc-select": "~14.1.18", + "rc-slider": "~10.0.1", + "rc-steps": "~5.0.0", + "rc-switch": "~3.2.2", + "rc-table": "~7.26.0", + "rc-tabs": "~12.5.10", + "rc-textarea": "~0.4.7", + "rc-tooltip": "~5.2.2", + "rc-tree": "~5.7.12", + "rc-tree-select": "~5.5.5", + "rc-trigger": "^5.3.4", + "rc-upload": "~4.3.6", + "rc-util": "^5.37.0", + "scroll-into-view-if-needed": "^2.2.25" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/antd/node_modules/rc-dropdown": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", + "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.6", + "rc-trigger": "^5.3.1", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "engines": { + "node": "*" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", + "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-jest/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "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" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==" + }, + "node_modules/clamp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", + "integrity": "sha512-kgMuFyE78OC6Dyu3Dy7vcx4uy97EIbVxJB/B0eJ3bUNAkwdNcxYzgKltnyADiYwsR7SEqkkUPsEUT//OVS6XMA==" + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/codemirror": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", + "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-js": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", + "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", + "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, + "node_modules/cron-expression-validator": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/cron-expression-validator/-/cron-expression-validator-1.0.20.tgz", + "integrity": "sha512-g0osBTdp+1ryDw2vzlG6UpDPaa4fO94ZChF2R0lEnRurbuUEL74XEVX7xZJ13m4Mq/gb3ni6UQu8+Oqt+eocsw==" + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-binarytree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-binarytree/-/d3-binarytree-1.0.2.tgz", + "integrity": "sha512-cElUNH+sHu95L04m92pG73t2MEJXKu+GeKUN1TJkFsu93E5W8E9Sc3kHEGJKgenGvj19m6upSn2EunvMgMD2Yw==" + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-2.0.0.tgz", + "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + }, + "node_modules/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "node_modules/d3-force": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-2.1.1.tgz", + "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "dependencies": { + "d3-dispatch": "1 - 2", + "d3-quadtree": "1 - 2", + "d3-timer": "1 - 2" + } + }, + "node_modules/d3-force-3d": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/d3-force-3d/-/d3-force-3d-3.0.5.tgz", + "integrity": "sha512-tdwhAhoTYZY/a6eo9nR7HP3xSW/C6XvJTbeRpR92nlPzH6OiE+4MliN9feuSFd0tPtEUo+191qOhCTWx3NYifg==", + "dependencies": { + "d3-binarytree": "1", + "d3-dispatch": "1 - 3", + "d3-octree": "1", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force/node_modules/d3-quadtree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-octree": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-1.0.2.tgz", + "integrity": "sha512-Qxg4oirJrNXauiuC94uKMbgxwnhdda9xRLl9ihq45srlJ4Ga3CSgqGcAL8iW7N5CIv4Oz8x3E734ulxyvHPvwA==" + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "dependencies": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "node_modules/dagre-compound": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/dagre-compound/-/dagre-compound-0.0.11.tgz", + "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "dagre": "^0.8.5" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-joint": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/data-joint/-/data-joint-1.3.1.tgz", + "integrity": "sha512-tMK0m4OVGqiA3zkn8JmO6YAqD8UwJqIAx4AAwFl1SKTtKAqcXePuT+n2aayiX9uITtlN3DFtKKTOxJRUc2+HvQ==", + "dependencies": { + "index-array-by": "^1.4.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "node_modules/dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/echarts": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.1.tgz", + "integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.0" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "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==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", + "dependencies": { + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/fbjs/node_modules/ua-parser-js": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.38.tgz", + "integrity": "sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/file-loader/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/file-loader/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + }, + "node_modules/flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/gl-vec2": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gl-vec2/-/gl-vec2-1.3.0.tgz", + "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", + "dependencies": { + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight-words-core": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/highlight-words-core/-/highlight-words-core-1.2.2.tgz", + "integrity": "sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==" + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/index-array-by": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/index-array-by/-/index-array-by-1.4.2.tgz", + "integrity": "sha512-SP23P27OUKzXWEC/TOyWlwLviofQkCSCKONnc62eItjp69yCZZPqDQtr3Pw5gJDnPeUMqExmKydNZaJO0FU9pw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + }, + "node_modules/install": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/install/-/install-0.13.0.tgz", + "integrity": "sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-any-array": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz", + "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==" + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-changed-files/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-jsdom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-environment-node/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-haste-map/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-haste-map/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-mock/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve-dependencies/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "node_modules/jquery-mousewheel": { + "version": "3.1.13", + "resolved": "https://registry.npmjs.org/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz", + "integrity": "sha512-GXhSjfOPyDemM005YCEHvzrEALhKDIswtxSHSR2e4K/suHVJKJxxRCGz3skPjNxjJjQa9AVSGGlYjv1M3VLIPg==" + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/kapsule": { + "version": "1.14.5", + "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.14.5.tgz", + "integrity": "sha512-H0iSpTynUzZw3tgraDmReprpFRmH5oP5GPmaNsurSwLx2H5iCpOMIkp5q+sfhB4Tz/UJd1E1IbEE9Z6ksnJ6RA==", + "dependencies": { + "lodash-es": "4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", + "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoize-one": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.3.tgz", + "integrity": "sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==" + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.1.tgz", + "integrity": "sha512-+Vyi+GCCOHnrJ2VPS+6aPoXN2k2jgUzDRhTFLjjTBn23qyXJXkjUWQgTL+mXpF5/A8ixLdCc6kWsoeOjKGejKQ==", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ml-array-max": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz", + "integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-min": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz", + "integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-rescale": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz", + "integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==", + "dependencies": { + "is-any-array": "^2.0.0", + "ml-array-max": "^1.2.4", + "ml-array-min": "^1.2.3" + } + }, + "node_modules/ml-matrix": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.11.1.tgz", + "integrity": "sha512-Fvp1xF1O07tt6Ux9NcnEQTei5UlqbRpvvaFZGs7l3Ij+nOaEDcmbSVtxwNa8V4IfdyFI1NLNUteroMJ1S6vcEg==", + "dependencies": { + "is-any-array": "^2.0.1", + "ml-array-rescale": "^1.3.7" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/mousetrap": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", + "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/ngraph.events": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", + "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" + }, + "node_modules/ngraph.forcelayout": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ngraph.forcelayout/-/ngraph.forcelayout-3.3.1.tgz", + "integrity": "sha512-MKBuEh1wujyQHFTW57y5vd/uuEOK0XfXYxm3lC7kktjJLRdt/KEKEknyOlc6tjXflqBKEuYBBcu7Ax5VY+S6aw==", + "dependencies": { + "ngraph.events": "^1.0.0", + "ngraph.merge": "^1.0.0", + "ngraph.random": "^1.0.0" + } + }, + "node_modules/ngraph.graph": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-20.0.1.tgz", + "integrity": "sha512-VFsQ+EMkT+7lcJO1QP8Ik3w64WbHJl27Q53EO9hiFU9CRyxJ8HfcXtfWz/U8okuoYKDctbciL6pX3vG5dt1rYA==", + "dependencies": { + "ngraph.events": "^1.2.1" + } + }, + "node_modules/ngraph.merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ngraph.merge/-/ngraph.merge-1.0.0.tgz", + "integrity": "sha512-5J8YjGITUJeapsomtTALYsw7rFveYkM+lBj3QiYZ79EymQcuri65Nw3knQtFxQBU1r5iOaVRXrSwMENUPK62Vg==" + }, + "node_modules/ngraph.random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ngraph.random/-/ngraph.random-1.1.0.tgz", + "integrity": "sha512-h25UdUN/g8U7y29TzQtRm/GvGr70lK37yQPvPKXXuVfs7gCm82WipYFZcksQfeKumtOemAzBIcT7lzzyK/edLw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + }, + "node_modules/node-sass": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", + "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", + "deprecated": "Node Sass is no longer supported. Please use `sass` or `sass-embedded` instead.", + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "make-fetch-happen": "^10.0.4", + "meow": "^9.0.0", + "nan": "^2.17.0", + "node-gyp": "^8.4.1", + "sass-graph": "^4.0.1", + "stdout-stream": "^1.4.0", + "true-case-path": "^2.2.1" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/node-sass/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/node-sass/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-sass/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-sass/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/node-sass/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-sass/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-sass/node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/node-sass/node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-sass/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-sass/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-sass/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-sass/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-sass/node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/node-sass/node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.19.4.tgz", + "integrity": "sha512-3HANl8i9DKnUA89P4KEgVNN28EjSeDCmvEqbzOAuxCFDzdBZzjUl99zgnGpOUumvW5lvJo2HKcjrsc+tfyv1Hw==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/ci-detect", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/run-script", + "abbrev", + "archy", + "cacache", + "chalk", + "chownr", + "cli-columns", + "cli-table3", + "columnify", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmhook", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "mkdirp", + "mkdirp-infer-owner", + "ms", + "node-gyp", + "nopt", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "npmlog", + "opener", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "read-package-json", + "read-package-json-fast", + "readdir-scoped-modules", + "rimraf", + "semver", + "ssri", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which", + "write-file-atomic" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/config": "^4.2.1", + "@npmcli/fs": "^2.1.0", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.2.1", + "abbrev": "~1.1.1", + "archy": "~1.0.0", + "cacache": "^16.1.3", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^4.0.0", + "cli-table3": "^0.6.2", + "columnify": "^1.6.0", + "fastest-levenshtein": "^1.0.12", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "graceful-fs": "^4.2.10", + "hosted-git-info": "^5.2.1", + "ini": "^3.0.1", + "init-package-json": "^3.0.2", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^6.0.4", + "libnpmdiff": "^4.0.5", + "libnpmexec": "^4.0.14", + "libnpmfund": "^3.0.5", + "libnpmhook": "^8.0.4", + "libnpmorg": "^4.0.4", + "libnpmpack": "^4.1.3", + "libnpmpublish": "^6.0.5", + "libnpmsearch": "^5.0.4", + "libnpmteam": "^4.0.4", + "libnpmversion": "^3.0.7", + "make-fetch-happen": "^10.2.0", + "minimatch": "^5.1.0", + "minipass": "^3.1.6", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^9.1.0", + "nopt": "^6.0.0", + "npm-audit-report": "^3.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.1.0", + "npm-pick-manifest": "^7.0.2", + "npm-profile": "^6.2.0", + "npm-registry-fetch": "^13.3.1", + "npm-user-validate": "^1.0.1", + "npmlog": "^6.0.2", + "opener": "^1.5.2", + "p-map": "^4.0.0", + "pacote": "^13.6.2", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^5.0.2", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^2.0.0", + "validate-npm-package-name": "^4.0.0", + "which": "^2.0.2", + "write-file-atomic": "^4.0.1" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/@colors/colors": { + "version": "1.5.0", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/npm/node_modules/@gar/promisify": { + "version": "1.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "5.6.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/query": "^1.2.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.3", + "cacache": "^16.1.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^5.2.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "minimatch": "^5.1.0", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.2", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/ci-detect": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "4.2.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^6.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/disparity-colors": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ansi-styles": "^4.3.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "2.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents/node_modules/npm-bundled": { + "version": "1.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/move-file": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "1.2.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^9.1.0", + "postcss-selector-parser": "^6.0.10", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "4.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/@tootallnate/once": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "1.1.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/agent-base": { + "version": "6.0.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/npm/node_modules/agentkeepalive": { + "version": "4.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-regex": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/aproba": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/are-we-there-yet": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/asap": { + "version": "2.0.6", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "3.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/bin-links/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/brace-expansion": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/builtins": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "16.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "4.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "3.1.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^4.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/clean-stack": { + "version": "2.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cli-table3": { + "version": "0.6.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/npm/node_modules/clone": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/color-convert": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/node_modules/color-name": { + "version": "1.1.4", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/color-support": { + "version": "1.1.3", + "inBundle": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/npm/node_modules/columnify": { + "version": "1.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/concat-map": { + "version": "0.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/console-control-strings": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cssesc": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.3.4", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/debuglog": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/defaults": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/npm/node_modules/delegates": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/depd": { + "version": "1.1.2", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/dezalgo": { + "version": "1.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/diff": { + "version": "5.1.0", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/emoji-regex": { + "version": "8.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/node_modules/env-paths": { + "version": "2.2.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/err-code": { + "version": "2.0.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.12", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/fs.realpath": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/function-bind": { + "version": "1.1.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/gauge": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "8.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/graceful-fs": { + "version": "4.2.10", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/has": { + "version": "1.0.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/npm/node_modules/has-flag": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/has-unicode": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "5.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/http-cache-semantics": { + "version": "4.1.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "5.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "5.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/humanize-ms": { + "version": "1.2.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/npm/node_modules/iconv-lite": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "5.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/indent-string": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/infer-owner": { + "version": "1.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/inflight": { + "version": "1.0.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/inherits": { + "version": "2.0.4", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/ini": { + "version": "3.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/ip": { + "version": "2.0.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "4.0.2", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^3.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/is-core-module": { + "version": "2.10.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/npm/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/is-lambda": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/jsonparse": { + "version": "1.3.1", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "5.1.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.4.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "6.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "4.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/disparity-colors": "^2.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "binary-extensions": "^2.2.0", + "diff": "^5.1.0", + "minimatch": "^5.0.1", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1", + "tar": "^6.1.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "4.0.14", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^5.6.3", + "@npmcli/ci-detect": "^2.0.0", + "@npmcli/fs": "^2.1.1", + "@npmcli/run-script": "^4.2.0", + "chalk": "^4.1.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-package-arg": "^9.0.1", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "proc-log": "^2.0.0", + "read": "^1.0.7", + "read-package-json-fast": "^2.0.2", + "semver": "^7.3.7", + "walk-up-path": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "3.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^5.6.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmhook": { + "version": "8.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "4.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/run-script": "^4.1.3", + "npm-package-arg": "^9.0.1", + "pacote": "^13.6.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "6.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "5.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "4.0.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^13.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/run-script": "^4.1.3", + "json-parse-even-better-errors": "^2.3.1", + "proc-log": "^2.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "7.13.2", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "10.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "5.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "3.3.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "2.1.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-flush": { + "version": "1.0.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-json-stream": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/npm/node_modules/minipass-pipeline": { + "version": "1.2.4", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized": { + "version": "1.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ms": { + "version": "2.1.3", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "0.0.8", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/negotiator": { + "version": "0.6.3", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "9.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "4.0.1", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-bundled/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "5.0.0", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "9.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "5.1.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "7.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "6.2.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "13.3.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "1.0.1", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/npmlog": { + "version": "6.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/once": { + "version": "1.4.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/npm/node_modules/opener": { + "version": "1.5.2", + "inBundle": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/pacote": { + "version": "13.6.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/path-is-absolute": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-inflight": { + "version": "1.0.1", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/promise-retry": { + "version": "2.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "0.3.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "1.0.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json": { + "version": "5.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "2.0.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/readable-stream": { + "version": "3.6.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm/node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.3.7", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/set-blocking": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/signal-exit": { + "version": "3.0.7", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/smart-buffer": { + "version": "4.2.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.7.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/spdx-correct": { + "version": "3.1.1", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.3.0", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.11", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/ssri": { + "version": "9.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/string_decoder": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/npm/node_modules/string-width": { + "version": "4.2.3", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/strip-ansi": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "7.2.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.1.11", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "2.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/validate-npm-package-license": { + "version": "3.0.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "1.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/wcwidth": { + "version": "1.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/npm/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/wide-align": { + "version": "1.1.5", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/npm/node_modules/wrappy": { + "version": "1.0.2", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "4.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/probe.gl": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz", + "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0", + "@probe.gl/log": "3.6.0", + "@probe.gl/stats": "3.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "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==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "engines": { + "node": ">=8" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rc-align": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz", + "integrity": "sha512-wqJtVH60pka/nOX7/IspElA8gjPNQKIx/ZqJ6heATCkXpe1Zg4cPVrMD2vC96wjsFFL8WsmhPbx9tdMo1qqlIA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "dom-align": "^1.7.0", + "rc-util": "^5.26.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-cascader": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.7.3.tgz", + "integrity": "sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "classnames": "^2.3.1", + "rc-select": "~14.1.0", + "rc-tree": "~5.7.0", + "rc-util": "^5.6.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-checkbox": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.0.1.tgz", + "integrity": "sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.25.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-collapse": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.4.2.tgz", + "integrity": "sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.2.1", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dialog": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.0.4.tgz", + "integrity": "sha512-pmnPRZKd9CGzGgf4a1ysBvMhxm8Afx5fF6M7AzLtJ0qh8X1bshurDlqnK4MBNAB4hAeAMMbz6Ytb1rkGMvKFbQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.21.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-drawer": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.3.0.tgz", + "integrity": "sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.1.1", + "classnames": "^2.2.6", + "rc-motion": "^2.6.1", + "rc-util": "^5.21.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.6.2.tgz", + "integrity": "sha512-Wsw7GkVbUXADEs8FPL0v8gd+3mWQiydPFXBlr2imMScQaf8hh79pG9KrBc1DwK+nqHmYOpQfK2gn6jG2AQw9Pw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-trigger": "^5.0.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-field-form": { + "version": "1.38.2", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.38.2.tgz", + "integrity": "sha512-O83Oi1qPyEv31Sg+Jwvsj6pXc8uQI2BtIAkURr5lvEYHVggXJhdU/nynK8wY1gbw0qR48k731sN5ON4egRCROA==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "async-validator": "^4.1.0", + "rc-util": "^5.32.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-image": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.13.0.tgz", + "integrity": "sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", + "classnames": "^2.2.6", + "rc-dialog": "~9.0.0", + "rc-motion": "^2.6.2", + "rc-util": "^5.0.6" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-input": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-0.1.4.tgz", + "integrity": "sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.18.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-input-number": { + "version": "7.3.11", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.11.tgz", + "integrity": "sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.23.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-mentions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.13.1.tgz", + "integrity": "sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-menu": "~9.8.0", + "rc-textarea": "^0.4.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.22.5" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-menu": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz", + "integrity": "sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.8", + "rc-trigger": "^5.1.2", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.2.tgz", + "integrity": "sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.43.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.6.1.tgz", + "integrity": "sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.2.0", + "rc-util": "^5.20.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.2.tgz", + "integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-pagination": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.2.0.tgz", + "integrity": "sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.7.6.tgz", + "integrity": "sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "date-fns": "2.x", + "dayjs": "1.x", + "moment": "^2.24.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.37.0", + "shallowequal": "^1.1.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-progress": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz", + "integrity": "sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-rate": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.9.3.tgz", + "integrity": "sha512-2THssUSnRhtqIouQIIXqsZGzRczvp4WsH4WvGuhiwm+LG2fVpDUJliP9O1zeDOZvYfBE/Bup4SgHun/eCkbjgQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz", + "integrity": "sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "classnames": "^2.2.1", + "rc-util": "^5.38.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-segmented": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.3.0.tgz", + "integrity": "sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-motion": "^2.4.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-select": { + "version": "14.1.18", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.1.18.tgz", + "integrity": "sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.0.0", + "rc-trigger": "^5.0.4", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.2.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-slider": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.0.1.tgz", + "integrity": "sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.18.1", + "shallowequal": "^1.1.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-steps": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-5.0.0.tgz", + "integrity": "sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==", + "dependencies": { + "@babel/runtime": "^7.16.7", + "classnames": "^2.2.3", + "rc-util": "^5.16.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-switch": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-3.2.2.tgz", + "integrity": "sha512-+gUJClsZZzvAHGy1vZfnwySxj+MjLlGRyXKXScrtCTcmiYNPzxDFOxdQ/3pK1Kt/0POvwJ/6ALOR8gwdXGhs+A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-util": "^5.0.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-table": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz", + "integrity": "sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.22.5", + "shallowequal": "^1.1.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs": { + "version": "12.5.10", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.5.10.tgz", + "integrity": "sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "~4.0.0", + "rc-menu": "~9.8.0", + "rc-motion": "^2.6.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.16.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs/node_modules/rc-dropdown": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", + "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.6", + "rc-trigger": "^5.3.1", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-textarea": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.4.7.tgz", + "integrity": "sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.24.4", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tooltip": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.2.2.tgz", + "integrity": "sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "^2.3.1", + "rc-trigger": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tree": { + "version": "5.7.12", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.12.tgz", + "integrity": "sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-tree-select": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.5.5.tgz", + "integrity": "sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "~14.1.0", + "rc-tree": "~5.7.0", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-trigger": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/rc-trigger/-/rc-trigger-5.3.4.tgz", + "integrity": "sha512-mQv+vas0TwKcjAO2izNPkqR4j86OemLRmvL2nOzdP9OWNWA1ivoTt5hzFqYNW9zACwmTezRiN8bttrC7cZzYSw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.6", + "rc-align": "^4.0.0", + "rc-motion": "^2.0.0", + "rc-util": "^5.19.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-upload": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.6.tgz", + "integrity": "sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", + "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/rc-virtual-list": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz", + "integrity": "sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg==", + "dependencies": { + "@babel/runtime": "^7.20.0", + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "dependencies": { + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-highlight-words": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/react-highlight-words/-/react-highlight-words-0.18.0.tgz", + "integrity": "sha512-5z+46eLPjB4JWgOhuQ0E+6iUPTD1U3amiy5KKjzZmeJ5zyvHr91hnzBT3UHya/KlySm5KRTKpYpba9vs67oO2A==", + "dependencies": { + "highlight-words-core": "^1.2.0", + "memoize-one": "^4.0.0", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-resize-detector": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-7.1.2.tgz", + "integrity": "sha512-zXnPJ2m8+6oq9Nn8zsep/orts9vQv3elrpA+R8XTcW7DVVUJ9vwDwMXaBtykAYjMnkCIaOoK9vObyR7ZgFNlOw==", + "dependencies": { + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-router": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.1.tgz", + "integrity": "sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ==", + "dependencies": { + "@remix-run/router": "1.19.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.1.tgz", + "integrity": "sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw==", + "dependencies": { + "@remix-run/router": "1.19.1", + "react-router": "6.26.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-scripts/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-scripts/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "dependencies": { + "lodash": "^4.0.1" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/regl": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/regl/-/regl-1.7.0.tgz", + "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.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==" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "node_modules/sass-graph": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", + "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.4.3", + "yargs": "^17.2.1" + }, + "bin": { + "sassgraph": "bin/sassgraph" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-graph/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-graph/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-graph/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/screenfull": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", + "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", + "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", + "dependencies": { + "js-base64": "^2.4.9", + "source-map": "^0.7.3" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "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==", + "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/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "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==", + "dependencies": { + "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" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stdout-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/stdout-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stdout-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/stdout-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==" + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tailwindcss": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/three": { + "version": "0.167.1", + "resolved": "https://registry.npmjs.org/three/-/three-0.167.1.tgz", + "integrity": "sha512-gYTLJA/UQip6J/tJvl91YYqlZF47+D/kxiWrbTon35ZHlXEN0VOo+Qke2walF1/x92v55H6enomymg4Dak52kw==" + }, + "node_modules/three-forcegraph": { + "version": "1.41.14", + "resolved": "https://registry.npmjs.org/three-forcegraph/-/three-forcegraph-1.41.14.tgz", + "integrity": "sha512-W/cZElLXO0l6ffdMmDakh4bUGSYuSv/YxInOHMN9KAQgDwJ8904SOBh8qkTnGu7UPsi0mAsrUgkfViW8heloTA==", + "dependencies": { + "accessor-fn": "1", + "d3-array": "1 - 3", + "d3-force-3d": "2 - 3", + "d3-scale": "1 - 4", + "d3-scale-chromatic": "1 - 3", + "data-joint": "1", + "kapsule": "1", + "ngraph.forcelayout": "3", + "ngraph.graph": "20", + "tinycolor2": "1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "three": ">=0.118.3" + } + }, + "node_modules/three-render-objects": { + "version": "1.29.4", + "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.29.4.tgz", + "integrity": "sha512-E6YwTN5zNsaMjo/5rosgnK44b1aq//3YJGJ5BxG9t7+euRm7ZAmNX3NIqFkoDhKtFC5WLoOxZjyNoq8Uc49gaA==", + "dependencies": { + "@tweenjs/tween.js": "18 - 23", + "accessor-fn": "1", + "kapsule": "1", + "polished": "4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "three": "*" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "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==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.38", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", + "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vis-network": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/vis-network/-/vis-network-9.1.9.tgz", + "integrity": "sha512-Ft+hLBVyiLstVYSb69Q1OIQeh3FeUxHJn0WdFcq+BFPqs+Vq1ibMi2sb//cxgq1CP7PH4yOXnHxEH/B2VzpZYA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/visjs" + }, + "peerDependencies": { + "@egjs/hammerjs": "^2.0.0", + "component-emitter": "^1.3.0", + "keycharm": "^0.2.0 || ^0.3.0 || ^0.4.0", + "uuid": "^3.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "vis-data": "^6.3.0 || ^7.0.0", + "vis-util": "^5.0.1" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zrender": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.6.0.tgz", + "integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/package.json b/hugegraph-hubble/hubble-fe-new/package.json new file mode 100644 index 000000000..042016539 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/package.json @@ -0,0 +1,78 @@ +{ + "name": "hubble", + "version": "0.1.0", + "private": true, + "dependencies": { + "@ant-design/icons": "^4.7.0", + "@antv/g6": "^4.6.15", + "@antv/graphin": "^2.7.12", + "@antv/graphin-components": "^2.4.0", + "@antv/graphin-icons": "^1.0.0", + "@antv/x6": "^1.34.6", + "@antv/x6-react-components": "^1.1.20", + "@antv/x6-react-shape": "^1.6.3", + "@babel/eslint-plugin": "^7.18.10", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@testing-library/user-event": "^13.5.0", + "3d-force-graph": "^1.71.2", + "ajv": "8.17.1", + "antd": "^4.23.1", + "axios": "^0.27.2", + "codemirror": "^6.0.1", + "cron-expression-validator": "^1.0.20", + "date-fns": "^2.29.3", + "echarts": "^5.4.1", + "http-proxy-middleware": "^2.0.6", + "install": "^0.13.0", + "json-bigint": "^1.0.0", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "node-gyp": "^9.4.0", + "node-sass": "^9.0.0", + "npm": "^8.13.2", + "react": "^18.2.0", + "react-color": "^2.19.3", + "react-dom": "^18.2.0", + "react-highlight-words": "^0.18.0", + "react-json-view": "^1.21.3", + "react-router-dom": "^6.3.0", + "react-scripts": "5.0.1", + "screenfull": "^6.0.2", + "typescript": "^4.7.4", + "validator": "^13.7.0", + "vis-network": "^9.1.2", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@ecomfe/eslint-config": "^7.4.0", + "@ecomfe/stylelint-config": "^1.1.2", + "eslint": "^8.19.0", + "eslint-plugin-react": "^7.30.1", + "resize-observer-polyfill": "^1.5.1" + } +} diff --git a/hugegraph-hubble/hubble-fe/public/favicon.ico b/hugegraph-hubble/hubble-fe-new/public/favicon.ico similarity index 100% rename from hugegraph-hubble/hubble-fe/public/favicon.ico rename to hugegraph-hubble/hubble-fe-new/public/favicon.ico diff --git a/hugegraph-hubble/hubble-fe-new/public/index.html b/hugegraph-hubble/hubble-fe-new/public/index.html new file mode 100644 index 000000000..97e58c3b6 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/public/index.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + + 数据管理平台 + + + + +
+ + + diff --git a/hugegraph-hubble/hubble-fe-new/public/logo192.png b/hugegraph-hubble/hubble-fe-new/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/hugegraph-hubble/hubble-fe/public/manifest.json b/hugegraph-hubble/hubble-fe-new/public/manifest.json similarity index 62% rename from hugegraph-hubble/hubble-fe/public/manifest.json rename to hugegraph-hubble/hubble-fe-new/public/manifest.json index 1f2f141fa..080d6c77a 100644 --- a/hugegraph-hubble/hubble-fe/public/manifest.json +++ b/hugegraph-hubble/hubble-fe-new/public/manifest.json @@ -6,6 +6,16 @@ "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" } ], "start_url": ".", diff --git a/hugegraph-hubble/hubble-fe-new/public/robots.txt b/hugegraph-hubble/hubble-fe-new/public/robots.txt new file mode 100644 index 000000000..e9e57dc4d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/hugegraph-hubble/hubble-fe-new/src/App.css b/hugegraph-hubble/hubble-fe-new/src/App.css new file mode 100644 index 000000000..5896ac461 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/App.css @@ -0,0 +1,74 @@ +.form_attr_add { + border: 1px dashed #40a9ff; + text-align: center; + padding: 4px; + cursor: pointer; +} + +.form_attr_select { + display: inline-block; + width: calc(25% - 12px); + width: 120px; +} + +.form_attr_val { + display: inline-block; + width: 120px; +} + +.form_attr_split { + display: inline-block; + width: 24px; + line-height: 32px; + text-align: center; +} + +.form_attr_border { + border: 1px dashed #2f54eb; + padding: 20px; + margin-bottom: 10px; +} + +.form_attr_button, +.form_attr_table { + margin-bottom: 10px; +} + +.ant-layout-sider-trigger { + border-top: 1px solid rgba(0, 0, 0, .06); +} + +/* .ant-modal-content { + width: 600px; +} */ + +.ant-modal-body { + max-height: 488px; + overflow: auto; +} + +.ant-menu-sub.ant-menu-inline { + background-color: #fff; +} + +.ant-page-header { + padding: 24px 10px 24px; +} + +.ant-page-header-content { + padding-top: 24px; +} + +/* csslint ignore:start */ +.ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before { + width: 0; +} +/* csslint ignore:end */ + +.ant-table-tbody > tr > td { + border-bottom: 0; +} + +.ant-table-tbody .ant-empty-normal { + margin: 200px 0; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/App.js b/hugegraph-hubble/hubble-fe-new/src/App.js new file mode 100644 index 000000000..4ffb86392 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/App.js @@ -0,0 +1,16 @@ +import Route from './routes'; +import 'antd/dist/antd.css'; +import './App.scss'; +import './App.css'; +import Layout from './layout.ant'; + +function App() { + + return ( +
+ } /> +
+ ); +}; + +export default App; diff --git a/hugegraph-hubble/hubble-fe-new/src/App.scss b/hugegraph-hubble/hubble-fe-new/src/App.scss new file mode 100644 index 000000000..f2897bfb2 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/App.scss @@ -0,0 +1,26 @@ +iframe { + border: medium none; +} + +.main { + min-height: calc(100vh - 60px); + + .content { + display: flex; + flex-direction: column; + padding: 10px; + + .container { + background: #fff; + padding-left: 25px; + margin-top: 10px; + + padding: 10px; + flex: 1 auto; + } + } + + .center { + text-align: center; + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/App.test.js b/hugegraph-hubble/hubble-fe-new/src/App.test.js new file mode 100644 index 000000000..1f03afeec --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/hugegraph-hubble/hubble-fe-new/src/api/analysis.js b/hugegraph-hubble/hubble-fe-new/src/api/analysis.js new file mode 100644 index 000000000..1f88169e9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/analysis.js @@ -0,0 +1,185 @@ +import request from './request'; +import qs from 'qs'; + +// 图分析通用 +const getGraphSpaceList = () => { + return request.get('/graphspaces/list'); +}; + +const getGraphList = graphSpace => { + return request.get(`/graphspaces/${graphSpace}/graphs/list`); +}; + +const getOlapMode = (graphSpace, graph) => { + return request.get(`/graphspaces/${graphSpace}/graphs/${graph}/graph_read_mode`); +}; + +const switchOlapMode = (graphSpace, graph, params) => { + return request.put(`/graphspaces/${graphSpace}/graphs/${graph}/graph_read_mode`, params); +}; + +const getUploadList = (graphspace, graph) => { + return `/api/v1.3//graphspaces/${graphspace}/graphs/${graph}/import`; +}; + +const getMetaEdgeList = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels`); +}; + +const getMetaVertexList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels`); +}; + +const updateVertexProperties = (graphspace, graph, params) => { + return request.put(`/graphspaces/${graphspace}/graphs/${graph}/vertex/${params.id}`, params); +}; + +const updateEdgeProperties = (graphspace, graph, params) => { + return request.put(`/graphspaces/${graphspace}/graphs/${graph}/edge/${params.id}`, params); +}; + +const getVertexProperties = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/vertexlabel/${params}`); +}; + +const getEdgeProperties = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/edgelabel/${params}`); +}; + +const getExecutionLogs = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/execute-histories`, {params}); +}; + +const getExecutionQuery = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/gremlin-query`, params); +}; + +const getGraphData = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/gremlin-query`); +}; + +const putExecutionQuery = (graphspace, graph, params) => { + return request.put(`/graphspaces/${graphspace}/graphs/${graph}/gremlin-query`, params); +}; + +const getCypherExecutionQuery = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/cypher`, {params}); +}; + +const getExecutionTask = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/gremlin-query/async-task`, params); +}; + +const getCypherTask = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/cypher/async-task`, params); +}; + +const fetchManageTaskList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/async-tasks?`, {params}); +}; + +const addFavoriate = (graphspace, graph, params) => { + return request.post(`graphspaces/${graphspace}/graphs/${graph}/gremlin-collections`, params); +}; + +const deleteQueryCollection = (graphspace, graph, id) => { + return request.delete(`graphspaces/${graphspace}/graphs/${graph}/gremlin-collections/${id}`); +}; + +const editQueryCollection = (graphspace, graph, parmas) => { + return request.put(`graphspaces/${graphspace}/graphs/${graph}/gremlin-collections/${parmas.id}`, parmas); +}; + +const fetchFavoriteQueries = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/gremlin-collections?`, {params}); +}; + +const addGraphNode = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/vertex`, params); +}; + +const fetchEdgeLabels = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels/${params}`); +}; + +const fetchVertexlinks = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/${params}/link`); +}; + +const addEdge = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/edge`, params); +}; + + +// 图算法 +const postOlapInfo = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/algorithms/olap`, data); +}; + +const runOltpInfo = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/algorithms/oltp/` + data.algorithmName, data); +}; + +const runOlapVermeer = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/algorithms/vermeer`, {params}); +}; + +// 任务管理 +const fetchAsyncTaskResult = (graphspace, graph, taskId) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/async-tasks/${taskId}`); +}; + +const deleteAsyncTask = (graphspace, graph, selectedTaskIds) => { + const params = qs.stringify(selectedTaskIds, {arrayFormat: 'repeat'}); + return request.delete(`/graphspaces/${graphspace}/graphs/${graph}/async-tasks?` + params); +}; + +const abortAsyncTask = (graphspace, graph, taskId) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/async-tasks/cancel/${taskId}`); +}; + +const getExecuteAsyncTaskList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/execute-histories`, {params}); +}; + +const loadVermeerTask = params => { + return request.post('/vermeer/task', {...params}); +}; + +export { + getGraphSpaceList, + getGraphList, + getOlapMode, + switchOlapMode, + getExecutionLogs, + getExecutionQuery, + getGraphData, + putExecutionQuery, + getExecutionTask, + getCypherTask, + fetchManageTaskList, + addFavoriate, + postOlapInfo, + runOltpInfo, + runOlapVermeer, + fetchAsyncTaskResult, + addGraphNode, + deleteAsyncTask, + abortAsyncTask, + getMetaEdgeList, + getMetaVertexList, + deleteQueryCollection, + editQueryCollection, + fetchFavoriteQueries, + getUploadList, + updateVertexProperties, + updateEdgeProperties, + getCypherExecutionQuery, + getVertexProperties, + getEdgeProperties, + getExecuteAsyncTaskList, + fetchEdgeLabels, + fetchVertexlinks, + addEdge, + loadVermeerTask, +}; diff --git a/hugegraph-hubble/hubble-fe-new/src/api/auth.js b/hugegraph-hubble/hubble-fe-new/src/api/auth.js new file mode 100644 index 000000000..af9575af9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/auth.js @@ -0,0 +1,199 @@ +import request from './request'; +import qs from 'qs'; + +// login +const login = data => { + return request.post('/auth/login', data); +}; + +const logout = () => { + return request.get('/auth/logout'); +}; + +const status = () => { + return request.get('/auth/status'); +}; + +const getUserList = params => { + return request.get('/auth/users/list', {params}); +}; + +const getAllUserList = params => { + return request.get('/auth/users', {params}); +}; + +const getUserInfo = username => { + return request.get(`/auth/users/${username}`); +}; + +const updateUser = (id, data) => { + return request.put(`/auth/users/${id}`, data); +}; + +const delUser = id => { + return request.delete(`/auth/users/${id}`); +}; + +const updateAdminspace = (username, data) => { + return request.post(`/auth/users/updateadminspace/${username}`, data); +}; + +const addUser = data => { + return request.post('/auth/users', data); +}; + +const updatePwd = (username, oldpwd, newpwd) => { + return request.post('/auth/users/updatepwd', {username, oldpwd, newpwd}); +}; + +const importUserUrl = '/api/v1.3/auth/users/batch'; + +export {login, logout, status, getUserList, getAllUserList, getUserInfo, delUser, + updateUser, addUser, updatePwd, importUserUrl, updateAdminspace}; + +// resource + +const getResourceList = (graphspace, params) => { + return request.get(`/graphspaces/${graphspace}/auth/targets`, {params}); +}; + +const addResource = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/auth/targets`, data); +}; + +const updateResource = (graphspace, id, data) => { + return request.put(`/graphspaces/${graphspace}/auth/targets/${id}`, data); +}; + +const getResource = (graphspace, id) => { + return request.get(`/graphspaces/${graphspace}/auth/targets/${id}`); +}; + +const delResource = (graphspace, id) => { + return request.delete(`/graphspaces/${graphspace}/auth/targets/${id}`); +}; + +export {getResourceList, addResource, updateResource, getResource, delResource}; + +// role + +const getRoleList = (graphspace, params) => { + return request.get(`/graphspaces/${graphspace}/auth/roles`, {params}); +}; + +const getAllRoleList = graphspace => { + return request.get(`/graphspaces/${graphspace}/auth/roles/list`); +}; + +const addRole = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/auth/roles`, data); +}; + +const updateRole = (graphspace, id, data) => { + return request.put(`/graphspaces/${graphspace}/auth/roles/${id}`, data); +}; + +const delRole = (graphspace, id) => { + return request.delete(`/graphspaces/${graphspace}/auth/roles/${id}`); +}; + +const delRoleBatch = (graphspace, data) => { + return request.delete(`/graphspaces/${graphspace}/auth/roles/`, data); +}; + +const getRoleResourceList = (graphspace, params) => { + return request.get(`/graphspaces/${graphspace}/auth/accesses`, {params}); +}; + +const addRoleResource = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/auth/accesses`, data); +}; + +const updateRoleResource = (graphspace, data) => { + return request.put(`/graphspaces/${graphspace}/auth/accesses`, data); +}; + +const delRoleResource = (graphspace, data) => { + return request.delete(`/graphspaces/${graphspace}/auth/accesses`, data); +}; + +const getRoleUser = (graphspace, params) => { + return request.get(`/graphspaces/${graphspace}/auth/belongs`, {params}); +}; + +const addRoleUser = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/auth/belongs`, data); +}; + +const addRoleUserBatch = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/auth/belongs/ids`, data); +}; + +const delRoleUser = (graphspace, id) => { + return request.delete(`/graphspaces/${graphspace}/auth/belongs/${id}`); +}; + +const delRoleUserBatch = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/auth/belongs/delids`, data); +}; + +export { + getRoleList, getAllRoleList, addRole, updateRole, delRole, delRoleBatch, + getRoleResourceList, addRoleResource, updateRoleResource, delRoleResource, + getRoleUser, addRoleUser, addRoleUserBatch, delRoleUser, delRoleUserBatch, +}; + +const getPersonal = () => { + return request.get('/auth/users/getpersonal'); +}; + +const updatePersonal = params => { + return request.get('/auth/users/updatepersonal', {params}); +}; + +export {getPersonal, updatePersonal}; + +const getDashboard = () => { + return request.get('/dashboard'); +}; + +const getVermeer = () => { + return request.get('/vermeer'); +}; + +export {getDashboard, getVermeer}; + +// saas TODO REMOVED +const getUUapList = params => { + return request.get('/uic/list', {params}); +}; + +const getSuperUser = params => { + return request.get('/auth/users/super', {params}); +}; + +const addSuperUser = data => { + return request.post('/auth/users/super', + qs.stringify(data), + {headers: {'Content-Type': 'application/x-www-form-urlencoded'}} + ); +}; + +const addUuapUser = data => { + return request.post('/auth/users/uuap', + qs.stringify(data), + {headers: {'Content-Type': 'application/x-www-form-urlencoded'}} + ); + + // return request.post('/auth/users/uuap', data); +}; + +const removeSuperUser = username => { + return request.delete(`/auth/users/super/${username}`); +}; + +const getAccountsList = username => { + return request.get('/uic/accounts', {params: {username}}); +}; + +export {getUUapList, getSuperUser, addSuperUser, addUuapUser, removeSuperUser, getAccountsList}; diff --git a/hugegraph-hubble/hubble-fe-new/src/api/cloud.js b/hugegraph-hubble/hubble-fe-new/src/api/cloud.js new file mode 100644 index 000000000..e6729edef --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/cloud.js @@ -0,0 +1,36 @@ +// import request from './request'; +// TODO REMOVED +// const getAccountsList = username => { +// return request.get('/uic/accounts', {params: {username}}); +// }; +// +// const getOrderList = params => { +// return request.get('/order', {params}); +// }; +// +// const getOrder = id => { +// return request.get(`/order/${id}`); +// }; +// +// const updateOrder = (id, data) => { +// return request.put(`/order/${id}`, data); +// }; +// +// const updateOrderStatus = (id, status) => { +// return request.put(`/order/${id}/status`, {status}); +// }; +// +// const createOrder = data => { +// return request.post('/order', data); +// // return request.post1('/settle', qs.stringify(data), +// // {headers: {'Content-Type': 'application/x-www-form-urlencoded'}}); +// }; +// +// const getBillList = params => { +// return request.get('/bill', {params}); +// }; +// +// export { +// getAccountsList, createOrder, getOrderList, getOrder, updateOrder, updateOrderStatus, +// getBillList, +// }; diff --git a/hugegraph-hubble/hubble-fe-new/src/api/index.js b/hugegraph-hubble/hubble-fe-new/src/api/index.js new file mode 100644 index 000000000..0f2be36f7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/index.js @@ -0,0 +1,9 @@ +import request from './request'; +import * as manage from './manage'; +import * as auth from './auth'; +import * as analysis from './analysis'; +import * as cloud from './cloud'; + +const uploadUrl = '/api/v1.3/ingest/files/upload'; + +export {request, manage, auth, analysis, cloud, uploadUrl}; diff --git a/hugegraph-hubble/hubble-fe-new/src/api/manage.js b/hugegraph-hubble/hubble-fe-new/src/api/manage.js new file mode 100644 index 000000000..c4b9bf7c8 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/manage.js @@ -0,0 +1,350 @@ +import request from './request'; +import qs from 'qs'; + +// 图空间 +const getGraphSpaceList = params => { + return request.get('/graphspaces', {params}); +}; + +const getGraphSpace = graphspace => { + return request.get(`/graphspaces/${graphspace}`); +}; + +const addGraphSpace = data => { + return request.post('/graphspaces', data); +}; + +const updateGraphSpace = (graphspace, data) => { + return request.put(`/graphspaces/${graphspace}`, data); +}; + +const delGraphSpace = graphspace => { + return request.delete(`/graphspaces/${graphspace}`); +}; + +const setDefaultGraphSpace = graphspace => { + return request.get(`/graphspaces/${graphspace}/setdefault`); +}; + +const getDefaultGraphSpace = () => { + return request.get('/graphspaces/getdefault'); +}; + +const initBuiltin = params => { + return request.post('/graphspaces/builtin', params); +}; + +export {getGraphSpace, getGraphSpaceList, addGraphSpace, updateGraphSpace, + delGraphSpace, setDefaultGraphSpace, getDefaultGraphSpace, initBuiltin}; + +// schema +const getSchemaList = (graphspace, params) => { + return request.get(`/graphspaces/${graphspace}/schematemplates`, {params}); +}; + +const addSchema = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/schematemplates`, data); +}; + +const getSchema = (graphspace, name) => { + return request.get(`graphspaces/${graphspace}/schematemplates/${name}`); +}; + +const getGraphSchema = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/groovy`); +}; + +const exportSchema = (graphspace, graph) => { + return request.get(`graphspaces/${graphspace}/graphs/${graph}/schema/groovy/export`); +}; + +const updateSchema = (graphspace, name, data) => { + return request.put(`graphspaces/${graphspace}/schematemplates/${name}`, data); +}; + +const delSchema = (graphspace, name) => { + return request.delete(`graphspaces/${graphspace}/schematemplates/${name}`); +}; + +export {getSchemaList, addSchema, updateSchema, getSchema, getGraphSchema, exportSchema, delSchema}; + +// 图 +const getGraphList = (graphspace, params) => { + return request.get(`/graphspaces/${graphspace}/graphs`, {params}); +}; + +const addGraph = (graphspace, data) => { + return request.post(`/graphspaces/${graphspace}/graphs`, + qs.stringify(data), + {headers: {'Content-Type': 'application/x-www-form-urlencoded'}} + ); +}; + +const updateGraph = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/update`, {params}); +}; + +const getGraph = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/get`); +}; + +const delGraph = (graphspace, graph) => { + return request.delete(`/graphspaces/${graphspace}/graphs/${graph}`); +}; + +const getGraphView = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/graphview`); +}; + +const setDefaultGraph = (graphspace, graph) => { + return request.get(`graphspaces/${graphspace}/graphs/${graph}/setdefault`); +}; + +const getDefaultGraph = graphspace => { + return request.get(`graphspaces/${graphspace}/graphs/getdefault`); +}; + +const clearGraphData = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/truncate`, { + params: {clear_schema: false, clear_data: true}, + }); +}; + +const clearGraphDataAndSchema = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/truncate`, {params: {clear_schema: true}}); +}; + +const getGraphStatistic = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/statistics`); +}; + +const updateGraphStatistic = (graphspace, graph) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/statistics`); +}; + +// no-use +const getGraphStorage = (graphspace, graph) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/storage`); +}; + +const cloneGraph = (graphspace, graph, params) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/clone`, params); +}; + +export {getGraphList, getGraph, addGraph, updateGraph, delGraph, getDefaultGraph, + getGraphView, clearGraphData, setDefaultGraph, clearGraphDataAndSchema, + getGraphStatistic, updateGraphStatistic, getGraphStorage, cloneGraph}; + +// meta property +const getMetaPropertyList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/propertykeys`, {params}); +}; + +const addMetaProperty = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/schema/propertykeys`, data); +}; + +const checkMetaProperty = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/schema/propertykeys/check_using`, data); +}; + +const updateMetaProperty = () => {}; + +const delMetaProperty = (graphspace, graph, data) => { + const {names} = data; + const str = names.map(name => 'names=' + encodeURIComponent(name)).join('&'); + const skip_using = String(names.length !== 1); + + // return request.delete(`/graphspaces/${graphspace}/graphs/${graph}/schema/propertykeys`, data); + return request.delete( + `/graphspaces/${graphspace}/graphs/${graph}/schema/propertykeys?${str}&skip_using=${skip_using}`); +}; + +export {getMetaPropertyList, addMetaProperty, updateMetaProperty, delMetaProperty, checkMetaProperty}; + +// meta vertex +const getMetaVertexList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels`, {params}); +}; + +const getMetaVertex = (graphspace, graph, name) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/${name}`); +}; + +const getMetaVertexLink = (graphspace, graph, name) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/${name}/link`); +}; + +const getMetaVertexNew = (graphspace, graph, name) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/${name}/new`); +}; + +const addMetaVertex = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels`, data); +}; + +const addMetaVertexNew = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/create_new`, data); +}; + +const checkMetaVertex = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/check_using`, data); +}; + +const updateMetaVertex = (graphspace, graph, name, data) => { + return request.put(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels/${name}`, data); +}; + +const delMetaVertex = (graphspace, graph, data) => { + // return request.delete(`/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels`, data); + + const {names} = data; + const str = names.map(name => 'names=' + encodeURIComponent(name)).join('&'); + const skip_using = String(names.length !== 1); + + return request.delete( + `/graphspaces/${graphspace}/graphs/${graph}/schema/vertexlabels?${str}&skip_using=${skip_using}`); +}; + +export {getMetaVertexList, addMetaVertex, updateMetaVertex, delMetaVertex, checkMetaVertex, getMetaVertex, + getMetaVertexNew, addMetaVertexNew, getMetaVertexLink}; + +// meta edge +const getMetaEdgeList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels`, {params}); +}; + +const getMetaEdge = (graphspace, graph, name) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels/${name}`); +}; + +const addMetaEdge = (graphspace, graph, data) => { + return request.post(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels`, data); +}; + +const updateMetaEdge = (graphspace, graph, name, data) => { + return request.put(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels/${name}`, data); +}; + +const delMetaEdge = (graphspace, graph, data) => { + // return request.delete(`/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels`, data); + + const {names} = data; + const str = names.map(name => 'names=' + encodeURIComponent(name)).join('&'); + const skip_using = String(names.length !== 1); + + return request.delete( + `/graphspaces/${graphspace}/graphs/${graph}/schema/edgelabels?${str}&skip_using=${skip_using}`); +}; + +export {getMetaEdgeList, getMetaEdge, addMetaEdge, updateMetaEdge, delMetaEdge}; + +// meta vertex index +const getMetaVertexIndexList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/propertyindexes?is_vertex_label=true`, + {params}); +}; + +// meta edge index +const getMetaEdgeIndexList = (graphspace, graph, params) => { + return request.get(`/graphspaces/${graphspace}/graphs/${graph}/schema/propertyindexes?is_vertex_label=false`, + {params}); +}; + +export {getMetaVertexIndexList, getMetaEdgeIndexList}; + +// datasource +const testhost = '/ingest'; +const getDatasourceList = params => { + // return request.get('/datasources/list', data); + return request.get(`${testhost}/datasources/list`, {params}); +}; + +const getDatasource = id => { + // return request.get(`/datasources/${id}`); + return request.get(`${testhost}/datasources/${id}`); +}; + +const addDatasource = data => { + // return request.post('/datasources', data); + return request.post(`${testhost}/datasources`, data); +}; + +// const updateDatasource = () => {}; + +const delDatasource = id => { + // return request.delete(`/datasources/${id}`); + return request.delete(`${testhost}/datasources/${id}`); +}; + +const delBatchDatasource = data => { + return request.post(`${testhost}/datasources/delete`, data); +}; + +const getDatasourceSchema = datasourceID => { + return request.get(`${testhost}/schemas`, {params: {datasource: datasourceID}}); +}; + +const checkJDBC = data => { + return request.post(`${testhost}/jdbc/check`, data); +}; + + +const datasourceUploadUrl = '/api/v1.3/ingest/files/upload'; + +export {getDatasource, getDatasourceList, addDatasource, delDatasource, + getDatasourceSchema, delBatchDatasource, checkJDBC, datasourceUploadUrl}; + +// task +const addTask = data => { + return request.post(`${testhost}/tasks`, data, { + headers: { + 'Content-Type': 'application/json;charset=UTF-8', + }, + }); +}; + +const getTaskList = params => { + return request.get(`${testhost}/tasks/list`, {params}); +}; + +const getTaskDetail = id => { + return request.get(`${testhost}/tasks/${id}`); +}; + +const deleteTask = id => { + return request.delete(`${testhost}/tasks/${id}`); +}; + +const disableTask = id => { + return request.put(`${testhost}/tasks/${id}/disable`); +}; + +const enableTask = id => { + return request.put(`${testhost}/tasks/${id}/enable`); +}; + +const updateTask = (id, data) => { + return request.put(`${testhost}/tasks/${id}`, data); +}; + +const getMetricsTask = () => { + return request.get(`${testhost}/metrics/task`); +}; + +export {addTask, getTaskList, getTaskDetail, deleteTask, disableTask, enableTask, updateTask, getMetricsTask}; + +// job +const getJobsList = params => { + return request.get(`${testhost}/jobs/list`, {params}); +}; + +const getJobsDetail = id => { + return request.get(`${testhost}/jobs/${id}`); +}; + +const deleteJobs = id => { + return request.delete(`${testhost}/jobs/${id}`); +}; + +export {getJobsList, getJobsDetail, deleteJobs}; diff --git a/hugegraph-hubble/hubble-fe-new/src/api/request.js b/hugegraph-hubble/hubble-fe-new/src/api/request.js new file mode 100644 index 000000000..b5a6daf5c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/request.js @@ -0,0 +1,96 @@ +import axios from 'axios'; +import {message} from 'antd'; +import JSONbig from 'json-bigint'; +import _ from 'lodash'; + +const instance = axios.create({ + baseURL: '/api/v1.3', + withCredentials: true, + // 后端请求时延为30s,30s后后端统一处理返回400报错,这里设置31s为了尽可能不走timeout逻辑拿到超时报错。 + timeout: 31000, + transformResponse: [data => { + return JSONbig.parse(data); + }], +}); + +instance.interceptors.request.use( + config => { + if (!config.headers['Content-Type']) { + config.data = JSON.stringify(config.data); + config.headers = { + 'Content-Type': 'application/json;charset=UTF-8', + }; + } + return config; + }, + error => { + return Promise.reject(error); + } +); + +instance.interceptors.response.use( + response => { + if (response.data.status !== 200 && response.data.status !== 401) { + if (!_.isEmpty(response.data.message)) { + message.error(response.data.message); + } + } + else if (response.data.status === 401) { + // message.error('授权过期'); + localStorage.setItem('user', ''); + // storageFn.removeStorage(['lg','userInfo','tenant']) + // setTimeout(() => { + // window.location = '/check'; + // }, 700); + } + return response; + }, + error => { + // if (!error.response) { + // setTimeout(() => { + // window.location = '/check'; + // }, 700); + + // return; + // } + const res = error.response?.data; + message.error(`请求出错:${res.message ?? ''},path:${res.path}`); + } +); + +const request = {}; + +request.get = async (url, params) => { + const resposne = await instance.get(`${url}`, params); + return resposne?.data; +}; + +request.post = async (url, params, config) => { + const resposne = await instance.post( + `${url}`, + params, + config + ); + + return resposne?.data; +}; + +request.put = async (url, params) => { + const resposne = await instance.put( + `${url}`, + params + ); + + return resposne?.data; +}; + +request.delete = async (url, params) => { + const resposne = await instance.delete( + `${url}`, + {params} + ); + + return resposne?.data; +}; + +export default request; diff --git a/hugegraph-hubble/hubble-fe-new/src/api/request2.js b/hugegraph-hubble/hubble-fe-new/src/api/request2.js new file mode 100644 index 000000000..c4ae62456 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/api/request2.js @@ -0,0 +1,109 @@ +import axios from 'axios'; +import {message} from 'antd'; +import JSONbig from 'json-bigint'; +import _ from 'lodash'; +import qs from 'qs'; + +const instance = axios.create({ + baseURL: '/api/v1.3', + withCredentials: true, + // 后端请求时延为30s,30s后后端统一处理返回400报错,这里设置31s为了尽可能不走timeout逻辑拿到超时报错。 + timeout: 31000, + transformResponse: [data => { + return JSONbig.parse(data); + }], +}); + +instance.interceptors.request.use( + config => { + if (!config.headers['Content-Type']) { + // config.data = JSON.stringify(config.data); + config.headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + }; + } + return config; + }, + error => { + return Promise.reject(error); + } +); + +instance.interceptors.response.use( + response => { + if (response.data.status !== 200 && response.data.status !== 401) { + if (!_.isEmpty(response.data.message)) { + message.error(response.data.message); + } + } + else if (response.data.status === 401) { + // message.error('授权过期'); + localStorage.setItem('user', ''); + // storageFn.removeStorage(['lg','userInfo','tenant']) + setTimeout(() => { + window.location = '/check'; + }, 700); + } + return response; + }, + error => { + if (!error.response) { + setTimeout(() => { + window.location = '/check'; + }, 700); + + return; + } + const res = error.response?.data; + message.error(`请求出错:${res.message ?? ''},path:${res.path}`); + } +); + +const request = {}; + +request.get = async (url, params) => { + const resposne = await instance.get(`${url}`, params); + return resposne?.data; +}; + +request.post = async (url, params, config) => { + console.log(params, qs.stringify(params)); + const resposne = await instance.post( + `${url}`, + qs.stringify(params), + config + ); + + return resposne?.data; +}; + +request.post1 = async (url, params, config) => { + console.log(params, qs.stringify(params)); + const resposne = await instance.post( + `${url}`, + params, + config + ); + + return resposne?.data; +}; + +request.put = async (url, params) => { + const resposne = await instance.put( + `${url}`, + params + ); + + return resposne?.data; +}; + +request.delete = async (url, params) => { + const resposne = await instance.delete( + `${url}`, + {params} + ); + + return resposne?.data; +}; + +export default request; diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/canvas_bg.png b/hugegraph-hubble/hubble-fe-new/src/assets/canvas_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..1fef89309bf6c8060be2955b902bff9f7e92bc42 GIT binary patch literal 980 zcmaJ=PiWIn7>}!rF*Yc;gARm8hN58euT8py#nCp2E0|fjf<5}0ytT1QUQAwXI(BiM z1}a`Wi-@q3M-TqNdGzi{5JbEy=v`mhwezqUczN%Ae81oK`~JMW+WNKm*~M9gVdkrA zMxE{p>6)3Q|A%|$=jnEim`$>QH%T8xh$*?ag+SGZZB$3l9o+edRv0F8!D}>0)4r}b z*ymvC!zF%5(G0V)nuO5lA_7{d?FBmfgA`m40RuF56&JKAsdQQze3x+PFtFt3fO}hpvI6^??l$;|LmO)YFM5Q3) zl`B9JM3onoc`=_8L`_gMxd;wFmPU)*O|5QNhq35QXFG(18qfFpeXgJ9aMb2SRizvf zFG)G-k&6cbfk`fim&ObRik-*{iH8G_GQt+_5uK$gf@r|%R~#tCotqiPDoQ4 zJKFaDU44Jz9g{jb(t9j%+!%z2ucH|EB8N6^b14lKYLy5~ zs$;Byot}>ZGRC?SY*9E7n@)ot(#Qsiyt~M?BJ6`<)|z*WmZDWwEmN&fKI3>TBdmL( z7R5YK3s1%HX>b4O_1HuQC_PRlmtH2bj{-XI5uNO{od-AQt1zoZsgZncz5Vt5MLv_c zuV$Z~{`PKeVd^4yHPuq~pUr&|exA+#*?s-EbujZ=%E+hAWS)H3zxRCl(c<#$uUR<@ Y4w%}`?4Y;%1*Y$;YOWhE%eQv_0{v?*=>Px# literal 0 HcmV?d00001 diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_arrow.svg similarity index 53% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_arrow.svg index 1885992f9..84dee3a7a 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_arrow.svg @@ -1,21 +1,4 @@ - - 直线 diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow_selected.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_arrow_selected.svg similarity index 51% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow_selected.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_arrow_selected.svg index e76ff5eb6..d952a47fc 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_arrow_selected.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_arrow_selected.svg @@ -1,21 +1,4 @@ - - 直线 diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_normal.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_biaoge_normal.svg similarity index 67% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_normal.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_biaoge_normal.svg index e0142bec9..9a6b34d23 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_normal.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_biaoge_normal.svg @@ -1,21 +1,4 @@ - - ic_biaoge_normal diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_pressed.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_biaoge_pressed.svg similarity index 65% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_pressed.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_biaoge_pressed.svg index f18dc62af..d1b8162eb 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_biaoge_pressed.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_biaoge_pressed.svg @@ -1,26 +1,9 @@ - - ic_biaoge_pressed Created with Sketch. - + - \ No newline at end of file + diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_done_144.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_done_144.svg similarity index 90% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_done_144.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_done_144.svg index c77858979..fcf9c1197 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_done_144.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_done_144.svg @@ -1,21 +1,4 @@ - - ic_done_144 diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_fail.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_fail.svg similarity index 88% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_fail.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_fail.svg index 419e35458..8b98b1229 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_fail.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_fail.svg @@ -1,21 +1,4 @@ - - ic_fail@2x diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_normal.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_json_normal.svg similarity index 70% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_normal.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_json_normal.svg index d9185d6f1..4ae94c600 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_normal.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_json_normal.svg @@ -1,21 +1,4 @@ - - ic_json_normal diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_pressed.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_json_pressed.svg similarity index 69% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_pressed.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_json_pressed.svg index 0c96d2537..524a37ee0 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_json_pressed.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_json_pressed.svg @@ -1,30 +1,13 @@ - - ic_json_pressed Created with Sketch. - + - \ No newline at end of file + diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading_back.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_loading_back.svg similarity index 89% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading_back.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_loading_back.svg index b31881d3f..79a140049 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading_back.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_loading_back.svg @@ -1,21 +1,4 @@ - - ic_jiance_fail备份 diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading_front.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_loading_front.svg similarity index 74% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading_front.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_loading_front.svg index ea7490c15..d86bc7003 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_loading_front.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_loading_front.svg @@ -1,21 +1,4 @@ - - ic_jiance_fail备份 2 diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_sousuo_empty.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_sousuo_empty.svg similarity index 90% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_sousuo_empty.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_sousuo_empty.svg index fbba91c36..7a7e10804 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_sousuo_empty.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_sousuo_empty.svg @@ -1,21 +1,4 @@ - - ic_sousuo_empty@1x diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/ic_straight.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_straight.svg new file mode 100644 index 000000000..fcead02aa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_straight.svg @@ -0,0 +1,13 @@ + + + + 直线 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/ic_straight_selected.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_straight_selected.svg new file mode 100644 index 000000000..f9eeffb18 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_straight_selected.svg @@ -0,0 +1,13 @@ + + + + 直线 + Created with Sketch. + + + + + + + + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_normal.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_tuzhanshi_normal.svg similarity index 79% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_normal.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_tuzhanshi_normal.svg index 516135c70..feedd69c0 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_normal.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_tuzhanshi_normal.svg @@ -1,21 +1,4 @@ - - ic_tuzhanshi_normal diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_pressed.svg b/hugegraph-hubble/hubble-fe-new/src/assets/ic_tuzhanshi_pressed.svg similarity index 77% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_pressed.svg rename to hugegraph-hubble/hubble-fe-new/src/assets/ic_tuzhanshi_pressed.svg index 9044419cc..14597d1db 100644 --- a/hugegraph-hubble/hubble-fe/src/assets/imgs/ic_tuzhanshi_pressed.svg +++ b/hugegraph-hubble/hubble-fe-new/src/assets/ic_tuzhanshi_pressed.svg @@ -1,29 +1,12 @@ - - ic_tuzhanshi_pressed Created with Sketch. - + - \ No newline at end of file + diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/layout_circular.svg b/hugegraph-hubble/hubble-fe-new/src/assets/layout_circular.svg new file mode 100644 index 000000000..80e74dff0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/layout_circular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/layout_concentric.svg b/hugegraph-hubble/hubble-fe-new/src/assets/layout_concentric.svg new file mode 100644 index 000000000..884a4fbc7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/layout_concentric.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/layout_dagre.svg b/hugegraph-hubble/hubble-fe-new/src/assets/layout_dagre.svg new file mode 100644 index 000000000..804058704 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/layout_dagre.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/layout_force.svg b/hugegraph-hubble/hubble-fe-new/src/assets/layout_force.svg new file mode 100644 index 000000000..ebd60c691 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/layout_force.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/layout_grid.svg b/hugegraph-hubble/hubble-fe-new/src/assets/layout_grid.svg new file mode 100644 index 000000000..ae546d488 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/layout_grid.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/layout_radial.svg b/hugegraph-hubble/hubble-fe-new/src/assets/layout_radial.svg new file mode 100644 index 000000000..12355179a --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/assets/layout_radial.svg @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe/src/assets/imgs/logo.png b/hugegraph-hubble/hubble-fe-new/src/assets/logo.png similarity index 100% rename from hugegraph-hubble/hubble-fe/src/assets/imgs/logo.png rename to hugegraph-hubble/hubble-fe-new/src/assets/logo.png diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/logo_img.png b/hugegraph-hubble/hubble-fe-new/src/assets/logo_img.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c74a41ba63ff09023e6c55e96b11755e14f1f1 GIT binary patch literal 37853 zcmeEtW0xSovTfU%wykN~wrzJ$o71*!+qP}nwryLt=bZO`!~JqsuKG~5R#s&OcEpaz z3YC))g@wX|0ssJj6&Djy0002I`MHE3fPS8+Cce)B0Kj0F2@1-I3ku@P+1VJISsDQV zh=nF5gR3cyq7EM?AqxmV3-L*uNXO_D22ntWfnyOsB1k~^<`~e1Lse-D)#Op)Lsfys z2n!3<)^|-$P0%2nGNI$pMq{MNE$;dVqt62b>YP_HK4w)@N#}TEQb#uR2QIVSV6K&jG-y{Cy!7q#uE@< zan({D3IHnZV}eTtY9b#$z><3B4m8G@|7oY7t~JITUv^|-!mmOs&@$~oJ1e34PzrN= z)VMgJ){;tr=>5(<0OO+d``F>bW_$u6`Y9J4npqhcodAO|qj~J1LJv~#QY;?-Hxo=9 z)WN++6_ZY1v*MudEYa;}1~zI2V-ElTs8*8=ogrH?xnKtFC3jzwWo!d=gs9+aE5AHZ z2Ju)J`e^hKB!hsU$X$ihA!y_soKBSPfvFV3HZKH&mf6Yd$3lr(s!RiOG#(O^I-s42 zjGN(&*!ufxX~oPedMukj-YUY~x?!w$02P?x^aKVDn(?5%XE#9z`w)*x%AlgFsy!2 zR{rX-ARYnt7TEL6sCD9*)4(0^|Dye)v$}{#ENO9HKt0!sG?Lmvdga@`OK@`r8cux` z(H_zCha&1p;(_Q55jgZqsGc4NyMzN6_1DffmM&e#{mu!o21x#&m!#;MfEi&Iu@;dN zf(;=0om!@Gu?4Cxg<1HqR6VE@-_;LMkz^42r^un5A-P82EB|)EPdU!19%f$>Yk1MU zNcX;4cE0OpsKGyLU6Y5=pW;g1yjj1x{aXF{L&6Gb$@($F-{_&w+u8T}+;5^|S0pYV zmVz>eX!NAjxb+N*YrraSI0<%Z6K~Yo5JlX>W6ULkU0?F)mll^im$JWSIo*YP#ojvj zX>4Sw4g&RzAdkadewVgN*}MoJ(ffm7mqSWvT40#~5N|uL9`C~nzHN%2qjkU5r33!` z9Wa$(!_x!^Fq{p*=lwisa)a5Wa}K~ZJNhg9&X7mTjsO5kF2E)TYz7eQ=DQzp1xR!U ztiuN{1*VS=IRu<>x1!ijs>F>Y1wP3KNDgGlcQOb00>qtPgkKB-HkSx9gvKC14ZkUbanJXKfIticF`Ah0cL=~QqWf4Qv0rt7 zzlEKMlt-#ZY!8_108a(13E*RR4w&yC2jwWr!p!rBPJ|XP9!30T$sNGb{EYKoPwX6E zHT;tD!Dl!gnA{*cgPw9|XZT_C?$Ckf`>E(nA_4>TA=Ma2`%n!6)#z2C7WE=;)OCB^ zYP>FpWCl*zkeUO|84;p~*j-q<5OgDx_Yz%jw!(CK@pgb;RDmLMglq6y5d9!*1CaYH z1psqXYNG!}{6+2J>8x5x*kkC4nFPJ&G~fIu>i((iWt_Z&kFF*OfbKI>bb)0YshL6r>`|DcCOip2MeFqX40> zLqVlLu2`aYqT*6YUTj)$Qpu)BuUo5j8?t9K=taU#@`oe|QPV6}A$88S5KF>;%)toj zknT|GaB=KCk(QiSk)Ra4{H64-a#Hz)JbV6KNYpIs2^B|hS43B`SJGCwgc7qntb(*6 zwE}m^S}sRUQJ!%%YCel-rPO7B20ZW|bVfgPjEKgF{)qDk+5LuL*XaF7P39_Nt>>2K zv;D=+1=q8{v&OUK1zs~c<`1Sh<|T^-i;ejK=1Jya^QoncTvwHP?~XH<=G%V>T`Pmy-r;N1Pf_@a98;{us%8trAlp)Ltt6CI;|_h6kX>0k`%?j)$NJ>4*Hso60gv8NZN zTd|%qiB957C{B(~&}!zOMxlCyU!rOwK_F?7LXalNw&;sDJ~U0#S2TI(4c0)_YM3kA zJlf^$4g`drlQl_ym|yB;>US=`MMZ{98m1SrM6y&{ObViSUEH1AF5DZsC%N-HFx>39 zUEaH$Ssi5_dG@>)MmI)}9H&gXCsA4eman4S!`@IoT;3?&hCfk0wqI9YXYc7=@*?aY z(9!0w#~`3%xA5GE#5f_4l~9=K)y*G(#%ubQ_Qv)W_QDHJ2nrEID$e|lFSg9EV_hIu zLeRhi>+|bl3EG5ag`9@_wxX~#e_5z2l_j(!JQ8gXo+C05zKZrhJ49+^Ig@EHYhY_5 z5urDBlTw~|SKD5Jt>v~w+D9GG4qJ{m9%dzuK{P;oB7u>)Pj7P7xONCW1)Z;+rc0$a z8465IV`MbWN-1Ou=ROxBB%o)p_1-gaLT}IDPC-s+pf>aA-?QB9*m1LEwS9NF>VWMi z9=#gHipwr+DYle4m3)+HS;y&oZl)AE>tamHyJQqFpgtHVvL4X0y*_t zqROmbSJxJR*7vO;TW5B+fAS$$YoG-mO^uz8DTiw2xHM3_mE8k(#dS4u#WNnB;9(GT zjnb2O*Sc>lKjN8up8ht%<%wpjHtO2?Ai2k*y3wg|C#a({(;p}F7am7@q=8e@Y7M9( z_8h&ItW366dvj91s2e(58%Lw{eo*X@T?B;!&GW;e+)%mD3avhE4|k`i*tYLeGj~ z?bhzPbOb&4G|1U3*A&wHkPwi-WXZhIW_^A3BGFIOrbYe)q(+idElyiFT}8_GETNx%ONrAUCUsA-}3|sHEJe zYw^8i-k_ni>8$tWJLTU6j%7||;k3+P9uDU#xFt@7CJ$Bj>R!W{z`;YW5;i$d z`t;eZ^rCaxzLlevl<)&K4X&@CBj)%!UI(__`tos&<9ynu=1 zH%TBcV;qn;!jX@M?aST{KHU&`w=1N}e?~<&NZ(_%U$t+t&wqzl4{)0|TnEU%!6F2N zJHuK);K}^od#;>!lOD-`Lr;)+2hdXxb56DYKllG8f&Jg4AJP0T3F0^#Pp+9+fuYxl={ zsuwd$wL&~v9L+Vs4GxB60;e0d9Fp}Bae^fB$F#_e73WJW*5?ep8RbTGdC=lgJ~_bK z=Ml-yk0)&MLh1lHllyL@$XiE=98L0dpPWAff4b{-1C9;9v8lS!{Do(%QU<7DRG`qq z1qqS{-C-|iqw!;4s)m`tD@Z+qeQZ~`ktTCn34_DrFU})u1N!k$HAok}XL!Hlo=Zsp zDzMbt5%5;_tQ6g;F>mbiZoK4R;7>P8kg`Z~%teSq$ewFqmW|x{3oF7WIyny2Ydd?E zrSA%I^5pMUldldFJ0#$bnbU|gf%f;w|8Jz$xtXAM-XII9h<)4S-%*}-UIfq+uR3oCGWxF-CU3~cc-1YIQlpO&hm{Tji$p#@@+0^n$0O7p{vlNEn;1ncY zD^9yO?t66zW$x9JQsw}t&-`TgmdSGJMtlY6$-Oq3Y^P1^W35BMJTcLp`}!#LeXjPM z{pZs%Ctd&s3CVIa&{(}B5`i*GN1g4JKZeuL?iV*8XQd3|Bg^swRI0&|d}x<$q@T)Q z8Y2zq7eB|>fbq}P-;A59t2aF*0e}a@^<{>Rp1oe9G9zS}tvYPJv1OT; z%R`&MR?f>0(3a49Dko6@&R|zlO#lsUeN2jVUyZ{5J;vE*6+P1YonLU2@F|cfGf|&a zMbhg<&1M>a@-DM&?bNJboIS$*1Ke-i5U!kcDY3wJ&Zu8nlhg-NwkAY7;3iaT#-}E4 zlQjc%hl@ELyhj;Qj~Qo2A%lw!G ziB%LS6_dE-Y{pd{rddh;K=h66X^a8XB0BWIBK+b#hBnKkm4u*Ll>v8Vxx7=QsDaT1 zs1CHTah7BWjSVJ2aDwgy&=77$TWiJy>I5}-Cjp}idXTZgW; z56XVhey!Ic5}aX5`kBBtv$Q^G^LTLhv9`4upXN@_!BSdKre5kKc?k-UFg$3p`SemW#Ebv0KnSs z9~*{|Y9yO(v?=XCnl z3-;F}ZR^d)gn`e?y(!JabBuI=mqSK6E73f9O0{OoZss=2bU%2Lz)y&6&P%l^kMr9p zP^J_8g-7If#C}yM!f|&Z6LI95zvUsmQ%~w$DHEk*qe@n4_SWXe@Ug z)abOb0$X00GY6GV3_%I_mo}|kd7YMT#Y%Y}ZVpgDSa5m~U(sJF)5sV+_$d5EvdBIK zg{QTB3&7jK%FVb4>3O+v#Zw2=JwPDQMciLd$K<15EeCygL#f%dzIldCv1UcaDQS?c>kCJt8;uAaZ=pG`MJ1o4jjIg^nN=?g~LfUzIMNbxY2BU`N9R! zUVP`ia;AnUxS;dO!nQ_uN};zEY``8hRxW}rKWiHC8u3IYftAnsX2>7h-uzJp9oikR z&)5sVNon*rbW~E>TsiaO?8QiT2H3n6P^Vh(GbJ?6Y=1v^mZ5BeZ`EIEX=wh#L=srf zOLGqVAf?~XBp)wgvMEIN3UE=6tKoMSuC5=l+%6_Ty!#|$306jDFG#;|us=|4jF2|n z_<i6hRQ!dc{CZpaMH>5gNK-+qXqBtH(BV7Oq4mKWh|VDPeb4XRmU1 zNaV$x16fdueE9ItR;bFnXnb^R8B&t%mkOmNd4i1zC;F=du-oGA-FYiY!uwwX*V#q8 z!#9aPp?r8oBWpB0NM5Yc|0Q+l8t-Y2M&eB4(dE1HtL~avT{P~ZhdI^n*N$$6IqD2G zUb0E-r~v&I$T#{{s#Ac=xpUa*M`8yxBWuk&D+5d@^EP(_FzUwl4cL_SYw%Ig<3lnl zp6HFv{a5=fpX4ALz(q~f=wk9@Z4_F#Mt+`QZmb_lb}~I&NRWUJ`h)P22##; zUPt{sdzVjToCGBLq3sGD@CAjXVL3b@Z~Eq66JYxO-QfV-?I-yL=k%u9F-_E5( z){7QC8|C`j+4fE=+VCv`()JTvr)C>T6D}vf$~=>h!2P3k^A*Ke)_~}j$gqi)eD73w zZwZV}2{C+})a7Ti>Gk``?l)*TQlhYu1!GPb{!%gV#Bg29w|zo~As`g>75pxT+)DBw zd~2;b_{p0ee9e1u*t9L=KV^gDR=Xsn(RbDY4!hfg$0rM4*Km22y3;y-JF;V@a4BK7 zAR;02{}r{$?tfT3Z*qx-WrPLSL+i?-=k`D{;O*bYP$hu@do%7vyXpvc${M)zZ>dF7 zq7N;lA+>#su;C>I1s||gpBf=90556Fh+CanN$RaZo13uFB>iy#&83~}sw(_a`W)9a z*8M;B4;?Pg&mWVz_w(^}&Xxlu8RyyrNC%3zOeWs#Er%zz9piZ~`K`-BRwj2J2h!|p z)bQVw7hcLdZ?c~!v~JJq16)ceTwpJ#&K{q|=Z^5IJ~F>Dad3>_W46-tj?6qmrtT%t zEKFasPfZ^NDZfnb{{@Kq^_MW_0UFRhLJ?|i*JJa^gYVg4{n=yv-U)(KnhZ#M4hxqF zGI8z9EpKYG*zcD0bh#%TFbqfjdK;AUjEW*s_N?)tTbIL|#kM%WP8qN?So4DeTQXq= zBTKQ=czxHyWo~501u%sD_COahb+@5a1wSxVZCJlypIc$8PfwpulPqvpW`Sv0VPc0tmYVPgd{;0r_3t9BAqu>>-DS!EAx0#gYA`npS$|4h)6~d@U>8N zggf4pf-(pL+}{jDQ@e4OrO1~}IeYaoM<709Bb`4rXK#B%f9!euW1o(<5$)>&?54Py z$6C0vCJdW--9JcPQp>BOoS!l``f|ME3Hj&iN_Q~b`@rVgdG$S+B^p$ucg$!G6Lp@S zdy*k7BCTtAAFb>n^+Aq`BcPQAd5JcKi$Ut`7HaELy&M@_e58*5E`Q(u86hVtdBpd6 zZ?{9~YHn|LFY^9A+;`A{7;ANdT?0xrypdcFkVxXN*(%-#{K3lNHvBR0X3!<|b?NiLO^ucSk%5Hds)< z?gM_y``bi%@skdvz4eC~B>D~~)=qqIy^(l-E`Ln&jxT>J8x!GNl;*VBQB}~<{iUsy zP>hF_qF3n84shu;kw7nB@-LY~P^H6Dd9a>dnF8x{)H|QqlRUjp}GmP-iI8_ z(O;c)&(d1G0!Le{1BWpUny{RqL5>($ivv%>V{LM2gExIxnTXNjq*i&`mI*Y;)OLgS+ z@%l1RIEcj)F@(`fZ;4%&DO3xk-Hy4G+StBE%|_Y$?LPjqb+2(C?eGJ-RAXcZj|zHO zk5BvCv+KNcw2Gvm7c#yYR5d+EU7Qjs<=pN%*%W<4(o z{&G|Y3JT+(Uorqx1dN^(Mm1Ido||4A69=lhiX`YOb(0HIO1%YrANXtb`{-|(o5 zcwN8$eg2z4*E|XUfCW9pE;}r`vOoJS*?U~~ySuRTyyQ==M`R9w1h?^8nKZS$XWgWPQc|Psw63ttW@=y6FlU&sWG1N{pBJ{bui1v7%;EjlWYCBC8-T8DA z7Fhzhb8HkX{Ba9k`T{N4UFAEzG{3H@g*8%c_$ow~9D%P1dmmdF{$vv4|v@YrT3dU``#E}JDcI^)7PL|C6U9mq>LpH z^Eab%S%c{|_HDY2VEn(-O}ZTzTxufqWLH0w!Tm*Y^x$jW+x$@p)Ih&^3hS${L?a4M z%<-P~;$BVD*N)Rir+@ucRV*hRo%9;BJjH2k9O z4?cn1C9%r_)b~c{3L~*3trKNx#XWFsr_r-d7qu1bf{^bk3lH*me|C8Mb~wRLZW6iF zDxhux^A{CorMQ0V^kx9WY}NzYse8WC6Q`l?2A7wI&nn@e)9t0jY^%9{m?$62d_+TL zi0>>s;yA^c|Mg?H-ND6c*T57tvfBZ%=03&7$>K~@EGzSG^)HoLn^u=#-ZhFJqP(4S z1U4D|i_&|~rQGBFdGAG?Jr#X&KoWgrvIn4}i=6o^^@DZ(t!m@7siL``MFz`u%q1FG z2xWhekJ~b6`*2ph3X}geT!k!kr{brB)-uVbp2bDxI`yHCM71T1IRLLzjL1}e7A*6S zym=D584?xXyK3c{K5@l zhUcJ`@taSfHw9Ak-UUu3Ikh)S;JM$&Y z&P6k9()LT3?)15|Qv+!TU=MWnk6pd4@;Aq#U_N-oju!gFZ%Q`MpbMauO=DoilO}zp z+gB35kH6I7x-mgzze@4adf_u~zPAKfqr1-Bn6gLB&%fRHwm(Gql538QJv6d9D5AgG zvAgD5(9o=`tKO{QU}p5yQS;^UyD&0NzBIXA)P`K}F4j=UugZ%;l1kG}C-)F@2#+F8 zriF8&MBZW;)B;fN1_D>TXHe&n1^}K{LuFl*L-j}fI?Zov+WXSKjaWa*a4r`*ti5zE z+wNXn_;g=M-}Zpc1P)<>^J=?jqrDgNL*;kI!J0jK?y}IK!C+z-fHu~C$E(CNT(7ff z(s3)@tS!}68`M1LOLyXcc0W$E*SfOPdnSeSvHHlfg}_|8oD!DhN33T@6eRhsMJ`$^ zljiW4G5C_dRAF&j3wr?0n1t{bY`uDh1`83b!&SN%@9M`!*wcYqq|zVs(>)$7)g1iX>6KE>`!XQH|}f%epI1m>6zF zfedkrirygNb}4=*bBlPs2?FA0Q7KRVHP10*gXU9JzG(2xn@2d0(sFEMImMQ#96%wj zRefTtkZ1IV-HT;5UkVnA@iz)(7%~;kATqJ0fOT$U3gH0!H=UzxKDyIc%w2@{9DRTb z7x?+Ly^n!`)j04&3RkA~1l#ZkcMI`0=&=vLi zGH?mbh#f3Yf2JC~tVt?}D?*U#$Q1^wL>eO8JVIeUI-d!C-2Iv0(CEWr!wClDU0L4H(MH9w8xMh7(Gw0U!EM>DJt%+67v23%jy56v9k% zSmiIU^G%7ECuBSrk9?Q&oGa!4G-t+OLB8#HnD0YzgjF@z|a2(;Wz3)abX&88)ZR;Hk@Pw zp}^f>OV-ayb!BxdkkiE}*~S-J$4HGMaNc5P;g?sXuOfwP1PJKo7#X<&Z0G*UQ8v1E z=#(C<`1E<0(li1l-YFwM($S3|n*Kd`9jN&N2H{|g;EO4xXu%PvlWI$Q5E4I@6c#jp znUvJC|3@|ctgDcQ7=xt`Iuy|F^lP^GtS;fVoi`gUl`PJPUNhUp2=n|DXKPyjWdWg9 z7K?J_S?87`)5xvNY8!P+A}}6tbY{qqQZfaqj4y(>>B&7u5E~|;A_fa&zU4iz9=OP)eWXbHblL5lY8S|g+J7X+cHgt;L`u<@b}6-YtWYY@ zcQp<&FWHbGQx!5kip+Kc06T11d?<`o_&!(%DE*(2rq4ztTj(=8$WQRwPwL^ju%vT( zv7e!0hu`KgsO7_NnSLbn3cdcwljxs3kk%fXCYo$00IYigFph{+EfSEDSu>p3L z2Q5z0UuNDpLVp%wb7qeZK;zby1S%XTwk08yEODRxng{5gXZ)fPEyL_JCrs*fkGR72 zFC@2+CPJyBXgm2GrL>GRCHh!f&@7#h(haUeMBf&b*NV%k>jEjt2p#-bA#9vav*32l z5Lb0r<0U{fb`B@(=f@dKAZlA}9bIZ{VtUZ^_^r+e)UU)Qs>-vU36ZfsW*ccX7LHO& z^ENQ#Un|Gc-&1L|B$9b+P&(Ha5%qX_ZB#jkh{#_U8hjUScQ2{~bWQ~*+gf3N?pb${ zWK}B{1?+GO&~@lz4I21|CWAU^YT~y3?!dJdTcb8Njb)2Ii}aa55hq*Ig&_&sIeu9V7Gd z@_`lP5s4r1lLEv1PR$dS#s1jmwOPY>fyQT3sk-Vu!aa`K2-hP8(JO@Qza1$pEgPo) zM~Rx-QGp`AJS64J0%}cjplJQq*=eBCG{FJt{E#~0*=8aqN^GLMsVNil<{;18<+Zkt zWRs;mK${w6e(KLPhoBh(psR68^aluKgw1!`BAp+@zT50Dlh;}9Z5-3e}NIKHfbN5TYIMFwW3k;2OyKA5^P-12RfQEz?+Kt z>24R;nK(>a9)85yuvxPt+!9KEw-x6N*XJFGDwc3zO`Riic8zl-xDQ zKSMEC{926w-BHSqMq6(G%y&Z+0RN8`GI@0nvsa_se*Tz>bNY=|gN^(mbt+9`v1C2? zo+7KQ&;GISvFT&EA3#>@&xePQB%##2}LPrqsWY9@Z@kWn~JcR zkmO-AGZp|1*hvz1vc&ZH6y0y3g@FU$_zx{Gqad7!xX?z1xCqE@Jfh7s6GMB7GeA%K zwL1lAkmf;TZDn)*PMn43eoKWkU;H%{zD48~-#Z_Y6TN9kPV%sXqZpYLA%kglw%Bob zZiwdVfoxfdlN=PnV1 zmC;vE)4*)o8-L|Mgs;K*0cCs&%;;)@uTLCT0UkGlCeY_|io0Y2bnm^)_wQvnvDR8b zF2HOL8f50YOPMwgqhjaT(rWT$48e_9#hr7kZD+pI5ipF%Fn{w4{u~0`GHkQe>95*1 zl1qJizOsnqnlQsC9u>VaRb30g#827W0@C`TB>#9eicJnJIqqAj8con*lNmR_{P1^Elh-Ald0@h?wKRenmXRrVJ^0xXdr**RNi0Hp zbGn*}fm1rF$$gTvDr91mTGTchX?`h|k*RDeLFJeJnO$tJ3aEL4A=wZ!YKh*Hna2k6 zDv^6Mj2Kf|=e3Ud&mBIJg2;RPX;`o}hi9*%-5?A)l@En-ZLANBbG0hqdvEfT+CcIL z!^efCvdfRJ{061MXMOS_u*fK&C)G95bSLx_GCHWAvPs=#DKT8~_91XzR3-~5p zlIS!LV-ki4gH(&U4QJynnf>SG3awlgJuU?q4$RnApk;r1|GngVyx#)pyfFhqzIRFU zx9r~so5A>R@}X}P84+=3?B#ZOCCF62@L|_>uMm{I*DF$V4$9RBTJMvfmqZOT5wwp% zSKo|SZq?b9;~i@Y>b2GfMg}4Y6;@m53_TgV-tS;L@=R>u^lMA2PwV)9kv(4He%`T{ z6JQq4V5H7=JP{5X_*Ae7zy-N>2xmJ);(NUh-Zr zJTW2<3K$rEo|FDem78X4f4|}$|BOdUgVWZX*UaI<<+m{%st_pUrcKu9B5+(Yaz7Aj zl*vihUBkq%@Q_VHaq3YGz^bG+RF~#oXQ2q67W|frd^(^mN_hpyeGRQr5pnLSn{tsv zC^YH~=z@1Er2htt$3KpJ@~V|sO}Ihr(fOa(a_>^Ks)Hjv)Rq&ZY7{xfqWr>w#oc>? zLQD>j>sD{WxKlgp+Peu_hBn@)`Rox9WqV}`(cZN1y2p*grcU|6-r~3($=Dvcr#vzm z?(}t$bk-4r`T!4Y5d(Yd0FkMA9>(^Ah>@CJOra|(P{KmG;W!@bG;{h{Sw{IfEF6;} z0l}d4o{Z2BE0fR_ntW(fXwn(3y)YX=;v`||;*A)p9O9jc3u}pPWM&8@wQTW1Awnj@ zr8SqpJc@kYW|#j|aG7=y1bP%{qK!*+tVpwsOLe9sAJa zv*M8yXr|op)>FkwXwgl{if>RTQ6oea9e?Wlm*gG`qkOYuCh99Onh}>W#%qDb zkb&r+p_1XJ2N%_xS8UYm(m3J#9q?7Jr&m=yAr|z>MIZ>!(z(1s_?`-Jn=4~g(>~_A zu|o9_RG5D{ z3Y$R!Qbpb7=1smQbU&jQB?J4m&V({MOYCDBoN(Zgme=WU2-4bb@EJJRu__u$W8209 zX~@9y@AI;w+~aS>SuV=*4#v zrqntGLI3D46i%)JuZklp=ercoT_~kRV{*cuWr9b-1zQ=-oD>ozY{|{tu50}3(rd78 zH$ub5PZ8(eox3p2^gl}ltM=F8J`dsnTtB>7>&1Rh5kq@K*3SIh#5GcZ6r%n$d`pnmg zz2Nz(By%<;_;u7!Mi?H*#|E=`U}qoh=Nrth<|A=moZjY04X4?v>tRka^d0)N#6>*7 zDUfNZw%02Yii>N1iTSL@0K0QAiv#_I@3&@I5yv!ihKoQo!0$f@%2``_oBqE+C44B#3-=f}$oi#O`i8nR7(c8RffBi6gse;18OXNgaK%?!??+TCPuWzb^6v$l` z&TSg7Je1%g`h=JUuQPN4cLRs&|0!5ZjXB1^_y)zsr^9!F8 zsU0!^2^k>!(;1CtWxa2GWInS!dtFF5_&8X+I>;8wn%nGRaZNU@JvxmO-h5N0aLY%p zdj-%drh~V3?q8ZL!8%=u28R>vcuJ>#!4>5|Aw<<7qpQk|5+aU&p!+#ud znwu{nH$dA{j=Ueux+X`Md0o_ukI)vjkfK9B8X06&J(T!qd(MOhdw1KCdZoI~xmeT~ zTszSA3HP%9;Sr%6_mhJtn@7G=K<_&~X2v9QWS-30rglNdPCK|2`3WgW27^8;C((|9 zFYJ+-(jbuIAofu5O-xzO^D=hmaEUU(P0MTIuV-YeqkGL|b=6yQy{KUTZ|{9ylu_{ch57@7pQr&X zPU1aaN*XtH^481ez0Hy@n(921_7JKR{oduX%F#0j*#T%G8(~m^jC#g<1&rc=;s9s zKlte4UYWFMC+Pc{%Yw}@j#`)L(@8W~qfYh+N&?Qn96x#ZLSZjig|*^2FbOJ)#^OA(_0>Yx%^_&wJhbGA zYIPeY>=eE{Uyj8NhTA)h>iw%8}eNvN~FO$ke9ajxqpNx{o6wWX^s9vNo(1FcQ z#CrR1Wp3W{Fbl2SAqy^gitz3nOA?5Lg>L&+Um+0JxLrl_LqJuN7r}-SKx6ZBKI!J9 znEDRKyXe1-rgZkewNP3gCuU{|9`|rdk_5rqo7h21 zkA2l&?Auy5-o=^Fz(iJ19PHIWLIF~&@hA7I$6v&M@r;C9>nt&tqGG5tzE(oW-BtDs z56l#J9+hDBN01lg8W3f(IzN@kouSywwxC{jgFiHy7I9J$gE$nTTzMb`qv%84F;*(r z+l6E{-q7J6_Z=j1QVpTRqhf>GOgq}oHqf)v@;&_KX-g>T=}f8Ue(be zab+@S%dR(jMNbo~L=c_XxGFAShXKpaKlbnEk2Ppg3=x;DQH8w0pgaFj@ob)-s>bc#5xVl}W?iUK9OLVi zxgGyTj$lyE{By%F=TDTF4Jt6U@`z1Nn_?!(Ej-#@?WV!i2)obog7}9V^h`6SEq6*@Y ziS6gM^1rg8vSngn0wjqxHm9;4-QPKlloFz12xCYD0h63E+!euVGlPWyQ!#+dXum&_dw*%49c@`Q7a6D z|24$5W)yo#s;3z)%F`aDu(Z$pscPAu>sE0Z!%slj;3@gsaxFwe<76ATA)d)27uc#1 z=ixzn==eA~u#2BS>)NV?3?gHkm*sqMV>M3!&+Yz>3FmW(w=76p+k;g_lRxq% zndRAB#r;$ArxoKhHSrDzR>==IeLOdqV;=Y8|fH`6r72-}~4Ucjaj*j+BLn#pg2RH-x z+LN3goVG9=YE~tfRq;3@N*4@$ErQyVqIM-{W~a-y_{T~6*w;P<&v36+D|7*>s7l#D z6c6*@Kml;()8q??ESQ@^!SDxMq)TNfhW{OnMhC)1f@xLax*eNGwm_@&Mo{Gw_n_OU zo)CR@ZtLPCj*WG%_QH1XH8H!s3;A>)%=4bvs0&O#XF=)J;O2Ea z887MfN9)_oxp_W@W=vyNt>GcAqG4IeiH9YriQC4!|Gu4v1|0l&Z!Kb$_VmnMDS~x zr4Lp7Ky5_AeMfCvJ>l@%2yje=Y}H%t{q6neH0R~<^=9z;lubH(gt!bMPAs7@C3IKb zuUIVtKa4MQS_B)HVNq1f;;);|q^oBIwh+IFG-`BRisC>~L@u#I6pDwual|M?X&{NL zKZ7cX3`C#E$`{Ya5w8XBSE20<0{B)%bZ8WH`rmW%(-;c!`;xO%swaPcOqEamYLi90 zj_ATaj9io=WJcFk^e(CoI!XIoxcg%nGPz-oVEsVIPR7-Qhg~JTo`?`LEC%u#{fkeR}zwPRG$GvUHBC2-aQ6_ z1MVQNm+JS|bmXV#qMM?NrpX|;tRj!y!8a9r@_Zjb(7Xe1q_L7s@MiJtR(9N%x~*Hn z^A?(?!_z*Y5zh3+TPtXeFjBL7dE9s|z_Sv`&ktZlgZgconmD?QsF;ihZ(`u@g;gk| zLub+QbCQK=sMeQXaTI(|ws`=8?HUGq;9(=@xZ&Zb2 z@t##AxFIFT19Xnmfn$bB+rQH%gM>^DuP%j-ZKG-^{FJF-QM`5n0$XIYr{*qvA}-gq z1;M##_?`21P(G9+H(dN`s5XbSi{wOgu4=BdC+9ng+G>OW4rni0HP1XMAb`4A$_7SO zvejqkpK3a^1ELLp#-J`5I*5b+8!8oPI_x2=@HE#G4tL4xqxN-@HPU#$XqrMzTQTzI z$QGniw=^zXj+TU!^A=Bf2NY?WNnIC>8|j&87dl9Lq25l*yE={*{uU@zm!yl^R_(Ee zm5`&hYYv6(?@i_3pNcdN<5oPHlG5Q_sUNYBn+tT=83p5h)tF4*U% zzZyTl3nMY5!MDEk3_DWX+@LrGI*IxEdqSlZ){i{k*7=-Y&ze84!!qF3 zO#43o|3Co0x@&(W)YjmK}KyVVI`Ees44xP^65#)WB_D&{jZ7lXx;ODssFD!QzcS(58GH<6Gn z@=Y=o$CsCPRZ?&@q6>#bL__B}XB~`gQkSJv{k9qs@PPhB?EprLZADqYs~o3;7lWf; z`|p1myyJ04;RCe9v`c`_VVW$KHr+(EWnz7qD%DdXkRHvH@loE8@0$DHwDw6;)Vx}| z8p&Gh%R&cN?rJscc9Msget%ru-JLX!bXXCM+kw`+PP4krs^~zRBLVx_MlEN^KRb2) z*QLqzq#Eq)C0{+M9voELElg=XmC55rh|^?=4HJoqa0sh(%u`yx6B3W9tOI+tjziDjKX-o z(t1?yvJ&Y$jt?wX0v^zBE`MN3zCiQzG#kDhp1d9${Wd&$hpwFtAYL$h=0g;YRS-wT(CrqjF)JRdDuqdXd99Bu~Q}FPHeTc4)!YFJ*_?1ufjcD z$l~@65Nf>*9fJch#UiWi2hpovMlb$>_h4OQCNE2-xQm{?sGG~UsQpn~EL&jDo2L3u z#gBrrr84nSfQipt75Mh5ev_2kb4(k-F0uj!t4pKDz%Gu<96vy~X1qzF{+?TvfCuy& ziW8lh&vSqquKdOD_?NRcKlk3g7@fd0pu%80&1|~QCv5?4zMHa;eAz?SjEV`24J$nk zM1xlqOQ}0$|MO|y*;Q6R4(ipQ-HIPPs6FZHw?|amBz#tg?z{-h^YDd$ttV&P<|r1z z^EfUfU?{*41&p=r?-u~Z+j;a!4R}HIPZ%2F?$XaaJMxK<#06NJ| zLXsiS8IIeqgLr6}fQ99ny0T{~2P&(pf<9if_S-M#>ZB;$uGWnF5A&4aA|BU4-h?e= zxMg(;xwR$nfPTZKM|~TY8S|lE3=V%jd-JUS{^j`OI3Lx;Wudh@oU$y}NME`FK?KZU zFrLB!Es#EL?Eai{HmaE86WQ5B4iNouqR24{4-FgL*WSB-oxXmP_IS{{=zC({al_5s z3xab$C|(rVJ0`G0S?UsN-)2&sjYQrs{V%xuZI zRU7Hd1LQ~8LiI;ZE?%;6WV{%V#3g$zVj;^`E9$hEyX2DllCodvUh=IoPLPDvI(`KK zZ^I0N{9Vx>YQ{$)#$;ZoLvyzW(D5)Fl?BH57`ns^r81FeTG1!jiVy3m8wb`^%dqBT-i=u{Meb~>&Z-yt&dT*cg-~B#5fg5Q@tORijU!4xXL{C@6 zVLCV|Gm6-WYZx*f)I02NC6{Ye+x1aUAJ`7=c9Okr+-zYbQm8l(7qv4CzgC);B7>O- z4?xF%FX=zrOR!n2SEo$WrO0=5NY)8taEy~+Ak7*~SYjD@1D zi+axTa!tdOqB1EkwqylS?sG)*9hGn;lC_8q<%k(Bc3g*(!9jJDHej3lwtNYAK)-ey zFc8Wp5Cfr%f<8NY!zd^#>NYXPy$v*_Bqy%-%a-wFGgFR{cz3a;N8T#ei2bRCRg-mZe%FRrNXzW~$*3HZ*rGBRD8+t9#8^QWA-TfL#Tt6z~Pv|~p z*|-wK_!40H5`d2Hm&!5#ojwLYXPyyLHv#mlFlVValKjGnKWMiy^Ix38$QpQ^X0+Ri zn>Bnu-K}gt(;67?G}{&G#hidqnw<_N;hU1Fz*(lD%jHL>%6cDgZB12HmR8QsRN)>j z$#@bgi=8{r4Jbw zE^>+UaMY;2*g=wbE$lR`hJFiU%r|eFgfWXoWp}^v^>@Xj$W5Fd4TpUT=&&w0Ctx11 z!q5jNz^VL_iO-P#syG$9Qs;|3_{c1{L>-eH{) zB@10`kswyAsvgj<+8|6MN#R>E=5UU!*R2#wh*#AbS@WxY=TBz?l@za!vw_Z|Fv5oy-VX%O>5sN=lQxqnvof%R-52wW7(m`eL99~K zdqBTZYgp1lraJ@WaOkNn7|y?QD7Qs(xd0h_+m1@{&70y{U8W>1VY7fP6*5;t96vPq{UGyX{#gCYDoCM)ydPQ@xo)M`}@9<;vwZWo^IaCkNz7InMO9;!NX zzV7-f?Mp;^m-kAeV~{TX>2Q9d#WnI>X6MuXV+nXb|6>_h1zG%Xu}(!l8=;}IZY9t1 zmtoi+=X)uJ(CG9i#RSfWZv{$q&jp}7!l5&6$@+6B(bW(#9S)t9E*Q_e;WpRkuv)Z} z{>2SEuE>@*9D1oDVon5?-l**FwHO`kjRvnyYsbMDFD`cdR2;eEzH45MOLuShp`~0H zw3m-p=GBTZzK~}dUh7q^o(J?RwGIz17K)ZD#J2~=9pXdrKA&6ilIhkmI?77O7>cnN za)FZoxb-Vl;PxVsp;#_Lj6jbtFc@0)_-6P!@09oqVN5iphk$ai%N^Zbfo~^Y1DZxWzbB8jY11Mi_zM zVDEyJ%Z;)T?bc!;lnYD_$u4^^^dr@vrj2@Kx6^oV(0=-)d#Z=;hFM?bvR)Amc4e4j zJ2xIl3+P5>V1ex0DTURkwFmU8wuRG;Jr`e!i_THO< z>FZ1HB4%N!DH#l*@*Hrr8rS_sRzVh!+X)uh#`?eDkt zht29)lofViBl}=1r&P<%)xHMuUa)yMUv_Iq{vOb;)Cvwb*<*9fv&%h8fb&^NZ86;Y zbNCh@;~%horTgwGk}by4Iu)C{6#yYOQ}(8S zP6CpU`{Q(T!mGMLw8@Hev0-*7^ZpZ6OpsVVk}SU!1V@TQ zCysI6s7!n1aG)l-rdjSDgCAPKezUD$sqggRkowvuP~Hpo<5{@VEPdjCC;<=Xe<-49 z1fE@>9Lo+nBV8=j?)MEA(2&i4gqvl-(YWN6j?C8c}b)aa<^2F zG{qh7RomqL;=!}o`H<-e3xZG1SjZ@g%X&4YU#09TSm1jTjcq-7HE?z;>!JH?sS@yj zeiiYH8j32GgmELOHsdOo&JYmB9ryVF)1$C4=Y|=YtUz4_(wE_I5!?mGbFES^-7+p; zE(ZV+WuIhIQpV%>>KVT=5{|_xt{09bz1NeI_eH-*Of5n~2hm|+mg9-xD$nj+$Kjbo zv0$}ZX7~!E`)#Qb@PK|L@uPa6gMgt8#=~Nk(utVwexDZLuIm8Pfe-BG@U~bBm#`); z$P3tFlAp2Ure@B!9U7%uyXv=s(`Dy+9KC}Ji&_pSPBe?Px>4sVwadLl5+7r3`lEjOe2cL~oV>bdyncaOtzi?!XkdqDr=_Lr9x z4Lyu-MBb^?yA?cBB_PrKf&SwpzBmSD;I*koNjs^E`&?O~ehHi9TbN+QvQ1`Gm<-3U z7>|R%4wnD8M3>^t4<$fX0h*^J>OZr|#cSUxZ1gW!sfv1Tm#M;SGQPRSI%5f0nW-xy z8Nxwr-Dayy-Q}w>WV!Gdbq83#&u`YPllc`Y>;e4>Lb4pM)zHDy8ox>uGlF+NZ!x(D z+6m_q!uISW4FLWACx|*RQ5cAkqEzRAE`D65iYeusmiA)-Qg9NJ>e$U4&W?b^Ak$DT z2G%7PMtvS}9%Tsu=Vg;+UEht)UJQ;{LYB#8iO>x4wPa^O1tmH<9uiARr*xjwRFmbuF3_q8!^_2=MVurctWdOQ0;k*salqy3X!e*aygTVB;3=UgB z$5G}TzY3cz(A%h;2lQ)55xNjHxs}u(H+P0CGg)Sb>3~IqN#ZVu7YBC`F18n`Kd7}I z)H?gMb{l2ri)Qj%qso_}GWv%G4IeT{&2g&6rBEVbsWQX2&jm@*xg@G> zI7H9D<_fE?3gbHb7+czgYOit~eFI#hbwoo~j7(MzYMoIwIU1iuQKa>qOob8D;J;M> z(SR_m0m^r(O@?IAgRW8NTa5~!V}F7__)%(3@yM=S0dFA>pxhDBxlz5G-a?OZjQwvR zowVB9mr?iLERwFb-YFR z79LJ`NCYaL2yZj%?Q#EZUja2)~YQA_kW{ZatvokW^ zrRcx6SNbcYWIIueGGSUW)}=x>f8KxptoQEC__UXg`A%YjuB|C}F8>%El`f5ctj=MV z3%Bgk6>?htD7*-95WuvcYG5N^OZ>E=KK0od9~lys}DZ(I96v>)!(T3?*}4NJvs06L4A%7|rV zMmeV0MpQE4&~Ib2hJWOd73w%s@5f{zIo|Ik`ZgaP@aBN{^WJ-Y5a_J@haM^>)|5v& zAN~ub+v2gphfwN~iokcx0wnia;``5yiqq`W85@B{oOF{KfXtuC ze{e=VGoyfq_)%k*rHj~@bs{(`(_zX*W%Cab`ov|67&65lf^xswVgUAs_Jglm`;Qts zbR?g+>26O8NZCpG!_1sa^wC5QGMut2p&xE(Dv6UDNC8KGn40>?FfK};(X|MAx7Cx% z$@Elc7O^Q^)G)4 z?z+ZbkiH-~h5&p!#t?u9)z(h6;o0*q5a?~*>H+=Q(zGutHtESur6H>+ma>Ksjx64c z&-yy6pjF!>MRAp=S9-a5N9;ej1!UnKn3h^xecagnOXtxKorkdYjK^NPthaXqXq9Tw z&EJpAJJjb=vF!a_*ffaSuR@VgFV($??$i+Vof}UebC?z^6ptr^SMcWj!{>v;H>1-L z>--6nUj%5^zq#kYF35+`kx(w$ihX-+uo@}NYR`yhj2jI2K!$esj$Dn>ZF?z} zi4kipdsH@_W?pr1J!17#oTxIG#v6_0gG?8{2m+t4tU!j1FJH2u3^eW7_vE|Q!H=Cs zU$+jJ>winC@aGHi@vGn+WHB_$*~Gja=oce11km01AjMw9u*I-TZ1IeM!2;mTFS&r2 z%Sd8O7KLv)o#^)?-KvGVHC2zVBTbj@)%IjZ1EQFZitKRQe=$7%srT-MMe}}88~@1l#-`HFfjzpHiLS1Z@*#b$NFs_K-U;{B*HVeI@rD2eF%PwXBNZ6pC7t_6&7NF zo5nH{8vXYHfUX;HRKJ_&l#Z8{!pk`{%h7o7YIqEw|2jNkI_R)qynvorCimN3=0dk6 z?ItIrGthyoc@GO=yYurpEeK`Pf~Xz1hl6inB&l0%V#sT!6m42H*Rei#^P;SyByLn@ z-gd}z)Dw`sQ*AUVwWRl!0n%YU$;8JLv)Os?dF$ovx4Q*^7eI6Ro#2`H!LX@4tnYl) z*!xrG;kV5LMnO@9X1&6Vig+70fv{;|2BM+sqmh0+HhWUw>m)rz#Xq=3z!N41GFq#5 z6IJi)y}EwXASV&gEpD_0Xf8BMk@m6)1}(q!4xjbkLAl`Zob%X*3U59g2X(pAj0@$k zJu$|M0{cNhk1J*`_FGMmeiJu@CQqz*<6<~e9M$pTI~C7dn^@hotdnnvFKRZcrw16} z0>_m&f#z;T)rXbNSw1|=MsTvs6d#otI$$PDj9VdIV8KDTwS~f z>TgjN806737NcE(K9;H!SH4{+GzrqA(CD!JGOWT9-hzFbwozFgT z<>BA7daiSQmW&tcEV>J27fL;Fn;WL((gh5x9(YTPuG7i8ihC}g`do(e>4fLy#xVPQG zp7J8PQlAT(g+YsWa@zF@7w(|`_KFB&wt?n?f}n<&i(u_;bf_SCAnwtbn@LcaS(?o5 zxaMC`q0!29t_z_2a6EWDI(t1hc|SgTJMJ+rv;@kHjP*_Fl<7Cs6r0ZrI?vYCQ1(Kj z)1A|%g62ZRFn^ftejarb0@6O#^*O`!Q0I8RV5G;BEi2Wu9?);6IruooF*px*Gf{9a z?Yz;hHufg%N9hn>efaR2lv&BEj*@QSjrX6IAJj WZIQp4qz%muA9aa?yhWx9=2 z@Z7>oqGQHF`{mE4`uR{#O64r>rBkv$v0a=2Jm5zCplJ9x96tv=%0o$&EW@bW{?UCi0P6*7uYpTdZ@s z)&um927uo5fWA`g=>h%rn*(AUVi6J+-{pCuKxN}I-0>|Siwp314xo!k94`qD1Ym5U z7&CL3i?~V~>N(W;F$O0C{ko?ySfsZR_QN4^C}FJf@woy<18Ly0*d5A>qq0Z^hXSb9 zd0`o#Qns%w?95eMDsA0w>m9&EPg zd2|2P)Qr%f>ZW{`@p3CvGB ziN#3vqU3_&FO<5CB36tN+1)u!ZhikyDIQd6%|pwe(QdV|TNC4!CVlK5x5@g}d;Lo8 z0sZ#dj7MA+aABnAW2!bUIk3(PfBPBVYKou{fQXumpR8AX{gU56pXBCIjPnBlDqe2~ z>w?Y>(8a5X6oMNAVU;D$6w;~fa_bjw6@ov~0l15x&^8+6XlAG~LJ(Wy>i zwOAjou(=rdm z2RmI$==_^Ym&CDy?I}=E7S6GAo6Xo(%0`@?wX(tpT?|&aPt1S905>lV+-LW$@n7oC z6N^D@JFY#db@1WroW#vO%+|PS8&-4===a^Ayztf%?!NQAZhk=Xq+~2q6!T}NOw$iDLw}U_JB5`SzwjGR7bUV=z0jNw)2@16qbGw?#13nWD;c0 z8M+6s-tyfnb`eY_^eF1LW?8SQgGSg&f+UiZ-RAz1BZi__r$DMWeSA_D<2-}x8t3Vd zUp6_(P{}9nvtciv42m4sM=NLi)1~0{GnlrWj6Im0k=o6}7ldgqxSCR9P>)%@(z~Gf zOQHht7vitmfv6zDo{Otd26(<|?0(-m*thmq>sFP`FRusm&2Qry)DR%T>3NTNp~Ld| zS^4)<{eEJSK%tvgW5FjO7r-hZN#ut*dMTIlV?r}P0~kalzM%8Y?z0vYpgB%K0Q4k6 z-Igp+wDU~88|r_Z8XcA27Qw@MP*0@KaCgcdJEberB_NLd_^8NxS=!Ghr<3tnIyz0q zEFd>3CaB~R*D^76z8~D+r@$?9!T>Bu&#CBEC7)yZG$VU;T9sLaka;&4>XaZ9bhL-LTWu2Zytjqaq5SNGY<$&Fzpgcdwn+`*i z5j7w+hso2ugYj7b$VA@^cy4&;?Nd*og{OPf^5YL22DX zT&U@q9Jq>$59c^x*~M>~`%GOH&nrcRK0DPv zo#|6-&#fn001wo(B=~f|(;@a0)!f^^SnS0!p9;J9E}xu>(X=1DeAh}IOJSV}W*D*XA=4wi zZ$J3Py8L9K|LPCvucT1#qfj2u??cM#k%t}6WFQo)^WXaVSr1ItZwCe^1}stJa7|uw zF?je`g%(db_;zPL6($Xr=m&{$-|SYDTjA*8rJ+g=;_zV<{*Neu{=u&d&>04$1$;^* z+Bd%l&0WG^wd~y)i_R8Lr#Z^EfQ*K^L(q%-Y}F(noye?ALao~i67|w1_qekXT|%zQ zAUP~m70ZW1R)Fakq!v05_dYhCOR22pp@@ch+ZE;jbQE)b59(d!GxPDWnq~H-LIS>R z{9`bMC8mHfBNUVK-_OebJ}LkExP09=7`I?eh&?#KHbuEP*v%#9U~zs(;8L7Rhl?>6 z!}DnK1TEx>5u_MdFb@-28nrhDY8c;SEEYXIKvh?`p~ucf(APn^Jrpb!IF`*KFGpm- z&DOBRUf{YML)g#DEFoI}ckiq$_Rhu9O8BEEB}sS}*3yG}VdzyR96&cZ(oi2ShHsva%Vn$1@(wd>$7&KRyo7H4 z^GW&asQj&`$GO;sL!h6d`J!ChtMB%U=LvI??L&aJr?0zn$$*361goS(xBy^+VweO_ z8E2(plorevtaQjM>5HyB#b_yuK)rMe_L77oAln?r-8G3~W6BkW{}M@Vx2d~|*(%$e zO=EEttA!hVzv%qr9`kPkS*4KjA@AV3jc$iQGILQf|o;~ha{S4 z?6WG&fSLM&=(b*h%mV!Ualq_=e2(T^aBBX=f}9^YNVa{4OW^#{EJTuEIz!1ph`Ei^ z)8ohlxvX-<$bjuiW|5cmSLz`$kUj>l3~*X_7Gm}gHZ9+^AFyWDezlDe`m&1W^Szb? zJfL4oT$>gdG>11o9LrqL|2iz6pXgssb-zGIQ=R$Hr=Z?!TZAqb7CiU>nJ%4Nyla-y z4gXr*mLW%3dcsr_CT21dN$7Kday~YMxE2juAY5Qd4xCEvPTErz?kyB^Sy12V=>qjL zh;>1CEQtu_O*bcw`5|X*3ij%vs9bbtblE6yU~L(rC^jJ{@Y80CC-+VhUg{sw%#~_H z)oN0~jUuEuX#TXhyH{!9LT;%=^O;{m0v^z>A*@Y`YISqPLd@{yznqr;Ix7Emq+bp6 zaVDe$27h8WLWMtrHV(Z$ib$7$?b6}RB8|bjWGZ@w^fOyEBj|x{H9Vh=@=pPl8hi|XLqMsPd1eID=AwV7rly6$w75dX!1$d<@iPudlh z1M$8ow)1Wymh>(6v)KaLovkvTB2fG+LiD)Secb56n?GspV$*`}PmkvJ(;~N(iwE@E zlH^*YV=WY+&aqJZwWt4nTs}L|Z+aR7LABKO_ikVDY z%-PY+|GH%5e$j4$LeYFx9IK{vdkg)NYksCMGM5K{v?Y_8P$@ewIxUHXb-CzLJV#(x zmDvq)oimoOA+q%laDM2@A$xZh0ZGm!={k<7faD}bmiC{)=!M~2mMYB|4=8g<)TQA9 zLg~-blMA=LiR@;DByk~G0^B~=@SX^ivxY79=7d@J(7VRHb>ZK2f*#QCTEeTCK9hq6 zg*ln%7rpYIN02T0bzi?t4U1kk;iP9;>=cd`;RPU=AG!eh#gneO^Ee+pys=2;$yz*O zC#t&UTLR<;mP#>8=VUOj9TrzD9@}aV!2-K0t-W80Ayu`o@9Ho`_Gz8mIeYswmJM^8 zyI+c9<4hykVn`G=hsrkW;L~*}5d8e;At0-*o-T!?;}LrptFYUfr|H{d+=*M*&&w>L zkOGL`b`)?-%klI4sNTha;?w3HUe5RHG6d@CaSIvyB<@iH9?p^Np=ld}ZwIC7(?^V5xc zWCVA53%O&ILubjX+lkhEQXp@%b(~j%t%WWMJO`B0A-R&dM5JhhW@)-^VwS-l{B;GK zr!xyk8Zyp6og&=!*JLg7<{n!4!&(QcbGVmPbISh*_4Jn)B;WykK^R*Q#NK>r)-u#T zpO*hPE}7i_%g8*4gSzl6Q}kH_Nq}(u*;* zW!)9Ha@MMCCpBmm5F9{%)Py=`{1fYb4+tW!_1%2?t#8}iq~zF#j97sv6^`ZEvCQws z57!QBP1wXNLS9UE0mbCP;-L$>dn{s{-+Afe;$7#Ft{M6;5i;eZ#c8{C9q<~{F;#*t z9D1hl4UmbNE>?`du@un`raE}D2d>xvIN;|X)}|)iv{BnzAC8^0DoB(rZH&!|g zE36HhRCg=&ol3o%)EaT671zK`7E@;4KUgoAP8ry2IsiJup+Gh+e{tXrn&a%Zm*eSo zgkwnDwR1QrQ@UQ6)n)ORz1%v>)#ZI@KffrE?SCn=M6%@$Fk)dj^XfsZ^`P2*QkMm6 z0d!VCtS6OvT&4TDl%PLcI|+C|U%Mu|VS(kvwsVM1Q-d`NWDDx~-}>etP%XRS#vBeV zWMF~h{LJE^3oo9T$Gdd$(&0SXwE`bagp&eVqEoZT2HsPmuqGfFu##OC%7i29hDH!g zGIMDNNOA)hFM9`haz%7=i|pJ#$4(bV;=w!r|Lt7|m*Y5cCIALWRPHo6?97Hc+yDPp z_&qzVn9Jov=L}l}W%~0TP#^R%cO7NyXKw!BhY~Xg(GTg(_<^fzl0*MkK`w z$Qsj$KEe-Hnqc#&MuZ;Ka0L2qMS&$ViyTQxyZxYf_B{d}z-GH)TZnF;d1xzMRp{k_COj!#0?ouK zACDPmtQ5+{ccXt)(Wpv15$zy+{rfGAaSHyPz}NyFAEijNL@W$9{;{1w37lIu2Cc2&#C-;JXqaEK3E=W;V}_$tDz;&^KWeZ_)=iLQ_h) z5hV!y9t((il;)>PTIXFiBE%U}&dG2jL)>ULcjauakiWJi;PgpK6QqF&qX1#MN6^xf z6v1Ag&yuy8czIgAZ5&ZGbt2c3tm$;6I|Ukd3NP`sPuAzBWOQyljY-MvMlnbe)^ljY z+09hd4f<(yXS`D&G(a?M7>328Y^YG)k!T4z`_bqe3Ofo&i`q*@1JJ!DTDPe)CMkNT~1xH4y zBcp3ZB5~;0^YHAVJ`#Cjo3_L%-_rx6u7lo4Bez=l^qZao*2p3d42(?VdsZulZr-iJ z^o-2+v71_i%gTkeTz|mcL(h|G!QFv}hllWEK2-k551>|KbVJQO{K>f!{1B5^n+7E+1xc)8;y}m1aMOhGFLNCim6xt42 z6rXq}SQpyYpL^!CuSa9AI%jObzjaG|)0X7R_i0>Sjw7FpRPv|tRpgK7%lT`va_#~M z2CWgZA*Y0{8e|Ld&S{y{l+DRLK_{p8Qak8>qHX(SRcy!W_@;AKHy27ZquP_W{j$-0 zNuJtG@VK>az==g#%|C0+5(`MxL`EFc1-rRrZudKQ!N#(R{K#ksIYd%xHe-(CzT?mL-vj|B^qZix-q(Q8vC98!MAM-^ zo|)grlH6}(6(>|8oBjSsj=d^mP z?Kx@f#N%#*Vm@<86anTBE43Gmov$f`Eb`n}VYmRr&#o;GG~5zKV2S_}`sV)>$hn0U z`WyJ3e}AgaM~Hc18SEy^GM+6V zuZiI0GV3sTx`54{*SRa9ava1RFv`H&uU(0s#?5b=MCFg-78G;LQf9rmPfPh;Mxamx zn9vJ__u+-Z-ZD(!t!NGh=6DENrwClM_ykRJ6y?bG4lQ-JyYIQ%=MK*8&Ru-}-No|B zk`6-ml1PgPi%8+33H97{*U~qc&fPpHH39DHShcUzekFd{XuoQ9-?sK%#+^nO-M@h> zfe}~@0!-+u!TAAd0dv8*Wt^JxG1y#x=$q3CIb%kZ4r_21VD?1_iYtYxZ zgZaCPKw^=6P&P6J!7W`IEaHJ9Ux)>s*3}Q;4vER3ljE^Q+PZzf;YiJo_N(!$M*Hj5 z&Wk3zSsJwV4O7W1iR-Vbyy^2z)BEcLSG5Y4^#MvN)(8z8Y!SwQ(XO-2_Xn?a>pt-ft_ziIEhZtWaY z>tJ&u;4)GB@0L%OqT+ zJtsCh?ykIZMc3ZASUy=)z}9x5zE-Vj+2Rh>Ap1@~uXqqsfJCb#zc9VMMxN>gSNmzLB zCc=xq2G1{|bP);+VrM$zkf8@lLC@ z`__5UPJ~jDPc%}-VYFAPKWnt!HoMQ`CIVVrTN_`%2$U89CiKz{&3zjNRTTD?K>`ik z8&1q2B5;#$hu!eUDe3O}imK+gGQXQi$RBi~a4Ii3U%sNQJD<8Jf7T@Q7$lx*m8O20 zg43~!te(JuOfmH!d{%3G+v>hBvrpfasLXO@h;Do)oN(HAIc5^0Zce(P&{A(O%WXwt2u7bJdK% z5)fcQUjm4w6JcGjNkdPF&7q-#(6K^h8<_l$v9P^$&o(IO$O8fMi$)Yhsk9JC*7H@| z_@>o)R7YfUwzT{K8<*A^0Vedd9=^qm2aDkY4Si}uPmx#?5f-c2z4Ut_A3cqth zIX3-N2`uP;UT?f^wRWntSq7iQVDeE$V2u!9LSLi7xT4n^8(91kJ_h=hf%+3db z)-e<4^wfKZTl-sS8k8Jcf(o)ZM}D_b-K`>}TqXATpTOD=E_Wb9fPc*y6dP55Zc0iz z<^%1A9QC%)y64qnGviPPJMO*z0_we)ilMCiKnx4LCD8c-(5} zWPI2Tr?pCFm$_35@0~k1CuCOt?fzaNB!4PjwJXnT=?I~V1ajR-Jdf*7 z<9a=0_55}tz*m6=G4*`p7(i zlT1f^3r^g)!c4-&JKU-4_}p%Gd|8FdU zR+&a)scoTIP(k4pVLL`4W45JMQg&f5JJ}|}#YNP8wO0vRQ4smlBp+pOJ-3e$xFrHi z=(hxHT`sq54)xrZ^dVJs#%=4;gJrf8Pcj zIW`ZGtw&NB9xq$B*=HD_z#9rkyg}=UWV_bm-_%jC~y4gw{rzGy}MZWS}4L8REycr~DWc3lx*4Siil z?&@}fv0yrn6x34sU}|*iIQBB`yIS1Zops&Bla1^xUZ6ZgY-xn59jayk4V?*n?M9Rv zd?N&y&~F6OdR+tx!-nKL6<^c?5eEqWJtOq2C-xdUTbdoZWg(Mr@jiDdJ3hCY9bZ=A za`|xB1bfH6zyi@mq+oABB=luf%W@cjvLV2#O4&waY3+esAyQrpLRTUHq0h0N(_!zU zuwNkor}C2X<)!s6Cuos;9HSnSe~X8wS|<|K089VpP{;}4A|tT=2r!|q{}^7<1I+w| zG!qCjx)=Fg1Az2oTl9dN2M#fKIn{-+vsp-IQ|K{9K6ET1F066MO1cmf5U9|`(| zSR93vOXv~l?#%BGJdS0po(a9IBeRTlSyyyZ3q_|Y_o{j@FcTyfh2$+@1V`*f!e>!5 zL$O<>?+0H}1QlE-Mvu*8XvRG=J~xAtbaZA$=Q>HebV6K@nGUeI3S<}yd}=LOX^N;J z{fg&>V0nt{zKmZ7%h*5!n9w(HP_r(PhK?ogq1cbblb$?2GYJykdtL-apJ}pm@lDE^ z&^r|J@~@~aFFAipzMQ`%D_^_-{llY6dKEhz+OCk>BAgd5UYN-!uwbp^FsdYD(#JfvWSJTjA!Nrs+DZ1Phd$xlV4Euxl;_e8BLYaJO8zk}svSd}V* z3hzN@=Zz7_Bfx~7M`NSPq=nO(8f$W?$o-1`(f9hESIhSj7lGt5h3~R*{+8R8=Vapc zh1KQ7&fSt-pT8z6XBVT8-|Tv#X5@9M9*j;A7R%;p&RHGBT zC_O#YgL6HAl8&cr4<9d0$Oz+N?vQl_PL`iR>t6J$0F}pWS*wfYj%q&g8+)qSkwHx; zR@Dn1yfv$U34P55?6%E?)fg*9F(tTLmH6(20#k4x@hJ_?k>G8mm-2e_i6#-z@xXgh z6Hn{1S)nKh53pI?JRN)Eo*o{jC%>l0KP8|3o_zi(J^UfU(+Go`R^p2}69|BD19KTOL|1<5q*S+^@3|m_S*-l_1KShWYnBGINk?BzIQVaU_#%FalEP*aK5hi9xUm*b@>uH zoz}mNVXDm$y5nCbarDq z(DP)Ozq6RKZBH_SVy>Z>fBbv$+h3B8-zVo2-S26#w!A*%x63s z{zL!%LwfeL-hb)qKSQf^vxe;XyO%xScCF$-Mks9WMqErnV~k7 zj7>6D0nsch-v^{QnGkht6?3;_*Dq{Fb}zlN|}t6n3jVKg7= z{^#`QT?!k^hwqb*|CJv8XF6_}BrtG8gsJ2fj~Ilrw@!`F_sy|47#lN6l5=B}m%syZ zV&Xj&H6__?c-w9Sn9w(W{9$c?zXv7;L2b|K=I|6w&Sto&{kH6nV7c&Yf%ko4lEeQ?2P3VY8JNFdFu#K%Imnu3K$U0qDP2i_V)V}`%r%oU zt%qhGOM+tz>(!6G6=T5FJpcks=nnw;>Z`=R^r{bk5AisbpBnPjnN&R^Qg57E!;8~x zZ_5TwHFn=~U78cP@S3?>?z3yFo7QRP822jT>y~`mR^6&Z&ZhgwzU{r3bB208IMK)N z(vN>j-v4*<{@;_cpS5}FL7~P#+(I#*tK0QMdD?hGykmVdpz_Ik$^afTL{OEOCWY?L zdioq}TeZuCzAeLzH8lv-1-*5zE}ys5SnJ<=hy`FMh4e;X;0PTKE?Uu}>upQDZmCAJ zYULd3hOk_y_j~&Jr{u%`Bu78%k#9(?_OZ7A4{Ot%A)gKwmKQZVcsZUP>FRH3^`B`N zC9uiY_p!kA&a(N&wMT#neeH+vh8=*O3jakA`jdwG7TGRRGoFZJxG>r^ICtT6chAB* z=MK*8-mt~Dx(rnq3Vja0%w|ozXv!B&^{6fpzoqEcgM2fwnh9oZtQ9)`CH?qA@*8yX zQ$4O2%vS*Cr9C;(S+F)jB2UcZ%=kZwAV?7Y9&3?cNssC)fIHu5E|&-aCiD^wMxjk{ zFZ&=ktQs9AqCb>Bp6lVrt65)ZI$LP<1qsiLEyhbN&Fxgg%cgwRR8Z2<+55U?-m2MH z6*Pg%x#@k)UH3Pf-}7fz*|)w*L@%qCAX=0SRxe?-wM6eBB0=tAwag z6D0_uhUmQ{Si4bzd{@rrkNEyL=ggeB^W1yq&b;QiccO=ae6YgMUM0EY9slV#_Oz@RE$=0SDfQWI{3tM*4R(CrWhA9= zt{sduK2dA!cwH(~z;7C+g6(ti#nS%N*8Su8J-nzVv5VIP&Hd58T@DKnz@@NH>noA= zQr_X9^g@3a?&O!TIh}!A9?!~vPX>jbS2e(`=Z4wx2cY5h@-U;WO>(J8U;MrMP;a5P zTk`4k!}|8nH#on)LeQ&pmX(#8iKqE?f=AsVUVS zIDeP0r|!uEm7@) zZA|?I8+R8f9GEV*O@C6u{vg?kX{?DgP@ z21hj<_@9{I1;k@zyD-7pFI>N~$17sXLVsJn`6ylH*+GRus1}bICy{N^YC(K|8(Ks+ z9BXx-_RjnBcA+{_)@V52>WtGsPotT}lmlC&S=dtwk@ zv7KTOEs96fPWsD9!I}jSZzb%gO@vCH)#-*s$UBWsQgN}VEXG1Rgtte@$y_g)?$9af zY0sYUHIB1K81)0GHmS-y=SP?y-XQpkJXy5-9`)kH%2m{>_Y15SJOg$Bo=dugjft-O z$QLGQ`=hB0n*+hAOEym_X&0;co0>)XjU}la)J1qvcOt+^HFMa#)ZhsoIqk_@bMFrh zJD-yOXjEK6pu3P?%CBndX+%QbnYqSkKuAk>s*KHcMB-u469i4z9jhwV1ZQ6H2iN~Gob?LrG8dj{a`3$rnONMUI~F6qfNLpa&2)(&}3}I_tXYbe1koVo#hn`R)yZ(O52giUvK^)k&B` zyWAfl+EdrG1KE%2bfRsy(Kx@*f}9vMU8`qSj+$PDwi>RX<-j0k;?E|HtDD4)P0aAY z=FqP`gNk887t%ekv@N>q_8yBZO&ev80hOmyGdB3@(&Z1Ql58y1?pj$nj6?CM31cfn zohGm*bq!SN)5@^mx7+|FYnwY}=e-wvoEU@vF0QwOT{cFgE}HR4TUQ)XkT&x(q4lht zAucU!LM!(H(y1Da9^dCe;8kdBzB7zH@h>gjym*A@5CWFFnx%H)q!wq-R~po@@C!^; z$KKl+j>ecs@hY=82^m6)0y3wm8j?w|_Lw>rZS_~{38Nj}h2=0STcvaSC*42{LN|$D z2hc-gp~eAV#r9IV40vn@^D|!fKy0j}32Ovh1rs}QPmxz2t0_ytYzt(9VdxL=EPJBx zMXy0}K?3#0l==~cr`mmb*KBX4tIXCM)zhImnfrdAMcPA5WW&t? zN2?1ERP50Dk1}DM9mhXh=_q!YodD<2)wRM_)JVe-`hSC5uY$`$oF-^M~l5a|p_Kvh)4<*)6;SpFbkiRV2M&`PB_Dtm{PU0MwiX`* z>M5y9XmP5c4l(1KzE$IUcPla-!{ILP+`T}KqA^-6b&-vAVKhngOFC=41|#%tuEWLc2q^@BxGZjUQ)CCbM{)Q z^-*r3G+Fsx{#HZdi}JB24n0jgz~}Sl57fiwjdhSwAn_5py>l3kaRbQqAGusC5IFf?JUo7Ncp{Dz$O`%fc z=NIlW6`onOFE;a(g)oMfJiYz@5jO*)k)nD%t4C!n;auCaVaLao=lWct^lHBrz1K~Uq3O3~9?#<6a2&PI@!t?YU+ z(otNLQ;-n9IU08J=(jwtBV|=&M^(!CiDxiGjoGMJOxP#gw!JU86e;Ehdc$TmUNSW~ z(wOzX;NZVJ0L^E1;k(QGCBJ?qJ2%zLo7XK(q*bmyEC5$O$q95yp#@wSn=~*QlSoR$ zZOBb00xIi#V@p&sY-S97U=00V*g&)e#(Gisds%&obfDb$e7!>{m3UpzxbNlWQU4X9 zy4G`1oZ!5WfnCc7gKxzz(vV7eY1QVBh!AI-j$5nZJVlJf?FN1?4quku62R3bYn;s! zBfPt`*oR!XZKqvooU|B#5_a=O;wM0{9>=eY=~jRUd3is)4`>BqjiYycQ~zE8T5ey2HCxxL!%1U^h=|Bd zbT!n>-hR+1)vRotVb1b@WX|U2TTr!JqA|(@?lUoe@GZB=>)K7tYhBo0J`>>(CWcUz zAn*OaG59Lqj+3mW#SbE34uUYQ%%Ct7)m`}PyEM55b0lzCI`zyzXpJ$J|Il7EZqETo zcAmIzrlAC*fEQsiJlBswbDNHejIlI{nv2hkQ%sh|9m-3X=eXbs>rP|ApW+$`NPct%bjY>P>09m^CzcFF7U22;6*Ey6_t z*)3$(Ku7g);SZwxz~HajA5_&1OR1m_=}eT$ zi{Tjm4(whCg}89NUbc-b$*HmJV%O)#hT2dmOSd0p)c+vB zn816oNgiUXgk*8J<|$L2b#~GbtF9AuSPEHEo|Oj)NvMrT(KkLASN_iNF%IXZa7S9W zr%DW3fRS}m<6y8-l|T43_)+ETr(op=;NKgFQT?5NE0~;ZE zX=W$S=Yse=pH}D5@60N$NzhW|_y}DfRx3;;FbNCZlUD)ZVJ}m}hhhSu{B^M%=(WCg zw?qLHl%DhT3TDNoT;G%0J#sH{f`yuiB;0@BW_15HBE_*l_r&5?yK%_UX`3CXU;aS;{>I_>m$N2Hu7;Bw2$jOA(?d(G&|kV~;1zM!KC)}jxyL8UZTjQgGV`)OhAH;^qCjZ=il^u{0h zZc)OBQe*0GvHi*N1Z?aU53Z+KB5fpDPNBw(}BLp#|x8#at%pbu6ssYM3H&xt7d z)oyN6dlqo@RkZVXSexoqv|^9r3?(6F!Lv#{`Z>oPDJjDf+6(>&EsM0g3wZfDM0!JYnyQ4`P%B$5A|;2&C8O6dR* zej#qxrBS@_Ib{x{ZhBsLl=dB2s#`N>8@EQu@(~l@wTEt5|n?7;NlpUo- zqhLYTG3nwC-F^X%@l{C4=h`}e&`~;0x59$ha=3dTg=1>=#ZSTTy_U)YQ9eE^^Wzru zQ<$njgxcPu>myM}Z8qp8Ng;dQ;8-$w@Z?M;m}2qJEG-qkZ6K&F!DH1lSofT{fx_Yj zi=0p>gyIw~qy5E>r!XgzDOO%<89+G8n7LPg$z2|FsvhOfSzhn1B=ns)YqVvx(fBjw zg~SK8^MLia-F4VkQozmE^)64IRmz)DJ#?yobOI75z>+ygy4w!N zMX|?Zii98!Hwk%8hl0}})KZ`12mKhK6~wzG3bx@HA9t>T@oPvy(P9uJ2}o82gVtZ8 z6Vpd;vk+@Vg6&BVD8hP9jNJ6Nc})vlSA&Ycu4lj^t$nBcbUh~?G zf!r~%1m!oQiok^bB3K==N3S`%60fUC;4y1zf^tcKCIMBnmFW?C^N*8>hhQOZK@01@ zVJ8xN?MHW%<=uarqA-Hz)l~JB{Wokz!WIo42fYvd|6$-^5+?G0--VGRc>(tj@~ZC` qb?KR$O&vWGDE)vxu)dc4UQL%&7^-E0M0Ip#}zKAN_xo$!_)l literal 0 HcmV?d00001 diff --git a/hugegraph-hubble/hubble-fe-new/src/assets/logo_new.png b/hugegraph-hubble/hubble-fe-new/src/assets/logo_new.png new file mode 100644 index 0000000000000000000000000000000000000000..daedcc6f137f92d519e299587df0c7931026680b GIT binary patch literal 79524 zcmeFY^;2B`vIUB}>);kFxDOIsgF|qK;O_43kO09YXo9=D1_lcW!QFzp%iElL?|XH> z=TyCa;8yLQW*5wSdUvm0Yjy8v6(t#T6k-%8C@6F}SxGf0C^&W~C}?UV1mF|QI%+B? zC`u?fNwE)J(1$sQZg^U`SDxKD%k%R&%Rh37lov8`a<n8k~n*(o_TO+ zyciBYeQ5lTY01xV(R6cfV5xU0-?%e*%2!TQKIA;;((;Mph}nFjUHV>hD>$8=5}IbGToxYh-)}-=Cj}MQ{-*UI;FJG5-hYbM|2@6`lzjh}oc~vQ|6VQs|Iord ziHcBej~IxAo%6NP}HTcP!1Q5q%+uQs^xIj_QO;qA)|@Tr&iUVNin+ z#$|Y2#*FX%sK85N9|;kYkCE17b18fe1MDWxOa)P?Oz;K0X-=9xaA2d<9EMAY?B0Z~r+BIYgGJ zH>{F1?rt>PBugLE&>IeoeUKE-8uz#mp4gOXyikS1EWFpNRoV&G1wpZJ`I*mx;*&Eb zhwbfbTQl8Q}o#z$_Co{I^c`%KnzUT7G%U>HKEiNC%RuB6X3790q1 zT8sIMq0hA(d@we9P$KB`+YOO**OQAZDsNZv3%(SnWiVVS@||q`Ly`ubWHKL|$kY3V ze{Y)Egh1EW4VM$KL4gD1Qhyi)6H5?YOae2H$B_Vt}{)A>PDikU9(#}GI0Yl zwtDjD_#p@8pGj|r-ypK)ZS}0u^Pe`$VLZ0lb^68NR$B6(t%=hc8fe6=>&4b?lp!Lz zJ~6l^h?25BK^Vb1OijO5*!4iZf1@N6!5uD z##7R;s`S+V%so|VpkKc?Zd{Cz2H7{>#X=Cytv?$p5^v_0G*JHOSpjGAr5%ff8Pop%V9D3VRz zAGoWKo@2m$x4~fHl(REnf06BFX3w#6SSlz7C6$X6BDSp^-)Jkbjs3sbMikjAEhuIE z@X3c#^arK3E=sdV7@8&4fs#-B;z(g^j%?=fK;vh!s4N^q+!B7(uH4cflW0;rPOEq^ z>_Q?I?h^iKlP=toYPO+IG~}dgNIeHyDw94faBi~y8wr9D#DN@z{l-pT-`he6 z6sw2D1BZ7ri833T^jL<8E%H!}mFf<;8mpnoNE9ABb$EQts?;N^+5meM!%WWJtqwMV zJ!@~tj3M|Pm5NF-nY7!!t}p)oK9JQMkP_U7_w6k|UBgIW-nSz3+cF@9g%qb&tUeDt z=1RlFTZN5R(9m{KCJ^4A&SUfW1n9&q3cIiAnz^eI98imgfhAhXj$P${m7S6dP1G=R zWGcIFl*}s$wSGn7x=va97);?{G*aZ;*%I?x^PiwH#X73MR;ANRa9Oynq9lQ0b27XLd8h8eT(Xc><_VXffABGdUCvvDVr>O zI9z;@$#wL@(q_nvdz4VncUiPQV7>jmI8ir{k1xI9Mt`ioCizkwbGFThX*URMhW!&u z=R4$|KL<+@c)VZbn!9f7b#$lN`Y_=-@ZN+l{J`u<-j-N#rl`ZbH(uP8*l}Rv^ze4} z`BLgPE_*>qGad`+6rRJ32s{}%?N22MYX(O_!7AU&$KxZi2oPtQBP`2w1gmAcz|}lP zAv#ttO7}4%Zj=aM5lTUaZXmF5fG|T}R>5P@gxw5%1Ix7F^xaUlsVD{g{Ri@?vw!eb zVss$O<4fL-DGe0Cp|^*?!4{iL_u+?>vPW&$iJT|;Cb!PS)0D?1Ut420DKYd#Br8=A zZS{->VE85P_Yg9MTNun&Px*BP6yavk4L3sokFT;ns9 zMk=NwvjVeNSD+B5O(QMK#B@@Tj$E1T81m(6tA&lFAG@75TdS4V7nS|+OrDnmF<(AQ zDP02C?8xcwq>g7}_osM5=6~alD4dNfkk#nWLkl~2SRv0?ezamO=M37nPCliGkzH;y z_TNymEct7%`^A~%$A=$}z0>DuF+WpG3=Vtl8b8|egFIa^h8i)u6T06G`w9PD*N5zV ziuGQ;sCmOrVJl5&dVxmo!NNLJz(Xs$x+8XM!lus;eJd}Hbk`4qVxVB^T(B)w#_VNj zD2JuT=?|*!gu7vL+EC65gOAIM!rg7J#K#O36L-wq9EdHCJ=;cR%U;1sQRN}1CQbcE z56Kq>^0rL*zR}4JV~7!ty$XI){Z?PB#RYcgC$+yX@-;K-(3gHP?OPk+5~1{1OvfL+ zBU$wv4V`46jtyoidV&Z|b!MVp$zX8~L0A;E=kG)u@t>F1vJOEW^<*@TKZaTsUD&sK zNtwMkC~Of0YHXD_lpLICUcv~g^hG+P#Na?lpJ>iNu527I(nzPb^2s`Q1EZe}FP}!k z1$PC`Zj?!lcaksgscg;#<$Lm(S{V+$d`Z*r?Qc#dXb6{&|P->kGe+x^2&pBJ-O}j zoz~HNkC5`$QZWB6F3s^&gP7D&Ii70ubH0|;r>xzMy-;A-hknZ&AwXPhl{K8&!aMiIBg^kDk&&3 z^>&ep#B>1tWlc>L`ycAkGzvHZ=zH7+%ljy2Rv4<=B_P=zM;11FkKqTkd0MdQjV1;o zZ!FDZIC>)i5(t55#mud!$s$d0bZ7#6KF$zkFL#7N4`}*LK#olo{3V zK(lcej`XxN+i`8Z{ptwqF~KtQmy8^2A8;!lBJEZXq>?A!8q^Dw>kX~2deDo?WYA&_ zoJ8rncux%+@&S+9QjKuEAx(GeW8SJvM>8B+iLGMh`apkdPI^r}T>GIg7@!=xv|r6) z|97_@pagJ?Lz{8;EzTgSvMLn(UtzQD8hamXg3jc`GfxXMV^k8g%=sjo;VZp$>S6^a z_7Euz@xgFELyOwpr%av|a$!SPlKY`~_Oe!VvqcND<5=(8eO&qk2WGJqxoWv?-PJUZ z1~TZ#QqbAp9SR7O#baYLhjxw;dQ-nSsEhC)Z7}4u4W_)eteG(W_T#h{D#LrY1Kcng z&eM;=(J7B1y-bYJVm%PM!&@}9P1Cm!!b;spXDEq8X4#SpibW$)+p};9MSsd#)G^o*H$?_vr{N@P;x^s|niGIN zd!!mGCro~%wr2QJGRpW*GUYA?)TV(-Rk#`Z3{t&M3LadNe@|?uyuS8yH&&j|r_f$! zkD{L%VFZM6o~jmP*yz1q-}B+d5NndgbN<2EZ2AdF=#BR9a|z^4yN2*_2-IEsth1tJ zLKw>sJwMe1LAUr7gEc`tA^qeXofF}UJ7DMElJuE>q_HM1utX=Y*ewLk=G5pdju?BB z{Y3PI2YbrG7p2?(VVqb=zQ!(9=xjrZAPu%8caYb1Dgx>F)6Kj(}rNMO?#Pn1`&a4;B$js7glWkp$w z#U(GYLn&45>}aY>(hmwUDOUA&3CGPNbEBzefN}(4BhkX6A^i_PYoh_Q#Id%~WirHg zktoE!8?&9D=EaX7te2SUSn>GZTHY|N&t_A zHk&gDT^w8!r5a;ug!JJ0l-@cSPoGAxUiZTUpcvwh-rA~?C^&@YA~*KPpy-+G7SCYZ zPF{R7+XzD1t|Z3QL4B?T>Hlfgls<5Ce6H=wP69cn4^PvAN!QH(N=Ow(pkz}`qk}R3 z?qD(VY)JJYQ(OlchR}ARa2&6YUOJk{oL{Y@(cmHNi$|56aqMY|*A|D9J#8L>TtAbc z8jkfR%u9_3?}h)7l1F=s>OP!H9YL=W^Em-3jqGggif1q?Z(H)>+d3G82V#{>0dF?% z%6_wnCdA`h828wi2b5NK`9KuoiYS?Qnc$MZr~kGkxvgOE*f=>kld`kp9G2TmZjP7H z@BKb_y{3az6p)hxR+Zu6#i#8OPTAL+d%Ap@n5+ZCH@oQ&a=IP(!Jx3cj|AUpwN*1{ zk>KO%K2*`sNq3NK9*+!dG@sXc%GJstAGjj+UR0Hb%bZ8PPu9cfnN?tmaC8m+rl6D=a#b}5)S(XZnJP~LD~;;ub7{2jg=IHZF>c&wPnQmIF!5u^|RTx#-ssOU2w

1DmF=cg`~Lr}`c;V{IyS{G61gbK!Bt})9HpV?x3=`!v^X_tnc z#PG-^FHZw(hn&qGp3h{)PUFNnCLgFxL4T4tp=qih_Zw&1N(%EwL(`8??;neiW(%Tl zZNL0~ZbGdzB?!&*VrSgzc0JPhVw}(H?tFX5zo;rSX_%NW^r+?*JL77%EqwX9j)h?j!y@NKX9Shj5Dy6DnJ#7t$6UpCBWW9|b{G+fzUUdgzO zMy)l+MTp_YlvaMdoYw!ZPAdz95zfOj@;iff=)BStx?KyMt2IMpu#)X4dudZe211-k z_u6?hPlntFaKknmFcF14O}wjN;@bHZ(XJoZoh)^llFM4We~G5FB%Onx3z-Gwy5R(+ zn;OlIUA^a?bmmgSs<`OLrOAGw55njQrQAw@kI;;-klF6-J=WJbwLX!Qgu$cfDrIAD zZcwkP_vCveb1z3@06O+Yo{)g_d_z_Y?EbwWR-nv{O#HuVZXy(FS$ek0Ah!LaYf;U(@3amlM5# z46)i$tPNbUEOzK$W05u{#Bv0}jkyRMyxluRDD}lFJy2c6Y!#aViVs^3Vi1ya}21SBocj=vB<3{eDx) z1~7g+(i@Z2Po~U%e3<JvO|}_8)wN9-?$4*hwH&VD^?>-jB?LqY z)k73!fHG2XZ<}+eu~rz96j~%-7;I|*Wcj35&ozGe;zsFUqdgK8TQgF#p(Ckl zDH&jaOo%ooch-lp;QhxBa7hfpqOBe5n(tKCFk%V!aR;Zy%f9}XO~b7NgU6U|Qlwt0 zWc8;iC)!&~3n!XT@%qzLG{9O0uwL`!15rbl(>A=5O+Cp$WOyYT!W)3}G7GJBWAVi! zoax1Im{+}lO;6pLwcF%$wNpn1ln3re1FIk^9#%SZQ4iTbFll$~fb8;CU!i==lusJ0 z8-1%bbm8C!dK^mu=V2Inp9;323V(;gx`*Ulj0_Md4x8zo^as`d;(?jW(AR=>b#+sP zGMM__+o>R7Kk$-6^FS<}uhiZEAQ4UD|HTinhXO`K)`yS72h;zsVA3osB-^wmaN~@{ z)`#JjXqk&n?s%Xn)|u^adC&3IBh5c_p0@7u$`Vwvr>723p!NPm-tZEGDo^m`@bN`% ztA5)Di%M!GI2L?R%J2LekG?8*W58WKrzPM!?)c~|Ny#}EVpYz5&u?|I7K`t=l@uXT#*8U$Zz3GT@umKi?D=xIPObVNK@aAtmJO7S=lg@2 zc{?1o%uD=&&j2fn;(2vgilo7?C(dxm89Tj0$QXWp${6!`PcJRA;z|ph5G3lk^L-0Ei|1%jo6_AU2 zR-YY}^;fbluKv$05yrrz8>LAato@F_wDUKhA-1u*=8@=eb%FtjFoMg;%CzIf;e!4h z^xw%om4eKEJebL2J5{1cvg9_SIM?D_80|ZqlCih+D$^-vkpNYALcAWt4+rO8>|}B8 z?3Ic-cE4kG8$ZA2s-fLevmy0?5k}ioRKl+~NYx^|H|`D1!aT>p4}H5l)v!JV3h`bQ zu&5N-AKY;G7|@C+Bg#7}Ql?Y0O-9U}V^6a~55jx5gMBcFAQDbxZ~pIoKx>5*^2SztE7@P+U^3VMK6!`X%vBbpR>6&za->qZlp;O*ump z%^mdN$T`u?CuK}8cJD+IiX#`ZM^-+%qSpB0!8#g4znt~{ULldXY_Y90IMqY*4#1Zs zTJLHEDwJCRCZL<*?(R-jSs4*gNJ>g7v)Dde$#VJC}uPc(aY* z1ZE3ziy=71djAN}o~5)io)$K1!Yhp|fhr_@F!V}29y5d5;e0*f=1{!EZ~|F!N=jIH zbrTDh84gv!w_&e5 zCtD8i-ZO;uAIT6$6o_;`qOPrd$6-FqO-w$jQ#2m?h|v5ob6VCmeCW2@Jh<1@-eLGO z%>&}kfho9)N7c++Y?GsDMqdRu&vM z>C8)L1OnmyI&k@S=4_Oy8dSUCyZS)>{5S9UZ^c#j^FcSe{X#<-hKG0o*8BJGoi+xL z{jPp%X*bys?M&pvep4?sJ>U9qdpVD_#8pcp~6IA8wAFi6<@aFmQ9Q$pM%O*zBgTGF3%NIfPDAzeDbof zEAqnsyeaYw`|>#X;+JM+f=u*s&h`?b=g>NsQrLt5PpYuJy}jNO46EJd#^`gkAC5sL zkY0iGa*^t=?)5*r03t7;@~o|JB9H5sXL&DodAG-&-LZiW&4FAm7Z)upVAtnJObP_c zq}OW7&Vo8=zF7^V2z)v);xO)k0_RM)I^qo)snmRYL`V77?s>v{1U1vDrqKCt-0u8z z^@l`0dG&FJ?{emwxw$zyKHUuC_?eO%5Q`e&@0nYSpz=tr;w&OLes+%9ZbX ztW?wDw~k3G_B4XbNS06WhSP#nC%?pDu))Mf1WoRSE;|fY8MN2<-MMhNg1t_SJ1!;! zy{_ji<0%9XkMRhq+K&Y`vy@EMf6BA*ka>9gD#s;cPA+IN@`k(ydua9fnonJ6BFIIv zz62E!r=bd9hnQ1c{=Sd*f4X@?lTcYi5ZSh_x4#&L#Jz^g zer2~_1KSu_1~3icr#_uSHX%FX3KA_|XQqCa(=tPEH)@B;CCW7`Pl2Q(61ksF>>(2O z80o&qISHCYOGU;xw0gN678yDTxDlLLFG){MN(ySSUnD+2)>UK2fM;Rxx!g0cPyui( zHX4^cgq6~D2g0%Qn;9|ulSa8F5n-I%XSxE*$y|#man&sVI^YoDs=J@t&VozjuG`!X z6m|nvyZpf}TS!Vd0_GJoAly(^GEz6E8dr{4!leYRZiU6UPG3*<3usFfCNmZ1Q|GFi zB}8?xDx+@0V5CCdAGRmx*-$42ZD!8-$_LCVn}n_+Mo0+dIYI%CE!GsP{x=5Pjw?$@ zg?6akFLee*;qaSBQ$BI_3lZofNy*8<8yluG&nn(H0Ao}ljP zmPFT1k=4C5 z>oj_rzUSdnnieb~2KQ$Sw=+{_as;H8VUcH(rG>rwL1a>;N2jk5-H!XQaB)5zFbXkB z%8V#VceR1vQ00Y3hDQVshy33ZOX1?Oj}D+AuqYOg$Yqn^o{aUDB<9pmoPzjB+7_(< zv?}w3@#|4LE6w15?Q`yV`K7K*#Dt{F>a<2Sk6m>uBDljHy3?Ny>yZhrFNCapw*6Bz zSZg*6$uAJV-q6pv7!_C|Wp|4BtO-&UzAMV`{#cr`fr5A)S0L6LKYC4uJ}N|Dsbal9 zPNY1x5mrUbZA8KEQj}p{aN;XPK>Be!_uV2KZskbx_Zx1(KtOPhA1ZQB$UNW$4~YiN zB0F|orD5wMq7#3#5VO7L0GE&Ie9$f62!IcVImj(`>TNpP$#Uc+z-rKDVql1RpY^fP z)sE0wRk{HDlPBEV6b(zaN;Utr9RnEAL2qr{`;0_STH#Spr==v5C*XK{WF)}1zAwg7@7QDCCFFTM~m?X@GMjgZGY)zS}kR=U_=L%s;_FcJsXPh zReCY_4LH(s%noKNrHj@=Gc|D=M9W4;3rf=G&q}O%tsc1%cOmeVLROtUks>StUIC9e zv^c*m(|_AfnmHk)9y8!EGTcr{W}DZA;h{)0SbQ6Kt8OGe`5;&rgqvbiqWb$^(x-Ycsc!s*UiVWHm>Irl$1WX4jQVN=`5O4J5o)r< zKfsmD`(G7J^?I5jf)oEX5zI$S*@u6n5A}U*Yf+QHOhls zFee5qfEM%VKoRd%yNx00nTaLiis3jZ_CxFDCt-A67xODr&LjRSZmMI!0hp?@7N8!c>hxLA#Y5i$SFDn}VFX_Dm*t3?f=@`3isd zd)$M;_Ec(}BUT$CE>$GjWA>qGmQKy%@h|--R60ON8l!1@>o@}t;6W&aZi2N4NSfX@ z^=Qct8_(9P6JmYuZkE(n#HiE}P>LGi!wE3bD(X%f+rn2}je9fHQ7Dt$Rp(#uGC{6k z^_9B|p6%_+_gg@=UR(lHsonVW77CzDuQ;CPDGw`iywkZ?Q_R zj)X_wopB?1l~6+C?7f`iVbZV}0WQK?p|a-|Gs4&yQS7Af1Ek2badgB*%GV?Vd@*{+ zI13daj`E~SuaIs$>Q}qH&d3p{qzg#(3A&!^AO{kKLP$>!lU5b? z(cFA@#XW9JqZ{_R!dqB8nW41&C|N>|m<~Ly3<81kmFn2*vhSbNPmA4U2R%Yz-!`eg z{u`S-s1xt&egbA~C#AE#%+ve>#>M!1J2sm<$?v@DT(6OdFX0ZD+_~cLBz9$lKd>B z$;f$y3fBT(gm8kij9^YCgzi|)J8inUf|`D)Y|S1;577}09-iNDC!5BRSEiMOy5tVS z_eJ;!MA`M!V$wjuP8%)^~Xu$v8NYA!6kQh{I{(Vk&gz87dffU6so0|*kNNNRhVh`nTxWQq?nHm-hVI8 z%q?vq47S2u>+D67Ia+MyvsPdfRg0^zSwCU?z^YR>psgW^u(kDW#3PLr1R0Tp{!Q%l zOGEF2Mk~`pHUSl$FH;klotDLTrp7$oy#jC+1h_f!sqwTU#lZ*G^LOFs7NqNM;(3tO zL;HD06={usnKkB887sUUI<)*4Y_epLuEx{*I&(m?wIAM+ajEr?rAi3+E3L{pLpy6$ z{CA2PD-^C`KJeazi#!UXf86g zA&U;}<3$GXLTnhs;4BWul@1qNdk5U3@SJ3zv#;fNt}sr%?NdTh9MNlbu-Dh4wluUY z7pfpZpg#IpJVsRCrHL4Ib-!O;okchpyzsiA}_VKB-mDlg5y{_Lt7m^=*fA~oer^6Pkcbt%g1cq^SSrB9 zHB&@m9)WtVJ9AjG0n2gzZdoFIaN}=j9xv?kXL@B#BB%O$9LX0w3|4UZ8r0_9ZXO?z z5Op|eE+OKK%Jpx_PN>@KR9lP{vSKuiI&O3u ztW3gCn~L#SW=)e(CS&_-0meUx)53^w;hOt8$OvAb>hTB@YtImW()Z_966RoN8;ISX z2ar2g`9n7kOaxQZ5{=Hh^|sk9i$@XnI`{W&0+2bi^ou0Ge&^4o$>z16#h`&% zZ7>sGP`-$eAn9+EpA%A)2*{^mBWoFGeLoU**Z_uDFHn#i0{>!(XWN$SG!(Gj7d|pR z&O)(N$7Net>(<7MOK}T{6VE%0*&R?41^75R;{De@zm0Q3N!ntCPJ3X7a0cEI3O;9N z7}T1EBTwPmmn?})X1KR{9O;@JiD}{MPH8jWlDx9Z-?(e<`awJ*FL#q?=VNSHa|9ic z;3!LDB@6lju+{Q`U$Hw$=sBk*oWT+C&v(PY*vqJlbCS8ZFE8Vc0cLP22t>aCUZvs+ zoYzMiUO$T*pxdDd0GqTXR_v;Fleb!$K_Y$sftD^$$Rp8^#|KVbJ#`TliA%zT`j znB2SwtWZRx5H!(cgl|LG6noX?aNlH9_^zQt?_*mk-=7FF}thOtZ`KR=nOc3rC z>SLtK%kxu-Yessy*93%$bnWHPQiMwkT&k2~W3i;qss-_E@UFspvxgxrqMB);hv|8c z%1W$&ISS>Ypf_UQBJEnx9z|RBc;pz!#0Oox4g0kAS6aLrbqwWArg`nPeU7Jj^{nIN zTi{ghpmh~huy*{H0pAnXYQ_@ZTs(6 zqoO5vl8ht&;?qRXD~=GD+3vtV+_}ZJ$+y1dfkyzo^BvbMDal^}gN+Z9^xs#{@32nO z`jXd&lQn2x_YkC4Q{%Tt?1oS_D|&^NnKDNf*nT8D59JI*{PH5XA6{f{3MGp*oRnC2 zG{wulrrBfD5S=VDELiYn###$X=X&OTS47*_3c=*h-+>TQgrOr-9GHlrC1b;XmPHfzV~UE8={$I)A_uHD8e3mlg4I*prW3j!JN1$2O z#VF9XXx=yUb4kQnJMYgwVDKh*Qa+LJEhRvOK0EPWSdGbd~JKssHQT9rYt^xG?l z>4n!^T@G?M{fE1yGF~?_2T5{WiJM@qPTLNuz_J(L{FPXmD-UM95Etvd8fI4J_(R*6;L@1 z9%j5yL+b^Yg785RKdUq=sB)PMurg*_IfK*fPu6-v;|C1~?XL{sB-b91YvS{_nboI_ zJm$@R#}KYQtlT)=EPImN{Ia^Sop?bb9%2KUwd=bKFsO?1JmKziyu(z%TZr(f8Wj}? zfQOU44a`tb+B|51j)cZ>bZDvxBCBQ*KHV1)fXo}$HkhECH#s;R1>lFr#GF{W$gYQA%C$vnV|GVyC++Za?a^AoG0E=^yO!v1 zEn9+&zOo`Yn_LTX)~aGfHA-XJn__7gN0x+5eQ6Knt@gALI{v zy}hxqF=3-cy-3vdO|>JxrmSn=?&s6BCk}g;xhmVsbo{^xMsLRYaMz?k`i&ZSL~}!- zV>TJ%nc{~YtJHWC`+AP={=5-Qg+c0c#wo3zE|qIcF6}*-y#z4@g;_$Lf(TbOD8+|x z3Jt%jBH{yHTu%b`Oc>|=yP2$9rXhI2MKS@mp084|3J5W6pkGFpKQwBo1_|0m(1`R{Y)m3|6h<})RV#_x48jHv}l{9YhjlOyIunzFX^)G9Y{ zU|C~=f=!|e^~{b@x8A0k^L`0&dF;wwp<9A==b7uJbSh1 zwAyE4&_k;k@d3ylZ<=dpcnbdN7z6Opnl#5z7LV>m#o^43QU}27UO8V2X0T;@hW%+!)@SW;N2JWj&ettd_MZhi9^I2lxhkalBcZav5kyMs1 zmgAYf*M44WycrSA$wq%=PCgN`Sl(S|k^%vbx93qy)8vv??c^wHc~S(A}b4>g&~JQc&(ONoQHBMEM%(k zDjD&(q%kWM7(PfgRX^r&^(Y{Yi{UMDHCkV(D+}0cQuaK=bJV9(RdVvN96Xz4lj&Nr zgWGwae}j>J9q9m0o!*KiMZ7cnWAQ0CbYy9}SBpY`z0#Hyp`oq-vp#u%uhTdej~$^Y z25CbMy1zn4R%t}i#g9&HgKJuZ5!dXb&cwM|=ulS$ZV{U8JxVCjy@U@|o`3P*&md~i z^4P0`KbsSRClzj*5T7ZX>TJfMMi?{J(_qWi*nug=94%GwgWMQ)N$?Zk(EDmeX70)t z?A#wz4{r>{9=stI);V73Ttw5|OEcqWHY5VOT_4WVjmb)E2N& z*N_a!3g1Pa;@>2T+CxG447+L z^}gCk@bjgr!D3L!vYGnc2M9)H;m)SZq1p5KNX*rN{w@`$tWOax#cM>=9S^ z@Tme6>$77ft0#D`Z!hsawuIIgO}5TVrMxC+y4rm1zE9iujRh4g2ksAZ+q_$aOKU@m zXy@pF#{jnqhorJ-7F7sh#McJ(yixToiWGH3?JQnJblejI7VcjC0Wp zfgKv2AcrU}b2KFZ_x%t0?!PrO+Ty0%0Q+KWj$KQ-aUjK71na zzglKM?s{}PU1{;->L||pSvcUMfZO*VLK--P_rIxOt`vjFr0%I_vYXo?vw5OQ@cWA7 zK935H`^mc4TcM6+=j6m=3g1F?KVMZ(?yKnS%J;4TBN5K$LU$8Q9c^tZ3r+rho77&P z;`CmtCxyx~olg-SgWo!+MfrZJanalZHgagKTZOOSc`8RFgIczb_s_=_8>73?-ww@Y zQ~6?a=+w*0z&InuvFmOq3a)k}J&mTJ%~%@0sWf?a^yRN~A8%Sn3r|qp1V6!~j5$uQ zHsILO^YQ&bibx$yuRRt+iNq5JrfT}a*!Ty#1P9xngRp6M227&=;EP|IP&5I$?^3B1 z1Ob5*Dbp>Bf;fs&$zG@9MfOEO$=(rHQZA+lE!T43cud`*%}|TKvWl|9rx--(E8`K3 zG#5@ziX1M=UW%C--SpYTVc#?lIE4`oe(fU}T-wIz=e?C4N2;kGf#4r%bK0j}sgxh4 zVv60XI4m}eyK$17qY;e-0E52Io7r?@K%W=cgfPH|HZ*XX;bV_0@r=1W-a2<&FWBbu z^IHP6aM0y?Z@T}ngf%QB(?DlI7tqzz(4{lcfNO--yyPNZe8l2E#fYVx#f$#PvKTf> z&?M17nkDQnP}RCaJfk!n5;u#^O;`%A#l84_bo9d+7fJMQu!9<3I>QUl{q z{ODhs4?%ozmT44`e_Cq3Y5~}v6CZHq@rKXwkpSe6d&GWB1MsAuLlME1d%`$P9r*_% z&Brw68&VtAmvTb!E69J>8wVLLt({R|7fZ~xnj^Inp19>W^YS9P3^ z)`v()3vbw3@t6~(8f1Triqa*G8Sb3YiyV1f0dSXwxtHC`ZC*gl&Y}9 z0c*?i4;^zHok*^Rql0U+fYL>^q$wyCUoDbup<9?{n@$L(dk#l`(&MzUG_Rtuj3M;L znVHVA?PK(t+IZtLnA3ykOrNxH4j17L4*#KSxfYAfKUd!uToFp^wBxnTiqdm{Oof%7 zXR8fiXdY#!!zI*=Pu3*BV~R7zM(L$M>mfNU9M}z?Igl=BhP%r(-D-_ZI`GJCJiic9 z#zyHFbn=pi@UnIjl6PZvsXzs*Xiu#@-<1}dVC84Q2)1@VET2s5>q`r-Ss8jAHU2SO z>F~A~N+jEec+B5~YymU7q@*Mjd(m===hH|pU|Jb(jC&>Iz z@lxw{z$yABiaH}OEt3th$Cx1$egxiw(KR>?uteGaV(9ZjTgxB{A7;_CNx5Oj7|T@G zgT0b-5gi55ZOoXLv7~>;@hg>84O-lEFEb*S1w?drB4^yS_$xfoDwi#e6nc}V+iIZ` z_R+P5Rsj+>EexK>7ghtCkQeD|+PBZI`i+{Fc5vV_M!J0}C0$EM>%YptS2*8_R^{Wx z=B+fJCI&-K3&#AO(T;SVHmKo)RU9<}u)@{6VI#3RP-jO20jrU>aP@2JPwi88sC9tN zXEAYnB0*$d%luM&h#Rs5Dq}Oxc_LnyhU16$=vh9fOV_bckM0O z@JRk|`6(lmAxdOD%WSjRMujb7gK$BfVk9_5ZMb!S@*v-@qj;&VF^XF_3n$=NP_f*+ zX_`+oRi72B5b4CU{W(*!|BJPPSx>9%_z@^LaJmIAPRXx2 z2x_apgub?e@Z9{5#KgpEURg#&s1sm>PBcq54Yo}Cac*8pWI5Qj#!NdlDjJv^tX8N> zaHI}kn+Njg^NzwEu$ECi?r{0A`m&-;&Hfp;dEJL9wh^6Wza^31bq7=%w!zKy)_MCy z!To6?mdzBfOX=P*2Fg=-w|%eiuU1l6<7f%Y#T;~O(u>O)2v(~$>~vbRZ_a?q#%Ec$ zMJu>61PmNSN-<%1F9rFc+R*^2-SSmldzcOjugY`XE!Q)BTjmz^-x~3?i4w8QC1weS zV;YZn$NJg%1yNFw#d{mDA+b;p?vO$-ciLbLwN+Pr`-bTILf{z=EGPfi=@_ z@eq`LxDz{k4>F=(bg2HHIs5;rjlsvsj>Wo7om1QSJEKT<$O;AD;3jT%hMDaV1>ynE zUo3Gaa+>Ct-KS9~B%qmeuq-msY=`8p_ER#twb9n*Ko#{|LMr7+1IdJ49yYg76%>e# zW(|`_ER=xQva+{k4jV0O?E+q9?EdM*~lc{C%oKU`-n!xhcQ;&9M%xY=|x z*d5ev2_JE&8`rf88AjCG&EHMa*{e0D^RdeaziFBnLR=JmAQB^Smm%x9L)~74g^`Dv8-y8b%zkL0R>-78A`=QFn0M%;=3jlQ66>eD zx+O#I4d;7vY>&tF(XXa{a{`U&cQKBcWtP}GqE^97uFym7DY9K)4}!OAJ^8Tmg`Z)r z#w0XkL26TaN?3|=6z+8u@zv0=nrSPgF=EvI*%ssA2a)aLEuf3#!CGfRw2wRE3V8G~ z!|wH9;~c_X)&N=V0;cWIINz!r44BLPFR&3|8xn~@3dZV>K<@|Ew#NB8UY;LHDoxSe zU?ikV6@Aq<$stL+xaoc&1LV!X>3V;y`51v~fTpiaYCYZVcl#_>XcPjx39D&0pq*&8 zu6VBc8|Uk{#qz?V!sgPjRHnC9viu&|HVl7RMkv#w;;XoUYzL@r#wy!VM7OK6hc#JzxRiea|ND-oq7;e z*XRSCVG6KCKYVJqp?awx6he+1d8QOA;njXe)vz)ukKT@wn6WPs3jKW6oYK zM<6#tLE^+Ol{tUndp{oxeLeWH32`)>2V*-1yu@gsc(**>r_(+t=T5Vzh8fr%QOt{?6{%&+!; z(_IgYB-8YYi7FCKuqTkeBMyAN$eXNlsS#NAGmp$oV-za+Jzw>=mT56pf#@V8_-L=0 zTnFKKvZp{nwcY;#c>BaiC*vvuDXQlVd+ljlbQrQPsnrm3!?((%=nhPF;@wk+H@{s$ zr_tg}{R{?XDe1;pT+SPko8Mh#6#3R;n5x({y&$IIy#haB;$SItgPa=?Bp!3OOMnsh zCq`u=(UdeYJf=^dKgWlY7|4O^$AU|kStd?0r>iFtp&r=t0`9*>FKW#DoBI#hrq)_W z$APBb=)dvGbFPcNp*m5Gl^E1&l7VOs97-#S{o?N~|9%}v3tf1fF>94b8s$=K8%ook zC}I1)hPfDu!ed12h2T|NXEl6BUx+VK=-K=7akwYV1C1kCuzsq0dp?bDwJk1eFqUgc zdX$+h?n-K-w#F&h3v@z9-Y1A0d8+g%)x8;0@mDGj?Gi12OnjfrQq(CipE6j!D}m`&99vq<;x;8Q1H`%pWb!7&i{J>Tupm8-kM zB4gZZRqEoqAH0lbgH^ll1i?Ha9fBEUynDX7Iw@C zq)|UG1UF|E0#(f57*i)=-@OdZ{7R$7qU$+`o|I^#Y_yu*K&u`1@sRG~ypYZl_8+Z8 zYwe^M9v;~5?x$& z8wL$Q^*}z4{FLo7X-As}XRZMkd5%_MZ-2S;T5zfaX2bz>08 zEl!)oIdt{R^YKZ7DKcbHSfxq0#U{OW!OH}|nTG>wP=i@=?da{sFQvmDg7EF-Sgd)& z0~<)G5wN1XD>8EUe2VV^A&4S^Iovc&@&wJw#f ziu3=_be2JJHQ^Fo9D)UR2q8#t3-0a^To(xL!51eu!QCOay9IX$65QQovEUB(eD~J< zLGg#Gtzyocd8hm7UL!BrJAop&y|HRnWi9VQF9gMvrNOxcLHowj#+PL}22EN#9C$)M zGXS}jBCI%BBJ#*#Q?Z@M7L3|MsJ<9%|MyHM(Rnkkm!#{gtG{^0`irH~nx#p2E|quw zwnetP#4fL~p-Z(j{$3oQ{bO5311r_CQeX4|NwJ=)(L+Zd5|MN^VH=^6<&ca0mqs!c z3%zoZuE$seSaUT(rWtGW@#Dq&btM5pe3tmzt*C;I!|c?Mv+%Zmy4x7->HpBdN{b-` zI8B?u{eK}sTMPmOT__Vxi~hwso&7T?HW#)lUk=??tlJ?A^zD!hx%Pj54j`S!*e=JN z?MTERZpNHROOLTZoh>rk{^~77|;mdF6gG z_(B>}No)`QUe{cp#f=d-28e)@qrak$q=wD8E4(A_fH{QrkfT(O8HUbalqy3bbi z-hg*;(24*5+_ztIA9u9>t(T6Mh5HZ-NfV7yr%zl#<@MY*>RyaQ^asm~H!nsWU7jOx z)Ee$r8?4ki!i!v`skx#*!BBBQbEj2V$)&nUBxI{7{!?I#6X9mscE8a{qUjp<`;o}! zQMM#bx|)IpA~ds8%V0DPkU`-`7f-exgpe6Bw#tT z2!b{2&R&iSk_(pzbO^mYS$3FS;E-NL?~W|PWa$mNORFOr-`Xn?pP&FmmSJ`v?UUjV zPJ&R+PK1!e&>q#r;ZH0`gT8i6f5g_@J3JtZs^OzV*%wAo-iuG%Fby%C`|hGIh^<^r z5_*gN6+G^*>FRftZBap@+x#_i&tG9Xn3)`lhZ|;{RyvxLO_Y`@ za8mP@)a<+5y2;Vekz%i80KTEi>ElhcpMh0ZKqO&b2$8>KN1ofk>Vlr#ix{kwU0h_Z zFOQ=UBOA~RQ~%7<+6iwMP2WE|&P%u)@-YPcGgGQt10^yM*R|riYB=3x){;i_K;7Vh z2z7HZwjyKiXJQ_4RT=Zq*Td#c|GUYw|WA!h6AAH1Jm+l|wpQdo^zU)le*oXeuvI*&7M%i}|Bj0IP? z&+;y%#0`aTG&qgJBKb(vk4B*)!|e=u>@x(R73VS4U`j#OJ$k%XHjLozO7Dcum-x?;+%l2H0+D;WPMU! zd#*`@=__S}*ScM$U7IJ6ts|&qmB8B$ABm_khs*YS_Te3eH&5MqaHBXX>rJ>Vnw^FC z2IMDUt$mc})<@Kr__|5q&!}*E=1CC*NqS)QGp=t4$EITum$p=U_EcDGERlN%0}-4q z+{pyEEKMm91T0Ofkq3HqKi{*=1Iy-Se6f9zk(@j8H)87OEckHMjJfqXJ=lUqL2@CO zBKPX@>tVysst*=b1PluLV{XZ*J)qpk3{lkB=yIvN<5tXz!38xo^N9oPtWFYXQl0M* zgMXp0M*3(>Q@E0?Ea%{E z)j39%a^&T@O3^{0ara`V+*YmElvGzC{FWto-@$7h^D z1M29_V3b%W$3(y~9_=C8j3wXxYbDIgL-b-hSaU-cEHJ~z2zCMLEZXo&=)f+g{5TT| zX_3qk!eR$W`IC-c*2H^{2f{F?76-M>SfvJ`SP<{OmhDZB*ir>d1D6T>-%D6=5OCQ7 zU^v%@6sfrt$b9-SZh@erVtRWSxzlsz(KVODIw?*Sl|6ZjL3N==2 zgo(W1Z2B7k*-;uLOvQ$BYeQa!u}CE(O!7n#owvCnY|i(v-uU>qxT&)Tb1h~UojdSj zr_CGDfP0?dRq-QpTaqAw$WOCM-)dE?%-a3_;XjyvEL*TmV0227LWKm33&@`Y!Ifv+ zd5gnipJ0^VV`N}TbK#ntmIx?#(4dMtjEi&yp%n~Te4N7uqRFZYVj+7Y-@u=XOmiJn zX&!0Jei@FUp;;zb!MXvCNKu@Sd6Wx@tn|4=Rq+^cnq5COizf~F=TR;v!gE#wYl$W- z#AELl#^$)1y@3d((N(FB{Sn1072*qAHviPyG$8TY15u-sNBFv6Mv;SJVab%;G>F^d zCxMp-h(M=xqHH*^l?N6&+xE9xovDvI7hk9@o*!d?i@k-m(>Hz$TvPv2O`jg4HN)Rg z&taTe<_%usO6oViOiqFUthisBxqk$dK98Km=h_R1b4X(u+!M$Qa~er=OR|cJ2y1L* zd|JNaFbI{3(Gsw?^EaA=`l;hIT4X_;0C$7h?P z*QVF%n$3pKla^J{dO*F@g@`vKJAAIcU1nLU5Muld-0(;|q1JBMfi=+xjb@}j-NQ4|f2wa#Lw)EXU z9n%OmPT?Qjc|vx%Xk#-Iqj7aj`e!OXee6CU!pHtnGa0suSt&5G5gHtU+ZyyKQ_4x7 zPqj)>8oDtP_vlv~_uQ3scm@2t_z@kxETCO?3cz(#15Uw0w$%CY%!O#Z%k@wGVDJU) zh3_*;d(L;*b81rV?SUmW7W&qxOrop2yp=F47Tu(90yBFmw8aP0HkN<)QKM6(FW4@v z&RBfzX`##%W4#;+wE4%E7l-Y9wjLLY>025_!ck2;j-5}K5roE+f!`3-nuOY3O%ifV zmrBWapf$nu38{xCjV^3lTWjAx{7p2`&;bFzk=7DFs{wcHieGtzqVn%_=_aE-F))-b ziwap-^UQP;g+k4(ErX{4>?Q$DPBzzl)XINk&Mosdmr#?+`97c_S%|9A{4z!zJT8VMn2_Dk}Qi`5rB9X$V9UL zMhP138Ly`%5I#POUUwdRSa)!Tcj=N*8WXX`UgH^I_fJGc$I2TV_?;$k7W%|o|C<$t zH$f?1c~tFi1`4mLm($(NbwoH%57&po!6rb7+J{}o%E^W!u4n#Drd$EdI_bxcN~L_i za+iW81?ijuwfhfSpFF8mx_P4Su*WeLAMAsUWlYOvzmG+Psh7&?y(hZbZkZ?PP9;#D zvFrcoVH{3ChQD>8bTzg2!V7WRR(COY#v->EL)GP~AhMso!o!AMxdWMao$nLUk<^1S z?G26}LkgJ&mLofO3^GHpy9jcnNd1rU?8_n+!(M+y3K^{ZdX45k6VcVx9lMXJJN;!d z#MHd{EkKRUiHo08Lon=t3?UVWr?$)W_#aG+V<@(GRLz~9e`HN@=*8#@rSP?cjnOpo z=t(8O)w{gB9OKn+1@H0C2?K-ejgtRe>B8}sGuuqOD(I`ZUZ1EI;NL{y=`<{-dm`n* zhKb-J|MOjHvdcgj^kBXS==ltolB=Hr)PVPX`u^EkTZa0W#?6uMWkSv-utzk}Jl}S7{*kFc>cH(_yt_Q1;P5NK+vW>a zsm-qm_O9@J)#OoUhKfByPg>gyE24`A!89es5|I&IE4;@;J)B5m8iFS!+cCsn$^`s( z2Pi6Un@mmZif{_Q3;;<)0oGO%9MWb&fzMKTjhiM%)}AbtMEZqM@F{by{Kq!^lVttd0);Iw^^4%nsL*CuVOdXHfQDZ>oORGoA$$|M2=^d z6eIufGQ`>c@`5$ibM!koK2u0#d+6NutCo3>&9+O^sd3Ys4RygnduZ`X?H*V3a5_40 z?`*gdIZ7H|R1RM0WUc|2efgdQO-im-28N%ZT+xRHwpQN%6w&7d0KW|?RYq<@zP`~a zWg;U!%%WMI%$LgH>%l{+SqJ_B=O89xXJy%hSb1dE^BxN!w>{}$mCnk<)nXntGy2RQ z3_{j!Q`7RFqkwtfv!g5KuGh$4s}`ZC+r9aBSd>&v;W5A$0_*!5u9HK{m;AbKbR#GL zIV3>pBn*$JFH`&jvUD!N(;fcij1KMO&Zz-p_w_HNrqA4^(}us*WikAK@1&>PouZ%r zj$E|5EjoXqvUsxCfX}lTI26N)4(-?jOmmf=(-?%$vtoa&yP#WTM6Wkzi&gV0{~8jM zzIYT2{r8;pG`V-n>C)+gMBe7ZPu^w04?a#0i3z3X<0iR^b6$pv;qdpTh3}#@RqX+) zfxh#@e&2i8`g2Kn9z@U-NM3MG-!oMmQR`lalW~CiZQzgXm?sCE2|3@7*<|U-oz_6e zamWj#egJq1YLKdF&!q194IoUPPq>^qOI7((TA~CzM?VU99(W7f-jfQvzPbo}xxo== z^k(F%L~D!URKMuOR%LXL|1J=Tb@;f)^Xzv!&j05pL)+WiGijM^^@2?`_u^h%$2iH! zrDvlq7CbT~3^q2l*e;rwM-p{np@w#F(jQ(l-k%@XafW#hNJBXLKG7iEze1fU2y~UJ zpZ;bXWqY7im$yC+oOw+s9(YgOWj<{+RgaB-+U=vO46|(?oVdpAqULowNk!@V5SO`< zx6tBjfulymA_vkd61?cgdECPEv(zSRcV}1u0-m#F8VvP5>3T2sr2cR_eV*2shP`*h4JcT7NS>ELrY{BDpUe@NJ* zHTQOt499AuUxOp=p;0JDKQeY3e}L-j+WJ9$=yLp6=1hmoEmQhx{79llGJ${dn`7sN zeu`#tIW}t_D>sy2#E8|P#Ytn&OrsT&tDeDaI9?!5JMbVkisO02Jig;u zI`_51d&3w`S75`eD;ruX?c;T#Qar9VTh)iyXw|hYP;IeM`FOYkr(3(7$(+gX)$9SU z{^fX%LCZ|JDR8f%ti5dHXZb!io|%?9*i+I>QiFcHT3yM!MaiCFz6qg4mv=XysLMsF z&x>MV=oIs)GWqFRZfDJND>}=wbJ$JL-Ga_`H;q5vHffo@zx~kT9NX2QUS@6iuU0d& z^XyeH5tPFv{*jrua^32pYbOkWF3%tfBz2ca2~A^HpQz3#$n{FLzG?9p`P|~|qZR*{ z^V7Zx+i3G`ER>cn>MIMKheZPrBQb|WkFcPdIIC-r)PY8as zD*Chx*N*(LhkzX}7P1q?jkdX6r2h=Oytvx(7gJ{;u{VF`5^xF?Wq$d75+PiVCgWFN zSE^oakxAs=nM8~T| z*qL_p`pe=gKu&rBk#NQ$curoM;r(IyH{qGzjgBT7IO))$GFw~Rq7-H?-?q$v|<&okg5|lU8G1@z!sB0K}{ra^~ zDU)$}+w9?v$PA?9}5p$eMo*e4wW<3+os)Osdi}_!1eFmnmn! zr%}e?716*=Wms-uYIW;X{H0*XxMRjT2W;Q2#=?ovz4)sS)% zx#8`4%Bm%plUn+kqde!YgEMO}@cl*xb+0`P5o48cW8+UaoA#P2V!7X=4Ei#sL49<^ zTyA?keFYuc2dNWuSDUv$rav;aM@8>rPr{irkM)Q|fZ%hFn4(Ms`dt`2-#YaRYLB{1k9*cplV>}EuNM<(@x-+B5=)Chd>?%<3G ziup^N70w%@*3QM7#`PruJ(h}`isFUHg`M)D^sDeMCO0Ro;hwHLoZ=l6wH7Tf9Mc?k zmUo2-d_KH-9%hndzg0EPJ=oAt^Phh@IgK>hS!53?3m4LYSMrk$noDGd{#q}2M4X+~ zNxHl5wcb1~l^tt3uCMr%FW;^fJ$c#9z;!g28=Rl+`y8L?xng!XJ`X+TJh`mpB^!uY z9FyzK?Hy%3S{`Cmt|V5T$QPECl>F>ifiu!KNg@o9@}N7}y)1MxBWIkB#^crH+ODAK z^j7FPuTu`xJ)Lxp;yym2A-UeoI=+^;YV>R$u&!VE<8Q;uvPl009vqZPV6ZZ-m4dWi zCf}R}eSoUpDG3spjI(aScQP&XgwAPcX`UywLy^rhm0<7Je2Nzt zlc8vIM&8e|bzra4FUtD}Qs}bHS$5*d!Nc_j+PLV8r_v3K}S7?Cd~`OVZEk)b~!b)g2I zPm@IXyy?*z3ugJLKbiHkYliOiVimq%^Kn&nEO=)rK8*e;Z{aJDTs84C=v|G!xc0uclJmRuQGY#BN zi716~3X`=r>g@Y(*TurFlIKf%eaybKYfD{*J7yqD%GqG&o&bcZ@D>@~w0A&C z;qB!-3TB%-DMJYPYP&E6j6LB9_w`po{TdOu{z&X$+v`nQe-<`2vMwy4rmgE(m8iYR zs_!_442Q*dd$tK+u2G-m#CHE>hM5je@S~vY!FsFw@a%W z(v109yvuU)r)*-*YK{OJ|6JHgjmhPY@JsT~CaOo}g}%Get5{Zi*JS>%VTl)%H9>we zBFoU`bxLtL&2`mQQ5JS`#8b0`p}dNYyGxA!cF$%vQVq&xnWKxbSZeO$Ugpu2)mr{m zRbmnG+SX5W+RXHLsvgnFKL@QffWATj0`)d1e!*b+p@RJ@Mi(ZHxtN(8Due5VX}Ft( z{&ak8G3VvLi|27%rDxL~AG&RJ)hpAY9sIvVoG6jM#2&Ee@T0YrN#m5kG4VZ>9dEl7ns3rtZdVz52WMK)>(# zs^i>eqJ}e-p!cBSu|j-%2?eFU9^S|xo-pMfQuQi34+9vog|OBBZ-ode=F%8rso5b1 zpwB-w?;hLEJlE&Ej0LUciBs=qL2QRf%&cobhziK51P^8de3@QK49cgoHEW~StF5xo z46bPqURFXEXSbwQcLZ)XP+f%tF;?!5e9vG~(^`b4nX=mhO&8Gam<~BA1zzE|`#N%b zu~mu$7{}g@*-J~gLbPxRsQJHDrIiS*z?TRee7mXS-p1AG7>kws6f2eZG3TW>OV1aA z+qPWao6|8@E9WQ9=5{E^<{JhMTsAFpnF%!DxhUClRfg)~<@UgIb5mpz z?yYvy9Cn)JextZI_AO!^y1~E{3l8dz@POWT+q!zYgtQ8=X}ol%R{U_LEjj;*g-+fL z`h)z#DOaEHWm*b4r#REFc`pTXhNqRdo{EQEohRr2DHR;f{I*5$Dhkv!A={Ed@ZLMT zOH_$>T5}vCGjCHz3zdmrdth4>W7Lgg{P~_gwFZymooa!XN7C>y{~5y7N8Mhf#AqR( z$5d@d*XX83XTLiN%BN2%UMQ^NvcBGLFL%<4@6ohJw1r&`W2>DNPi?TC$V#}g4e1^~ zkRN@rhzvt6KFi{hxW3A%mVi-UvlHAm0?fb*nS_jyW_ucZex(XF?)z4M#uQvV z4q}M~Yqg?s7R&dQ&#z9~uS$KaFUEu#y>9%$GBqCE1kNI3Rpl1a=5 ziAVjN-jzD3rLq*~Gb=t^hZjwsp;O;VJy)+9TN}Z2PT=l#Q2XJ(Ni^3(KFO?{i~=DO z8h{EknWHtkXF@W1kAE|^98TONtdqe)I$szc@FAnTXN{zKvwlLzradTb@g0OaK0aRI zkCcH%wj?nooL7hVgfGx7(&%|(ElwL%@JocFF!Ix`OTL;acQ z4|nazfMf>Q{DGt(#>CB9RJEH4Q4)g%b`lNDAn&l-#r^Am;j^R!TrY17m(_GXs5|l| zeWUdM5IIS-i2gnQbo!zdtr!K|qgJdQ>>)Dd8h?BpUpviO&&vKx(oEwVGbLF>d zWrLwb_pT=cL7*1(N6?SKe3#hK;RMXe7*yi!Omk}GLqz{zZzb+_9oU)5;Pe+av_X9yK8!wzh<2H|!$=$r z{7(f->3Fx&pYkc^5r5v?3DlQC%ijH@Z+tVYHK(z#>OL5nyKjNBzCQ8&0*v6i8N%)& zUw9whvKGdRx&(hEvyiEzU`8MA9HlLL{}LG}%=KK5T=S4J8^FUONMyLO{4viwI@_=8 zejMdnK6l<}23_B`akb(w%tD8-$&)QlsDwtV&E+b`^Pv-0XUm$*y3Zls$dS7No@ z+3-PB_)NN=aQ)gDf;=}nT;NFQ-T>~2`rBBp;&QOSbfZqaxtyY+M!{}Q<0(Ad<9|g* z{jXPX*>=K#r}1%dSTaP`dZGPqIM^~W-FmPC0|PV{EETN$MQc?xJ%Fv@ITPi&@3Dx- zdd}y5X1l*7<7(Q8(EkCA&GFNx%~1G?IHgxQml&Cs=m`)DA_i#*P@+kMuVQdW<2zej zbO&6h(0qaYthlzeE5;lfBmBBJx1=_6K>JEi0Z&ZoFB-~JUcssmrg(s9Gn<{{X@6R9 zOi8ud(j8mxFJV`;I>gTQXc0O8q<3KbS{ucenov4wMtviN6ZEX2>nmwdH`?$`J{wHv ztos*ta@}r<9#aM)n=kFI6!RJ5ff~!ojWI5R-RTNQLF+};Z z93CZ}MUOKS)-x&4?JoR+qijBj%plQ@TC0#Ea^1@OmIIePYqI7ni@w3Tlrav%4TDw} z#~Ziz2a3IP-2uNa1QG#pYtA1APT>q$OzM{iwp4&Bj;v^|0AQLyve-C!eYeh*6TIoT$zA3p}d&JH`yKsV z_pd%pa4EY73&yTFv^<~W8X95+&1P2zmhH+G+okAR!~ARihX!7D&mxSOdK+5kRaQiz zlV{2}!G2jgyVI&iq#f?n#8O;A`{mC%)R9K}4YLm6op$p3&7ky7H;E`i-n^n}@~Nz9 zvdXEY>&ATRODLAJQmzYMdNqzDkXh74G#l2!gqFUx*9r#d81~0uAIuH@-bHZ zv>Dg>Z)VWTNqsnQgCC@h9GX~w@j_ENdWD?o4L9{&7LX&9PzK+h2M@$#rR=biN> zrr*8z&FPAkUXyLhSxe-#0xkh4#_POe;Y(bShPMoq7YIIzG|2}S@jC6wysUJ+WE9r{ zZE>&XfDrYxBwZF`$ga3b``;oyr+`fG1CN@!UhEphr2i{mNY(VO;O>JIN7l##aTOCc z<}gHLj%Ic(xK-G9w9!HE)>JT$6jFSV)YSr-ezz8W=9x^pXRSJens$2ufmVQF`FP;> zYN4ePD$x@Jn-F+xp6Xytl@M~jfrw!Ao=;WxYt>kH{D55;m= zzm7Y;m`}2O@!d&H@APPwvPj^LF26V)5(5e zMWOJCc0mJ28+xoNSmQ{Vf51DYj6q97TetAVLM|~eyS$h-Q==SH>9C1ArhIB;Xzn@- z=L=s(yN_7ZMyp$=ml#=S=6uQC(y~{b1j2yEcFT<`D@xpA{fBDxr#tXuJ8#>~?Fz#j z@EU9MaA`j~=as^IbBpx!;Z;%|qo{@{mnyZ8qkEII6RF5J?MnX9Q^g0zE_D=G>73;4 zRLqX*tgfq*ojPW6*nQ2LG4x}AT~!E007SPB1bQNPGlQPQm1)eAR4}kzY9$#wn00}I zmqiqydm)M#40E*&Fi+6=%8XZ_2y<0qNpy-P#xjVvedqF=j``7IsF~jz`^yQ4nDPQ@hp{hh@l{W?LWPC2s&4u!d7P=a-p=Anj!Rf zNToc{oHg+~UZlqTe4P&{j~qJ|F-4&j>PVvYkHfeE_RE2v{(|%TC6JBiKk0@^g)oq^ zW+XG}d`qphzru*7AS?%pP~;EWxE+fvML>fZNg5h-ZM$_%`aF4*`~-k1RpMY9L!6jv zMMPM``dAP(Ns>`y^O!rg?0(cBM?VTJ^a6dtP0=_y3}*Lf~whqI$bL7=mxk9#bBM2-<6?H@k5Q4!JnM0&g6lj%fR zOYo}m`E2}=j*9Sh)dGlnnac|$`ka|5H+yZHeYm(Bq35StV&(W#EDEdQ<@m(8>E|Yv z4z#{1iaXF2oC418EC3hfm$>Hpj#&W=&;mfFdgo{z7k$A|4yQ$leWK^()#-Zp>!AO% zk@Gy9bJ+QG#zC3iEVhVz3MZbl`+IibzbGB2O8!^6bTl{b?z z(%`N9LrDAk*SnXk2H%G>*%!or+ktAp_VWHN7v)F5cmDkH`6l(dWH0hZ}hP$X^kc>g^?dBF-esoDvU^+>F z93uauzGoTQY=JWP=7JpO< zTHuAI7FU|#q7z{?rLidqmo2Moz|wlE$B)Xao#9cr-^9*o83eQAqO85yzK>QM?ot^O z+qncY1jcb5Q!{pJzu9B%&Nnu$?Ya);e(j3#8==8^pD#C#Mh-RFETjt!-J3@JqS)Wx zAC$}yuZlz$@p~jQ3FHl0@WyvA$>%y9)E|!4KQYA#zmUxlcle<0veIPtb-`(6{t(5s zPmY|)bSUZW8YY|Q9LdLDq7_I4HJ9syu$RD{G$J35F{A050@vHztCuv%dD+M@D1>Yu zH!3@&=3FVP-h&W36*AhL4abT8^45U^xfJm9iri#hr<)C=dj*$nJN{N0<9Oc6Q&_ou zlI5?L2DDc8aIE9SI@Zu{~FSLy=iW*@;R(8 zr-;71vbxw^gmOTIZ`$$g872!y@oq*tzekeN?8@DK>(bAAksh}hk3aQ%NT{AYTZ*&3 zf*J|(d6qmflH_(C^}!8Ce0!2?2a6k#P$~zan;h<;t8qH|m2nvgl&wzZ!TWC=%Gb6R zY}EQ2SD2{8f)WPe7wr>WET`??A?3VHQM|+%>vYF|=t3~+O=UBQWDjw)XqMRH&78vU z?F)DUo*MOteFajc;oCn;FjsxmII;Uc6&KqWYV%{h%LUm=VV!eCrA-6h{Lr0dTu*Gc z8+Jaax&a-Mk!Az?KSBOZ_*!&(#a)LX2Yy+fQJ(&_-{3db-9CqVCbNjpzRy&NPT1>peFMPfTJ82^21FuLQ$+|} zA%La3)zFmCqM>70qH{??!uG2?Gs#LOLen;Gd;#zLI0$8DQ9b#x&n>&rT+P;zD$E7{ zd6EC}fgvJXnR?{$Y2$nOv0;P^tMtBiq2w!70(_kB?aR5}#x<`K&dX@ma|D2|*(^tS zE$oRB#ZkLTRh_in0HvSd@HN6ON6LRaM;A9uz3dkS|7LJ6M6h(0{MU8Mn%}yUxxwZj zmB6yG(jp|IGs)%OYS88u_2;@^B2EThrzTn|9VwO~2Tlm)`zGPhVr{;C*NYp_d>0y? zrG>0jSdG&<(sZGTiBcE+rG@(iM&-W>qAEW8M?9w`KsBDNwH$&uX5jzGr2kumrR%v4 zWyP#B?~UVpdPut(IoxipENQ9{kQ40wr4kkrDv#~ zd^mxv+;CJ6ET$=6@WPorTVuJITx6NGd0@R!qHsfnBh2lu_n8(8w~#*9$#p%zpex>W zYQ!buZrOn5%$#S^zI)Hhu7axq>b&1ZMJML`140N2`333t*NaN?nbrtlnCC0G4$njN z6}UZmPb8O^%Qn>l|4ar^(#PjN@pXAt7>sr*Q&*&@l89XYL-s1d@VWP+T^USjDSBYMYHi{vsEzz+|t7lMU#a z95`3w$zk?8xI`aK2K{_U|B%z5+o4$=Ybps9uc6q%js0}>EkACZ@?-NoWN6y(oI@WZ z@&B%p`@QBJsA-XJCHhK6OXS*YG?^%$DSgZmZoW*K!iV!?VC*C8YK<3ecxpK+jg*(Y zYZp>%vG>XLG;qE;>^Xm{V2xqrhP$mz;=PJI4XrT-fkC<27I|d5Dc_1&nl7V1={*qv z8E;CDuK@z7cOaaPwft5jP?XrT>}+2H_wUI_HQ}dTFvZ$At7kZ+hF5xz#Kyl4X)l}> z9}xW)nw%jIM+DcQKyR=#0*kiZuvQ3MXblU9ER&&z8$=%qbBxm>-P>Hb=l+b?WF;_6 z2VNdIcjBZ2?EohCd?x=dz`lhpHSWwYdDQS86L%k`@#$CFXBIsSaY5CMn}E4UGEClp zB1m;NN!@BFO*LxtkJ{7J!A*S(hwDmln)T(wQhHWSmd4J+ICPw4yzI2Z+0)mzDfyg9 z)&6Utar&$)*;@8c0V3*-)7MgroYr3+pY^Vn4|$>Y!|&I)_tjhth5A8+t}wO(D;#Jh zhs$TYAj1D#<*l}q&pRhz1A19ot)uy3>r37j)@Rcn{VF}FyAo{s_5U_5I*X99c~dd} zYlJfp#CD6L~=PREYHpqqM78NHL}yH#y@- zz{jwycRW9^Ux2<75=?>--k(%pAtkU0>o%{eJ=UK$wlm=5q^K2|#S-6cTmW-`cVwI# zeM6*)SU#;_%{O|-QoaOQRBP9Y1u6H4Q7)i^g|PJiJ8NZjZiI$|V}@>lP%&;0FDJL6 zxS(KG-Y0eD&(uzm{^SV7K5`q~ENzWumajrrH;%j^HBm8B*9u2NO%fCp)klQUH$C(-nQ*q<% z1rYVLlJ|>Jd=y9$8n`;C&(ae4!he>v6W$6kXHS{-JHq)B`4Id)!Xn#43MeAVj8NxZpiu=_WSS+dy(MW-0*N+fX_gXTdaxF~<$UTCWr*9w(>qr^BYbTFZX`0vdQkA5q^%YY+_5o=45mOAvCQs?}cPz5EbX35h(EbA|~RIWN) z+JZA7^8gH-4HLO;)dyG%;ly<|;m95V1GrWJF~zdS<}9d}Q7(@fEVy5>y>n-c>G+Z| zWvahwXW<^mn3WG(&^ZI3)O#vHvrc8u|FZxKz9HM9gfLPJ6X8RFPFM#&wU!jW*4>C2 z_mTwtIOT@?uw^wJPJ$)r5t=#u`9quzhw;OHUuzvF*R^ zBfQf#gdkQw*1W(&wXyPRqF(A%G{q6gjloG%0SS`3#2NO{-j0!`=t#qOb+}KUSm`zk zyOo3|H8+qzcj!N-p6|x?X~KS;L|x!3cjA{UK>|QlvTe(I)eNMUyiRtm}?xr6E4;T8=_Fcs<@iCsUmgD?yLDTrPA>DP8y_U z9HJ@_@fuzkIt9N^-}Yw4z|fAVU9QBga`2rad!C|8oxI;nQ|mhdA=g(YLc z!GTQXw;K5p-8F;psBd76SSOiNG_3Ag*cG+4e%)YIw7;hW!|9LkR9F(dJjqo-T-Vxyj;`b631q$x89@ z08VQ0zo|z0+MvLK`cf1S)$g>X=(EU=KiLuH1c)I&QliKd!_q7$%{%`c8%>2ug>x^p z)P#1K=MI$zxqn7B+lYDmK#(XHd1kq;wFslKojdu&q&D*70EwpWuJcY%x#gq9XnXf! zCBu@c#WMEyAMf8Ee=Zat+)vDU4S_Ko#jV`9Xag#DW{N9&LfBjZ(U_z<@9K?iQ-FlU z7-ER(r;Nri;$RR+FpESa+B3vq*|FBIN<|?S$f{cD{qe@Qv+q8Do&wCWo4gPuhyS@YjtiJ5UmBzfM+x&+1}?U|2L z2taBWaNxT$n{s28Jpvj0`9+AGDM9SHw7aCR4c`-pCh}u?v>jmww_K5aQ_9js20!wp zHm7y1iI6@1G=M90xaZmA*f$G-u|a>q-ZPi7YQ`RV{3f|9C3kr7BA@bG>--wbf!d6k7K@su%AAL()$q z77t<#$k0FD8HY^C{J~@Dhmpj4q+`qV^_tPXAKrt3gWnrzso^(NLj>WrlhWyLy_53! z!}6S#i1Lno>%)`?oMl0f>m*_vZqYxlp~q|$w01ENj1sSuC;C&jYC-GM(+ zDI|40Tt8a*0d{7YUkC7NWh?8?7-poN^)snGaHk5d$a+71??Ho@MREtbi^p6kDWD=0 zwE4o! z_1WttG$$ksiv15`$a{Q82|$Vu)EdhkO$s~n1cyBZwl6OKB-aojY#+;|EOxeZtT_eb z-J{2*Uu2g&9d)ub`>FgzxlYTq)O9s-oh4gFcsi8DxtKNIf~l^%+c(NrMtY!0>By8v zSzP)Pl^F%bZOQa6W9t&gvfrKUHr)q#KAMx`i`;)BekG4V2SSGAM_OAd7>k-{1Kn1( zA;LL#pZY#33DY6eG`WiXpxnp%*Bg;1X8^L6IgzDPdcTPfau|jMWICNb>F^0tHKi@u zB{o3mjT__eIKlpKxSq7)2x+mF6U6&XjQS>mtb@p|PQ-YG2A@g`F=s-5#Y78G@-TaTrK4`mQ^? z$v9IDLkUEztsi8EEhGaW-NLFEt&QY(B!1wu&7v}ZInlQG?QTFm#s=^(oIc#DE%#_# zB$V7+C(MsTV`TF#Aok@P*MTF6a7m?Sd_;^#b%+j#6|{pb{T0{%Ug^96vaF@e2)MNGdU?=F*TuG;9hIfDf;=7)(o0*FJ{iqaEdRxc2{cIk z;w_VGPm*0oLuDdN5;LZ{g9SWNALSLL&5qU!Yz6B-Da-G$1qJOYpP+*^3w&BEIFJAF zb=10rcruX{NfW$@3MPd9bgR?b9MsGH`C(K%>omE`XIkn%e2TcyB6vQV|CfBYflNS# z9b7v{wrM8aV547sw%vM%`_zr6kqg5pVD;kcFE3Fy$wENsG~#B@V(nfxE7GSA zncbKnn217pySy-HglL4L*OUU$bgSS|hUX9n%-f2tlYC)Cpx=A8%iZ2b$|`%nSqi&$h^ps zkchT|e@v4D-}zsGze;lW0Dy+ciEp7ib^)`Mv{8 zHW6a{i$TT9&keYeS{xOgZrP{U6Z}E-|9w}%cgNCKsef*6P-&}E{vVpoDlDqDZNoEk zw=i^f4Im&PDUFm$GtAK4T@I@RZ8lA%9){-n3R7KRb+|hA3`P>?XBLPif|v8DIJIVlw-! zg?H#8yV;arl=a^R)Pza%v>cKX|t9y=zy7_rj@u1_f)mAgp0hsZNS zZTjdF7H-!o5dzge+kVgaFP|?ySl%#HaXvSbmQJKFG9jwua^YIW(I#`uI5$t#|S3 zjMl}3JC^qdc7&|(l+-ZcNjK$CwRgFJ)aP0^SG!}E4ORgA*7M@{dnzywI6L#Q{>&GW z@j+D>?;k}xwk5S2uFgoAz{UH;7hFuAL%IynDb6fHfldj&Y-H#oS1NKO7MFj;tNT>R z@WD7I^wIVG(xaXkbC!Q|X6&_(umSKQMkt50Jf|nUGS3LH>>N)^Th(E#GppqF5D+}m6d{sFQNnK<^JXKtExeC1Tl>0qDg6d!YEO?^Mt}u@u(chd*`<8jn zafS=;@_o%|Q+9W6I=Wz19-Fp_-PxqjUHIRHo$2gV`Q{fNyL!mli`Q*>Q6(y8B$sN` zl|Xye87jc$qR%&ZVTRv_tJ4d@;M>Aa6OOb+4vTpNhXXQs_q7;s(q*sxrz~AG-CW&* z9;(TcYXE)(^ZY-UtVXykMtFlHmMk9D0Tu<^Pg-YQ*QdLUXXA{`L}CeoRlkID#wF8dAF3#65en5I-%(HSAY&A`r=&cp->jF2Zi&h=Kj{)Rlwncgndp09Rp)xE$!t z8}|bDqF7`|&_kT?jc(=!PIwKdHz-EaPIewQLi!aN z$jJzL?sd30bAkW3>EsJRM+zS&gFj1lwTI6{o<<2VaBuL#aW;6^mM;UdcS5FPNs3j+ zvC^%mIOSlD(A!Cs1k7f7FudZRDG5KOnS6cbrukgdGL5ZrU@R;yB!&B)0f8+?4=~z2 z&#LvW0h*R_bw6*&Sfl<+CQ6o8mzMPym*mw7(_^d1YNbfj~I@)9-uqvc60%{ zDN_1KPpxhZ<;IJw0ifjFX8v#_`--@nl5SVsz=^A=|!nJEfA%g+vsk{?tdFz zJ>Bn{65C(i=NeX34H@hgXxwfOIIR$Yg|75Q$Ar?R?Jn3wX*|_BGThWq;x>o9I2P+2 z0}xUrI0>ANc)?rswj{UJ@Pp^L{p4xIt=p0TO}Y^BA{4@{D9Yqrkgdv?|7g!TEwbKD z>bj1(o!9Z@9?Ts+Bj{YPy7>IfdA!R+SF0v^(~Os%@A0Q-*RTXY43^r7YBi;c=3?YD zMAr=fa$4@l*$xFNd<;*!j`7IF_{L|k^{*uT)`&`4d>~r$THhzJQYZeDj!Zjt>hE>> zMmCqz%pg0O-7Bt0Ysf!t;y^*TuyAQ|IYDmsU+RKmpujpN#{FrFvzq#cem**#Z-oE& zX#Bda!3+R>E)yN>YvmGle-0B$$$qvxL9R6b?W~D;vP`(g7-|I*ajgO3(isqH4=*oD zyNB`vnj+Kq?}Jfx!PM+*2q!Y$z&~qkk|E*~G$k>opVt(9lZc7(^J@|;I%^moY%6e7 z32q2#0kv&FNt79D9uDT^6_8Y@s3>h7s2nrG_QhR^Gv|&6TzxkE%f*`_(?iFj9%;0% zG5&01`)E33S0vVol_4*`3Ri29?x6#q`-7=95kg0^s{`1S&zd;^oDY1-se}f5_%GBL zcpD`?oscM;54eXhYk@E>nd8IF9ZB<^GX`HII#MT43p1x+$#HS{8!mv;bj8V9l+m2I ziG!nMFq5$)rmhzx5QoKy#FjXKuMx{3<#Rr^AQ1gnyOsI5v|Qosmk$*OG`IC#0MK)a zsQv9TvcnE9WAf{wKaGx@U$QuGSb?TEL+L*N%EX9G#N@5tl7X>@MOoagIXG86*oy^# z=&t2C9Os!!G3yJkv2Qo#*#2XX@9EV)PbW%kURQV8L?=o^`?LR$++#XKs}kuXFx_?F z@hsIKdUtlN>yPS^U(%m7+ z%V^a|8?4vWj|j;mu}Uyz3qPICCg=zmqbVSKQ#4av%ckV1S}Vg?YqGzxIBu)Y<47e# z5B{w*q{LqJ*&)-raPVxym|{^72*~IzIB0-P$3KsjX`iY1}Qv>Z$K8(V<}71jmS0D%)6(`qO*Z>*XAqq>?L5`bq&d&)4*& zGWI>9U?2)Xfd+AtAN>dpoy}S(%1lB_HF(Fyv2qKl7Lq34{)L469TpdlshU7nzF*Veg>vC+} z{uc%fBGlRY`y_VIbw$`|eAfR8?*`qju!@;VmI#THeTrh(GNfNN5M8N1^?@LDHlO@C zISC?fM$7mWfuheM~^is2MS$!Y*6vFC{1r6oNR|{jj4`i&_my`*gJi5HP!Pmc- zxE z!x)ItqJzhO5_rZ)NV#M1hW?jAQ`XacXHRB(G$I4@V3h7~N%|?5(a}H~odZzDX~prs zY8Hgy9lK=YEA=;mu;kQ~n&n%=ox2BotBQY?9whNp$i68go}(;%SPl}+PA^*n$bbN> z+OIi!L&UNZij+6cz54%2qsB6Oact<9iG5oAfm`(0mO;$!Y`^?c8U&wtG22@~gt+3@ z(pMW)c8BZN)t18FY??*?g7=GDFSCV|AEs1RYbC%=ID@|&Iqd!%Sugr;q@&Qzx89;n zTRxYQf;5XFy5DrL$}HC{xJbg_Q{fi-MQF&jliPfzSFx!|3&{KrRLjR6(+$BT*sEH9 zvf0?{)Kv?3AqpPE00yJ*+=g-A$DCS{?yyPH*M)4nC>e8zZ&vq_?~(;hT^+Uwp9M5x z7=2N6iSV~5LGA14HEe*}n}eQV>$P9I|0Qt^iM7zjxsMmy3s)oLbLCVV1g#>N|JHxE z{vka7h>OmVH04A{+Zr5Fj~+}bM(7cHS?$EPM3h*GV1*0b1_UzkuJ$OMVSXQ?z8vHsC^#zL_nN`bi0Z^O{IC8vos(R8j zIK!)Xgt|%PxSCrQB*#ba_rsQS1r(|QH1|gzrl0M^8+02EVcx;3Cz(1qwjxdcw7huM zt%zM=>h^_17*#O>+mV^YyOjo@#o^3ydQ`YoEnaayjvKN%aY}!P;U_j2)`X>%Ey{=( zcfi_-6^Ks*Tv~(YasdRA1n8wdzM1aEc%-=7RLLx~%f(l4Jay?<4)`?6Dep}fN2a*R ze#J?g+ad$~aR13cr#kaFRt0rv{rRdu>R1G;5XP0p=dIr}EP<%Ems9>a_qvN9Ihnv& zx3Cx;Lz18OK1m#>rxyhl?*7f##{5#-V)&t!_pScTXr%CLZU5O_8QyD6HaE;xCi~qZ zjUv(GKODi;-q{Qqj1>ZdaDzN@0Qv-OA;F>2i)g|pT%K00>?6lUMEyg9?T}7eEv%G- zL3L&$Q?t%9HnC){lF-ur*yN#c#FY=h_BXZ=TAi*S$Ppj5rcQJS{~hm6$xXS|oO}M$ z{#T)L&DC({SsmlLF7u8g&3V|oNjg=;CyaN*Df~%#%1aHYBveC)ZsnX46W#76SQi26D}z(y-EW`vvu z&(Y>dQzqfSc-@%LEo3X;9+;VXyx{*)CXN(gn;oPIY5_PxwyhWfQN_g_Gg|P}Ey7}4 zzilUtq26UYoR}K=5}9&(>0z3{d(MyHcfTX!->#js+ppDq#YR@so5-ic1}1Hhav)HI zt|`_gYRorSLAx&mo&3Vqgu_oeiA42L{|G5eppcO&l**e z@y}%i-S2PB{pkJU^Mbeco+Y1$wGvXro{v!eJdbytQZd=xueqo}@kXz*3<&ibtqg^k zPr9pZDnmi25Qa&K#lRY#Tofv*UPvT*kP_bz{2jAjd|y*upG}BUCYBW!KvVs?#N;>E zZg&i%@tdWS^CJQFm^Cit=(F#xRM{N9c z)GFKaods+CGX`t2C79|j?FSh<-dn=pFFMg~J&0=rJ`x)$_xetHRVJx$>NxX&=qSEM z(U2Ic>9X@qSDOO1NVyrYVg;S+4Irrmpfe@et~F4_$T0DZr2Lctb%5sqfCX{Ug;S@(_JEdsJ5kxdn16Qa| z3^&MX67=Na!)iQK2aZz59wc=86~%jCPGhv5-9g(i+&qSBEVq@qHE&IHq@3K$2|UFC z^e1RcKn@B-BC13wc^~sL142Gi43H91pJfdpskOF7p>R1-%;e8=<=%6o5$s=}nv>A~ z;)h&U7h?4m-y~gn_zWT zKQtKZfnV0!v??E)<<;+A@s_=K`sqY2_*)x|Z`v<{#aW7~J^h*bZ>(v%nB;0s+T~??HfK&^tHxKmd=!1N)j{pp)6Lg*|ZbLLp=xAU~Zt0GB z|0KX&8_swZ_KGG@-)H3A#9fBqKVk#Ki#>D=+^V_<0b_~5EO(SP-|X1riaKIoUA}TO zbmIwC_}D~~3o4AzgcdK#n10<=x)XFFmlLh>U!7&#l}m7T9$w5VU-@4aVCc5Tbja8_ zhdu-|!J-l-T`LB@7HJPlpnkx_V%isF=H0M%Z|79O3+Bgxr#}vZywSbw6y=0M&{dV6 zut%T>vclfh?V_OK{L!r6Gw-1xou;@Ban%o4P%IldZ}w?~PpsJN;d|QO_3~&Sl1bG+ zYKHRqYN0+>jC19z`xlS1&3idQ#xJL$r~y4Ro}Z1M2#M>_%iTg;p2FwaQFQ;yj@2-# z7B7~kuozx-LXq5dN&FT#g@Ng0bgMeQq+Y4GFrN2QdC)_E0++2)azW6Ix0o=Ka{CwU z;W_ws%r9+?hW(zrBj;5Z)wI#{FgoQqYs|6FYqt}3)3{j@9l)O;Fe!a7wJvavQv1W<&B zUr11Rn8+e&uz29KSO{z2jc8#LqnDLWIXuej>*H7(*ah6+e1lr`kf_QH9EVHWiCc+T zA_+toVL_8o5mb`~fPq#Nnn3SF@wLDAxOOUP>ucvf_xxd2Sq~zTMav8-w&31ec0oKO z0mZE$Kwlhy4o76FiAo%RfPjzBm5Z?-!U7DHv(1C&D_W&LkPzOAH2Z4d^#JgWFaK#7!s!1 z71Tw(V&hZuZDlB4sSzj`!=pZ`1(Meug3!aw=8j#M7 zz7x4X7B1|ii79946TaJh2NqQ5jO2wUiY*`LDB9_+nJ`gBS(7Y0jvTReEM280jUUWL zev?jpcca~SRrlaJ6PTBhw2;%JC8$Kp9v+#pLUIDXsrUmff;s)CL0OCG_vLwUC8~}Y zqfEk=uy}!)0wCa{5EcB6k>95HfykyY)Q}+Da3~55?G2W-D4847S`7!7M*-3eLF4|x zy+NXr!g`q7b)HBnbWlwbw#XrBYI9*`hy`la$C|A4+s1ic4WkXI>`M7y7KCE{{y5+; z%l=s(5Sgt}c|xPR`I8?{P;6sFr86*CsLdiT9qZ>@l9uDWxd7(?v*5IaUZNIC$_ok4 z23^{aR9>zKrJYhHqCL1cMM4A}+Qe}QYc6IExzu=IqZ{EZ?b2Ejey?j)WrZLLh6zN) zF{M3ex_;&pCs4t!SVm&miUBsRZI_>6R(*>$eyP-R8=H6}WgGyk@qRe^fxAW%ep4K? zOMh{yqK?6i!L6A0*&P9@wHCJk&WY7JnI%K#GchiC%BL%HhP9~*)k2+-VLw(%YE4(_7IO-i@ z4|kFVvi(*@4Jj7JTj2*Zrlrchn&o`v$A&I6P(zLCiJ`txUgp%WWYT*r`;5TnA@5`U zb9{_fWcdY)<8fWiHsN<%X;O2Xu@ek{oZ+!);+jHo1LZyYKeq2lvv@~Pd2A0?sNGzD zS1ZyUPyk;HRIwY)&FFPT+$HoN=HTf<)(s$Qvh zs_x*n)%zr^A8V?L&0*$AV4_HNlk_sPg`yw-{t*!_G%KJo!$B&)n$ql-*AuHf_mRA+iak2ex-$FXd z^A<0YqV8NNU!~AJd; zetxZcoxW^AJsPpy)UR%Yl!XdeCY!SG$g&mjA^-R_5S*<|8@Mc}@{m5d8J$ z#%TkCQ-fUJi;F#TvE$bXQk)xoHk`~=nab5@{|GhF5R~b{)p<}_A;$j2-SW)AWO=(V zPrB2^9j)4qva!_mLDRv^zhcS*6+j(h1JngO76OXR3hz7#kX)~& zzChD)H+etsOMZYQ&$PULOR5Ane^{nY(f~=29ehDhWZG>m!U4D>W|TSDmmW68`4uVw zzR$RN$;7Zum8Tz3+=ckoionJ{&@ZZ-xgpddnzaEa+}*1hERyt-$zeOwzU{~h2AINj z5~aUh%fBp>Jc}+`d+rAak5UGLnX#XJAL1Jlx*_|VJzuDXt#|o>J{EOKQ3u!@VqB^* zmblpWOpAIC)O!{O08Gmn%BWD&$;`#-Blzop)iE`(S>;YJOW(&mbcmOCL_&Ifm3P$BJO||ZVl<5t5hf{{`6cb zEv6V%-cRwo(^tY4B2aZFEY7XS~|8{Uc%5(KuQs=*ZK?0M98^GxdG>z?4<&WoCNI`#d|P`N(Gvli(EnV*uZf4~>V!G80+^q71&ipe+R zeW4gelW+=YGq!K6T}-h7s5sM8HT}t6p#P?h54Y?MQa``OCa^`$^XE-hU#Xn zS&B7($U3V{ChYu5<;~a`C4;Q{YbpAYOB~9Livt^6PwiU|^$$%X9uB`1jsmdFzaAJa z{$7!Rp8h^OT|1FjLi3L}B$^#42mql_2mqkdQ~PVpcN=FU`*?rdQ#i`6Kk7)y<*DsQls;xdBa(qRvD!Gy&e6o?mXV2g z+#{L1wtsURSFSJM9aXl^&X@nH!N?~RT>wed%OKYfIt2PHh9w0PQ>*hq;Eoa!xS6<> zcQDnLiTQ7DF4KD7lH5w!@+l7+2%fxt5D4eTH<-oSQ|s2^{MCE&)#S!I92@MkDQu{K zbc9}`DC<6BI2_v+|lpS!$|X_stJ za~!9iNW4Ffn$$JbwSkio9Nx+d1a}cJ72)&L-y4>!n!PDj+1cKYD+pRqo*Es*bP#Tq z^VQAjru(4nDE6%f_cc!}E?Go8kiMkntf54TtQ+ZhDreg56(?0J7>4xG`E%-ea z@6auL8*dPt^K>jMvpqBPHj>cG(vQ>GP3@VneuvZA1hgP{)94zRvL)pyhVTetwUKdfgONzj_ybyr}6LQ0qX1D8XLNm;q49n@QZVKOXJ26AF#d8qD@|o z*(q98BR4>H)}3zKcIK)1bC7=X>nS5YHu<&<-(6}!l1u~ynBTd-Fmj4OPv>Q8j`RmM z;ef1m)f#{Hok?tmj$*tS=EweU_{$Xbkm$daR}4d`iQY6TD2_OX=t-5&CzLtjM3 z<(cZgD`~A|v8IFwFI5~3N|re9#@qe6QCxJpg3soxxK@50rx$yE_aIT^-MStoK(U*# zl?Z1(b%R#9>A!`%^KnmYFdGh@bW{sH`a+5(004c_63{s>!E_MKm%APnn0WBSoA&Vu zJ<2l5{VXz&Op3+>;3Y_RCu{<&H#r7`9%WG9zI@trdRZpNU-SWxh*X=CL)c^PHC4;y zIP<-|9n`aarXQ0@H}Dm=+g}nG8^il9%39ahsN^>upis|@hkxqtaPwl8w?20fvHeco zC{3+rDpo~K(PN3)UXw)%gQ<*Wd^xC4#em3QHi4~v%7I~}(O zlpr)z4F(^IHS;;O(^09ZllP`bsZRc5Jq;2_;Ik85opizKU;RF>?*FRQV1oBC>{o7+W1~4QZP6;g*skVK8ZxmiK>~ zz;42T2AOvYJrUb}If74SXyJCVQ27Hlc)z45`|JXdFNe-H&F&{}E-wZqX)S)xhk#W8 zXeU~CD|6uGKiF_17dRENRz!2CqUu*jwHZp%VMU=kH2QKuAnm8c02%3tG5VH-1>KPHlWvbGmRqFe-#`F)^;_`$fV?~^h{nox!#Yk}4r<+p zYk))}mUFkx8TTyZWvvEraXQn_)Kk=2I%8^)fh31;(rzNWi1GP$x)64EeuN~FXZjSS zHT;rAbs$#R;4%iY;2jZ_Vvk;1_>LC^C^K5#Nv;Y1X3t&?s?yvwHN+YQeze`f}5A z2n#fuuR=Utt1Ez{(gZxdSwi<`CGQSwMY67AdRQJ|{K%CB?uq2wF68_XiAVz$RzGtn zXsF4VECL9szM^Hzm3zU)#COR-7YAmMwK897h;4jYO9CJ-BNC8q9Ome@&1ytOdb&1e zMhR58O|5TR1uMA3*U}8$fo$M|-lUv(l6_2GTOK#h=m$%tyL-L|ylm5Pw%IKk{1JpM z^CR6S+}r)Q9PK5zQI2@5t=z{`plq}pt^SKq?hc$34tnF72^RTxydr`(ZKMC^`aZty z@L)La>2+OsT#)G3&sDRYXQFOOp~yq7sUv*rA>N9&_SUI9IGfCLy%7;_Gqy_EvC6sL zXxT>#P*ClSYzNT~w-f}YjX4hABpZ95!3*ica(m@^Z8p?n1Ehm*%Z0fhza+$6qWXt-RwX_7-h=uk7r$4z+Q259m7bj z`xuK)q3~rP2YYl`qHN;o2-sGGBEY(fS2LSLG3OUUX4n?tAS;H(;*qEbs{%ruAYbx`BrHUx3BSkmf&+2DBUvC8fM3b znVswOS7Ott?KqB@8ItmlErJ#_Vu?Isots4FL;2?U$-cP36W+s-BQE)EE03?*&?pjz z&1YW}>G#pNas|;8NV7LYcUh$XUT4e;nc#+}pEJMW$1^+^KF>Lt>WCqKqa@{q`*e!a zxNf9wAV8A;^VYTb>mY2m57HB|cG?##`*f!oGRxRLBpcKK@~fM~%8}P%d6lnA_f(`_ z9LxJd!wh}MVNoIRfxG7}S96VQaMFrNgsuTLp3)DGS9c66vr%!GZKfrNWb0ce%fz4W z2~n!77TcY&3Tutd+H@K;VW<{B-3>Dre1PAr>ckbD94RDvAsb@*RAw&G1l!A$pk z`yyyXir2itW~Xd>B&hz0$Goa=+wmw=;jmSwTqI2+9~6-5UQrUax98Zw^S{lYNS=S-c;( z4247h2*`Y88eNi<56xT*l^6PMq9+pV(97dGu&r&=;_V;+3h73qvld4UnztB*;l!MqQ%&ZHT4K`xI#o zfW+P=SbGe`?RNH}>C|t3^s;_r=_nKatm!gz;>*#}@szX5*K9iIwfo&`qji4l z*Dq1d&~YxSRNYQBNO||xUO^?vhiX4MHEkxqCDeF~Z=$UZf7(V1^``L*jYqQ`&qH66 zXuF(APQJKptn=HdB*+o z{ospwGil?)&xl!c4dt?jDcu0S1ukzx8TI(`buR#jR|R4TZTgUuFnzwnhai!Y|2NP% zlYjYdPY897r-#Y_XE^(~+5mcv3V-ohr)L|9Kyr>v3!W7<>|bp2)j9LPq@!77*xF2uV_mxe$Krr_!(VTn=ot@{^usu0uVd3@8QbsQf~OXuMjb)N$b$ zr!5d>d9DYLtyo5;x$xFaFOA~%mEIH-`-B!w^!UaAJ1S$PGOpeE?rj0DFpCvlRKyw< z{lo0h$U3HQ*G}lv$b9&Y#z%~8>_6f5@_O2>GhC}dQ8n1;K&2F0rX>{TcZgFR)}?Ij zy3|lXO)DSj?ec(}{pzEr_CW|Z3}^F0_4(8+gq))qtVlRb+`H4|LRB(2Re(q)EE3^H zXV+uuzZpT;hP^La0k9phP70qO7!i@hxl;n`m`gBOWXgM>G6KAq%8SP*a#T0+-F-mC@H9o?w)w5Veg(p6_=0J=*dFP^*dS#R5IMzkhR#&K#MQNr#Y?M~Txfo#v zOZGxD4cgDt%T=C}Bj9v{nWIBb9vUBg347OlBeF3d;4ax3>2h9HM_#-5S3%5O^E^%)DejMk2uLM)TzluhJuPX|;+D zhN8d@hWuIc_}Pb8mHp5@04V?Rq;@jEPXflqOtLwdn(tB#rh~C1dca;SrWUj;_*)eZ z2E%;WLZgAK=(D|}SWwi-N+Kit$_aQs{pIx54wd}#3#ud9&Ysymv#1kwUiLXLDTngu zvDL&jv~j8vubL8Y;6pI#J7EJ?do#oDbnEdz2GWt<74T+n(ydSy4MfM+8t8D`?~f`% zTthFcLlrcey8d(d87NUIk;Z>tY3>^r>*HdLqGTPNMNtap_KtAM6cO2+<5{hsvATgZ zG_DOyn)x$}AoAqn#pnr*gjL zj+bp)8`r+l$yYfdwsEH?ixuKoBbXgI)Q2JZMD=aTfkc;;L}l2=0#a5JkOs}kBl_X% z<>Zw-9DfgyTk7|IrZ70kZ%o>ViZ?(~C&rlV4AF;*iuVP)+e}6R&}1qShenD@4a>|k zG*CkBjN@3ppN#;42d}{p+5q~$Elfj^A{eNL688(??*rnL_!{~2Tq@f5v#$0HUrMmo zYLR4>KV>b}341HW%TS3V9X6>VsVW5e4p*nfygsENM(a8xGlXvWLrtH6Gz1#MPn&zO zoAW*-%YVZ_!pW?O(NnlqS*x5`{x92A2I2M>0NCZ*XRCXUT5BFPDNl_uuXVjS@!+MTV$ZUy`Rl^1zhfoM4#J`)9oZiGPcJVM z9)oW=9)?F!ZwJe7ZU+xCP(Sv!X$#4hIdz=-?|0e$ihFXF{B4bP5PBbW1OY>?1?Z|8 zVv+lgRsAI^ziR^A1`X@Yg^>UdF+Xj^htDfei-eK$$$d=(X`D_HtyEHkf|`O!siYBz zSq#ghC`#+>)x~T2yiksmtsP4XKm!08#CoiRv}^0|&bDDND_U9LOf}cHQc$_ij&S`3 zqcBiXnhe)}eFSWQD*ya;0CiJTtiq3{i{(lgRJC>w!CFb)^5??1Tq)A26><~8YNar; zivB=141Ug)pr$G?#{EN%@L-Id*({mcnG$1gY5@2(wD^>j^(H*gz*X7KU{0 z>68Ntpd$YWAvzqzg8=f$6r;tMkjONWcsdwMRr_rzkm59Z;mVS3UZi!*`!c(MZ6u10 zbVKMU;th!w#!^vxzZ1z>?%JkxJY~`=+C>b1`GL^D?uk6Y<=YnsOzAPOQtqf_XQCH~ zwXXdx!I^eQ{;3e*g5-2Wi(-H{;8!j^VF$A(3OaGZU+pe#1&tai-e!OCI<)UbbBjHhCz{ltDLn9NA z5R`th^t606kP3UE3h==huoK=+`l2OUWFrz^Ja{nr)ACCF!R9JxMaZ_0W;Cl1=~;xD zrV@w88HyEASv7tt&8e689Hp1vq8;uoF;=d1qlbMqs5H~Z^=GQzn&|_Y*nX2lRngD`U6G6Mdb~-eG!+tbKcQW2gB}OFH5rtAHMU6IqGy(gIke5SiIKs%srqj{& z6ETv|HkdI5C>J$BKw%+{Cp9FcM!B%T$}n`8whW&5bB%Cc9IbHeYK4lETdY%8$w`O5lPa_*u{AY#nm-_#{}(+Y$hVva!7d;9;s$o4Y{k4_p{!A1mR}znaOVDKfCZ3aEN@Q z#{@&l2mg-~oarx4#je_J-$)0gp~fliS*b3T7b}_1XLDP~+duoP-*4T5^L_@?t7oef z_tT5@D?P8yYXC$IKk@r@*AJ!ytw@Nf@E7J73>&F<&t*D0$Z#5s?g;4A`PWSct$KMj z{B!tXJeKoKAD?4?HB!x?&hFbH-xoLfUb}04z$Oj;rZGtEW2Dd!+xc_cmkSwNi*amb zsCh~X2;rqd5~6ZJ;S;3E zV!r!Dt(6I^kw40Dh0(rV`n(WEr7v-2ve2-O$;=Fak#Z&U#`N$Mb1TigZchO!V`@@} zhok#>fdWqouvTaM2%J#*(nWcbt1}VPYD81lrSJv2+VeH8f#Hcqv+?S9(OP2 zmV|}Y(CpA~0!D8d5I!;`8ijb?*oJ^~H%oL~890~6JE-BCDnp_j1`s=2C?*p|`Vz{j z1^d*UTX#v^QESsPvMw7Dw{ChuJD>Lmh=K1wv@lJ?d|q0(5b!MHERYrAcMi@2DR%2} zZ|(RF{X`zbfY4>O3Z;2f`|W3DJe5q?0~`S`#~-&bWMWK)V*q~EfUnRJH{ zC$`sheweFYd}?H7m-y+3RI2~tt-!zQ^d`2M+d;-P^ot3}W?9Kk$482lHfZgUQ9{8i zJ|{IL7E=@q#>Y@a%SX@|JE5j9u9C@wtfyC#G{XkFIF$uhsw7R!mZF@7^&cdvLP2w9 z5P;zYYfTYQ2#1r}-Pt!u2ZHc}T0|%)9w%FTTTz#ao=*%)~8!XG6C{wMvk=stt(S}*y}jA-3r~T(*51m z`OGQ`o8Y(<^Xom$AFgP)i&ZbD*KiqKgn7arLcHKs-n8lHWje04jbMSPz@0SI+r=ut zFl4Zy{ir8BioFvQzqS4S@rOw5&C@{^b~;^O#$(QTR&X5jC`cy9^QY9>!s8N_rVf*; zDjVsiF0pjG@}7AtOQ&k!*G$56z67}`ht&EcIaLK}Ts1Bdwg@x@iGu@&Urt0KcaJ&d zvx^us9eqjg%3 zl~w!8#qYQ*4xJNYw-BiH1|Dgjv>c?@(L!1YlJP_7D6ftD$1`6!IeQR8FYfOwz~9|W zPc61h^qciBwuXgKGoSevbSOJ%^}{6ZPkLDIl=nUgugfHtN&c3y?Z&*O>143*@osdL zHK`r@6UD8{1~FI6b#`Q7X> z-x(3?6i$W}Q9W)Q;FL|MahK}_wMcPXpSK|VQvEudqpjjiA>RamxEEBEjDIEy-AjMq zL)f!=FM189S|M?=URpMdo&JWA;9GX^MpKRa!nkny6zRTRTZ&x=zN%8T_-%f$R@4cw zP&1Wz!X<73{j^Kp)jAti8XvH+=nMdNj2Ux?_Mxe@UGL%#>_37S3il{z%`^%dHzhFV|93B@%a5yU`>p&Aw(j+OFHD<&sCZI%{JdboBXaCxfrH5 zrSg*aO^;jXjtfPB(_p+8K{$uQPFjO?6-7eDHTGa%<|aMYU3o2hlGMhEhFbm(X)C!D zN>IWXl&dDS5+e(jE@ud@ReO|D)KZ2xFVHTK;eg(Ivi5idE&{vQ-FN>E(mqgzJfPHs z_@Xw6nDW5r&4gii)(`hEO0qSkk!rEaGe(pw8&a);_TbZar4(X#ML8E+3{3$D@wGWv zEm9xiSjMxtjYVXuyMWj^dH&77cqrB36B!+RGGt-LB4ceP7&I$H6%T2-4Jf555W*kaXC#-+|MAoGD|2E$j|o+%==-H28XLQso#IET|* zN%HDsF88@8bm%Q17l?CN6-$dgU;fP-KEyBMbWl?=f&UF=)(o13AMoW%04t`&z1`KL z^}A2JgGvnKJxz(7-G0VYcV=qFmN4nOobjcn7OU0GpH`2L<~$tAJk^{+LWUOJvL8>I zsGk2SzXzr#YB2SnYwR4qF9L$y0&ljz!G78=fL{KziE3ONSWG(PDftu#l=58DS)mn9 z1R%-7smf!xB0o6xDl^3?2p|q~ThFqaJ$DN)>BVD+>-a}5ir#pIt)_nRY^9p}u;kLh z?|h;ZW{3s>iAOl?Qs+lno8(m%i5RDcTJB81^%fE$)xtA)hXxULZ)L#CLOyk)PT(7y z#r!7uYvsY$*bpd%{H3VO{z9qX8Q^;c+(TD6!+x{LH}CDasqgAXDDgQOGG;K4BQT8N z+q}q|#W&&zuAWvLUXeAlBbsvcq+zjmW`#@^o22~37dKt&tUAKAw70zm8%eZ#)EPG``-~BGy+b`iQt|aw2bv0`sYj|{nwfB z3rZ}F&w=WzHH<~QLV2=FRP?15h~{$gAq=wTnnkYbz_oq&seB#s=805+G2r4X>JTK-VtPWaa%`*eRUAw;1g zJ%C+~)*0(XVS$zcq}%GY%M0#02u-4SMncKxyo_Z?pI1l0i6A170)$pmzsY~Ac>0~* zW~m-CJX~7Nw(yh6;Kx?z@}^`GFXJDlAn|F5x@)dK=8tD-ii8xbCQl64m~!m58QD#f zPbY^$fwZ%gFNp1sF<2Mw1AJ7p>zGHreB{)hskXFR!b4Ni(&mP+hLu7jlQ^uqFae+S z->$`Ms5^n$kH_W*sJsHL=xh=^vOA~1&%vv8EB%QKaOT740EEZ0=WDc1FVIwc#7s#2 z^Hi#b-Wh)F{T^ZX41o<>!?NBnK~KqDv4E3Tq3MuZ5dtXZn&TOdXi!B~j*HgDCA^Cu zXa1$1L^p8z56i!V)Pc0_*9zJLn5e81NCnzOf{)S2@!Q?Y7uqV){x`0@2MD51g~nwU zO>&ZrmX>PUIr`_@xR(6NsxtW7|4VPZZ<1B96Mvpq%nx-0jo^%ZFsnPpmlPZSKepa7 zDylc^9zMg6GIR~yp&$&cKFVrxXSWaXAwl+D_3=8?Bot|IyKg`ckII)+Jsa@&J0jC4Eq>vke=&V*Nh- z#Ft^n>v=vqhJd3hI-h+2O`yHG6r{biM8J~k8!zJhy2U_FLzzKw|HilO;-QGnnuw{F zUi^J5Z)ZowR7*`FqXWYF!ao#KDPnpNbNg^ZP-xo?B(dolE-43 zb1Lsn9I7P^o2>{v{#s@QXyBPFQVbq_uG4AGJPJEX6~17-!x$(pF0$Wz?U>g_bDCyv ztZdjfG&G5`Y2SUCMHVW>p;~Qyq{*oBA)!nu>T8nA6Gwrv4&$C!>bJ(W37X=e?}yn| z)24-EW`9oEbmM;r+)E{2Y|RdZe?+Rp@AEM;_i_JQfR+~)2SPHNm1BI+Jb!E2W3KF1 z3b<`K^nqW3#kE{w6KXoli!5%SuYI*5t~?@d4uyPxVy4Y2A-zY73hj+OddWxej7W+C z@+Sl?_z;ff;gpB($zd0NZQWM=R@$Fq26|Lu2{2Uc3>FIdVpXefzfL>NT9aVL<;rdD z2)Pjp70X!;DG!i$*DwJZ>6Yla7l3?1v3$pRr1x}wjC+q2;bE!474n^AX{SW>Uwa2g zf{XGViq1y@%dg~2Vr;i!pO!6;6$*Vl66cB6W1)d1_*^eJWUVaxJxHBqPexZ%QDcFa z`Cj~vkmVyG{scq!d5_%na#gkp!!`S!BL18|0NU~O+rkIWXA_3^K4#JH=1pb^7PuX% zqsZ^pQ0Xy0>~ZTrk^P6e>mc3MK-47l6#NW=D{PJd@6~A;a@k$z8JY~#n3TH zxCP@jy%K-?6QQ2BF1(EQhhjgyQZv!2`$kEM+wtV~{h{ka_J&cGdS3;5?UREJHAq7a zV|-;M|E7&;gGATlv(tzCUh4~e)Kg}VFEJJIRhn#4crGo(T%;&8G^r`rwUrZVahe;u ze7YXH?6%!UQt$R^>pcDyja&DYTD`?M&+mHklw#AX%o@vlhKL5ps zf1h41zkop@>n#Jtq-OuI>w*zM-|R^e{l16x?2_oK3H{svH!1#D*725PUlw@*Bgk`r z8YYrS+lI5vt(ad_v9v?y{A8KadG6fFL4nkvn9ZsbCAF9nm1(%=+=S``K2k}__6W%e z+Al7olXAyQvu>Qj1xJzM|mFlzOGmnU^9N5kdGFV ziKMA;fuaD5>7+z1R^w`&CBwFe=?8cZa*W*YP2H9n5)3iN^ z1zk{&7ap|r-D#{^PmrP*4rSIiki{z`!0)&iaJ$CY9IFC8AFXM1?4gczNl!i-qCn3e z+{UUSgFD>H5WlWFD=}Z274yP9C>*F6!Z|SXj7;(O6x$*2fWK{_*f5F-7BhTd7*17| zPecxid!OE-K`8OG29J6H&#}^*^yJrc+*eTI$mtif8cOVhx6XOy?bi{OVg68?`C z5=TEzrD?|aJhvYbnYmUZbsktQrm zH*!Q_cp&r`bpe0a-BHY8kc>~CN~-9t8(Esn8!%~?Cr8&^0uQD+YKrBPcok28PzYTC zz+M}xnc-psQKH9&sS9{!AC=_g^}ks+TD`&@)@X5wRL3c|mBOjFg~hKQ7`K>+J@fOl zXk`1i%`4yF7~W;?t@%P)WU|n~$*%RM*B>BJ z{OP95CV{AQuK8VNnz5{Uw6w_R((nDvrjgWpg~G2iEmFT-u+$aJK1KP5PFos3%FHyi zuy3d3uz4*^c;brJ+GBx~LC4_+W&qK-bcby2H*9s`?;OnK9^Wk&iayI#yvZLY<4pF* z*2?e`yM|`3Feg&I{ev4`cFf*Dii`AoI(w8th)f!k4Ls{1^>Y*GT;ZI(JeXwXAUQe8 zd&Q}tfB+BwE4Q+LE;T4tdTZ+ir9i=; zZ!fCAPct~IN9d!Z7YQnN6UD99J_)B5Ls;vye9Te+VFW4&lmK`0U^}u*jl8kp6MeKlGh}|)RlMW zeC{ujE(@s0?nX6#6D50CAx39GvhxH*8vaZ3A`X41X*dv3zXa8xa+g@r3>v3e2ay3L zBp*}1I{AAq>ZuIx<#`VeiIcQhY6t@&@D~P#lW*KprT>*ai}294t|B;QJzZ-8!|Dxp z`I579EGw2yNs2^l$5zOy>JcWfT5Rl-qFI7t-A2N(t7`YLZGQIR+&dQ6%{peBTyKsW zJ*0#j-m_m1d%aLEOiMA%9Oc`ahzxL(@!7&leGW4OlODM}1A*j^UAHQKanT2_tBlka z-s2!F<{8SxO%e)0Xog3PVpka7jFsObQIZ!)yG9qkh8a(`q~#jvYm9-Nn!j7mrxv*E zi;Net?%Npt;cGG~SDw9R9{MUizp?oBIGNiIheD?t5cNyRu^)}a&w|ERXI@j$w2GOE z%;hD{E*xRe>l1_H?M^M{An6l%p!By;HGHoACy>vs zbltKUpTuZrW3`bcx@{0ih2$fi`v5BaX2&{B2=*x}#-Lc7bRy1bbELPmS<6d_s-r}z zPe9e=!=jdKm@!KhWpaJ!H;T)p`oqAV6B-XIObXM0(EwDczyit?+PtZ^iSki8c+@wX zDz)V~{^M2s$~Sd63o>b8t|{eZLg&Lt#Q}~vK|toBIzx?uP0oNq@o(um*YGRcIJQ+^ z4Uqx1(D`K}#g%}0-pY(Kk0R^`X2fFn^Qqd&O$W!v^;GwI{1nHpjZsc~>YC(?Vjax0 z<B+(-4VabGxCe_EEqMC5oVQ)NEW7)v?i%bB=Jw<>B$QBAy_bpG& zG<9F|r|fX+Eb7NpwkCg zbNbiFCM8S4MjQllHm2Qp$_SBGRM$`wdF{FPsd8 zT76olmu~ai%_8+&!$mXb>}9Ntms}26w(Kd=zG7|nqiXcL>5o4+4nLWHMfR9&dAYCVi^%hft(N z_FiaHwr&Bl-FU))!cB3q54pUUEaW?sd7vJlLqwJ{@EDdLu5KUDe>rPpO`B#&hvsSl z(Z*P31~I3P|LkGjhx1)*WEv=IhKYsfMkaVjc0H0h4&nOxybZ0O!nxnNATuC|=Rtjp zzxCVX^z<%%=pkB*{Vl@BqR|UN{rLZZieYsHE*6I4JXC zUqN9uz%gv&G92BOw*4Veb6S@n<~%3aF%%-EkqpLU{CrO~3>*DgKv3ZNsp>t%@QMUJ zWPAdejuS0pS?ZW_==DSU_n!~$_!LXc@VS72v(Zk5B`-p3mXGCeGB3pmKY9pyazcum zAIUa~qT8dwnfqiA2|Zs=tT~+Rnm)q*@womM%*LIDw;%ka0 zz7O_Gei)?=o57_M*c&VsF}3w^a!(9R_K=avGsJyKj^E5KDv+@5X1b3PhrLz*V54eP z*0=TJ<>c5Db&5D0W>i!-z%K9Y&@ab?-|)M{7AEkZPWB{h;u{AY;HlYTmAmYazsCIK z4=P*{3o61q+8U7yxBt!=JJ;cLpQ0j*61`ur(F(`N=9LWWQFf5QIqdFg#a&uR^^BFM z2{L;DA_1S5T9~s78F|B}tBku{F`Do<$S06_B6$W2=IrT}_7?sl*;WJDJ0=H?Xg%{Z z4w^Wfj?c{CPjCNXq;r!wJ7T}CK7Id(;&+;-wXuJFxCTNOzMjJp40=+R@Z_ZX1l2_* zITO>~gWZ{pjxY8mY^x5C)(P|P(j|G0X@~?<7ZVa{@M{0|0Dt5m ze@=^4P28At4$5#?vkRPlG=OnE4B9a2(H1tpdl1&DgWU+$RGP(02zh4#stg{)*3L7k z2s(rw28lB2wLAG;&py?Eg$lz_Iv(d_>vH3*4KN7xRQekmU;_oROik*v`WAAPmfbfhd!63u zv1biLq4n6wRiZ`O^O@ik2meQRg$sw#t z0{y6vrUm`I(4}reuIX|e7+P0<7mrC1U^H8V6~qW{(1R7lrAiu)o@vqP%a)9ZipL9t zZN^X^eIC$_EH6q}To2RzS}??Do${wCFj1eDvqj1ApT!hMfxY0{o==Q!cKwKQ^B|1>BR#no!-H_92vNoVD*4 zRo$<2yi&ZgV9^e<#Q;#m;N|zaesQZ z$4_JU8FDMkNau3LE+VDiQjJ6CJ?TqB+$#?!{!EmWBH=1k{zzxWphOXXT^f% z2(z%}GyMK{LGI;I?3N&a^nEA^RbTHj`qC1!Z=g9CA5|_M2a!*^B6*}KO1q2n3Y)bdUAoVhk8#C5S(D=Gvv)^R3542n-$zO5x5x5d$WvOt zmD02lW$J^1M4#tYaH)}!TJ-dDyPgSNE1{3A<#W>qeUw^EfEvi1c@LkyN`m6PMi>7P~UEr;HAdH)U9EV}@clmyDni;Gght z(SFo#Lol&hJ4Y7>*`O?XBti^iwkTaXQk8G~hTld&6t6Aju@RM$KhEX;{N2&uMgM0Z zP=Hz4<3Zx2zf=qU(_(&)-TdkuF12StLL6}RE-Cn(zI+$5JK}jTDcu~MALY|6n7?KA ze5VAb3|3zlYg|Q@4uZP!q$|!GqLk{rG#l2vEa}NTA2u(o2--cNg)$8f4<7k!&eOQE z^0KhMpCTz0*7;8I$a)49CGQoZ4v>$U1e}#-_k2q>3Hm=Rfb`3g;yD!Q^LU{Vz%_?!`*b((~E83IvdIFY*OGWW4VTGFU$6Kwj z0{3d8g8UKCXTzJI7q(e-1KM6IOeYW@I#G%dP$xi$cBzBvZ{nitm2SHrQhSeBK9@l^ zO`WOw`4S%av?d_Nx!^X;%w zFHMrmuHn}S-juTfvx3f?%9iSXDF9xS1y)%6OPgEGsvaJW>MQaV*GjE6nN1iA59J&5 zZqf2H(8(9)>m277DPC6Xob75Z^~bxOB4mb?nx*%jOvy3FeV}wkq>*^5-ovbaDTUz( z8N(L~BZ;GH8!-W2Wa>Dy!MSTy<*<+-L?HAoeV22p;@eNcX|m5ITNDfC&B z$fL|E=qR`Vuix;Sh@}N&AM>H(A>LluYaqrg>*cI%j%*H#94SFkwr=9#BT=%fZFA_M z12sFRkai0H?aBQy7k&E}QV(-yEWVOfZQGRNQzf?zA{Z}7%);Ow{~85%&8tc3SK-VdEhoP&!&i%QN~vXKteTWD7e zxg-JXS8t#gtAY{fo4DSsR!+{r?1bm3V$C|%TGQXfbDE3&2?*FwqGnsrRIxAvXg;0VYkl6sxK}<(>qDNp@wmox zdVEVE!-UA_wwKgfRjd3TOxyDAADo;<9X&8Cws!F9N8C3T65j`w$7ODD&P> z?&+5-3BR&ZK|5yf)*M*>tl0G(O1c>K8J1QZgc?w3^>+EUfN2jH1GKZUyP(Pa4pd&4 zBDKAEJ^-Qbq@-h{Ey)L&Rw*sMy;240GMjOJCr}!g(M;w}wEGN^|4jm@t29^h=nY6B zk+B3LhWCL|nKz`!YNdm1jn+l{U4{+OYQKVN3(AXlwN)~to{tdd%0$plozHed4`J^# z3}N@oJlvi<-0}Xe$*6=eoS{=mxEtL>q!HxPq2czjsb>8KF~p&M<&<}=RPlQy!YS-u zTev)RoQb=P_G~+yIBWFR!?1nXWPtsK$05ZPA%~rBdywlCct|gi#^tw_zS>*ytIPI1 z`p-!j{y$y^y#+HN^ZY4TX_8Ft5dT7lvf3oQ2L+a88SKLgYTlG3Ik}UCR~js8jho~( zVb{LSiO9a~PKBTdJam!ab>V1xXM$=j4WP?zzO!jMGRn5(d(f|+D>^Uzo;87>U?Ccj z;PQ2IWt`cvu5jrXyBWi>r__-@B=2p)!&;G1q(NtxXyQr5-F@Sp!kX+&04-dsi+&rY zl22_l-Z=ucrmSbZo#li_raBZB^y=HhV|Id2Y zYscc&hv=`!Wbfs*#K$Favb4t6;M~UVAc9LKn4~Ef_tGIrN4h+Q(<#UZerx=j`7`<9 zGyQ>d%TFQg$7e!LVk$6C!hYK5b!6xh>Ulp^hLsD;9eN0Bf{d?@s>>**!YL6LTPM&y^g#q zDg{&mHF@rEKCd%*A^E(Y9RP_~@Q$3h9Or(iYdNo?EbIJ}WM*+Bx;qAeyi`@Z(tQhz zXwaIkV1qhemKJYj~M7hXQ^Zl1^PbruV%7T6&@>VRK%^}QGhYP+lGC@Em*w#4VUko zHh89z)Fbr6Y27PGGKNg$dp_w2=makztoB}ef;i2KIsxnI)rr}W_kaq+q(J(I7v+ZI zWNHrg9L7H3+KVp#wHJ*t*wKZ_~+Jg_WR3Tm69#I#O zw>br9l_A!C3K!bV>>n3FPV_lh&mcp}Zk@0vN^LN6!d~d4F_A_uzPDKG&E^Pt}{%P}#k6AKfMfnG~FM+vjeP!){g zulA?3Q=%B#q<&MtHOEh9qwnW{ujD@jUpR4&llTs!!BPEdr$pWQf^c`kH*>JLZ6jX53&4LfHbDm1>E5tYUU20$j7eQ+J^lB>;V2dr1c)fQhtxpXG?5 z$lAdqh$ROp-rXY*P#5q(^ifM(D*ii+U~A9e?gI}U3CCz)sclM7k^=`bZmK3xpx}o4 z%&=TzDTbZ|Zb0vs2@*tnEkr zPyVHFJF~u>pRMp$5#G5}N$~j88mKYqutJ9lCO#kV%sSvELch}!AQp$VjSN~|zFc`a zyWCVar!gIpjlzQ{lU`LAKJ10MIP`)Y=;#v;Rf(KGZH_P=+Rc0$!gzu5Y?ONf7%dgm zgA?tp2%3p*r5R&Pq=t0$QEJ2O4h*af4(}lj>@{FC^ELAz(&SwteZQ84*>%6wZTCS= zOGdLy`QZ&1zoMMzkjm_Ax}Oz{JZ2>%aLn-$Pj+0Asg!2lpoUhJZf@YDN1!BF^WneV zXnrrV!Z*IRqRVs^a`mVdr&YyGN)$buC7yrfb2G{ail&%D!}F2UUGl~~tpCQ(6A$I>DD+F#(CKqNvi2YN{z6V4II`U-#N?>G8TabcxW1`X5; z$Wu!dIRKe+14O0r3)Ha=((Dm*3G6Sl+$vGcYNqMFL@1SR`S%7+w@(4Xb`giRBi7o6 zA!b_ML@4IGvWtgAgFi%%mC^C8JB$!PNJn_3a*WH|D;uIQqC>`n``zpDG9BwlhJM@> zUJ;-^_pkjVtLpI-SdzaB`7|gv1Y%66b47-$YGg(^EUE-x2@itr+)%#qpX0&h>R#f( zG{I#4GzbKcX=OKjaja?@sNE!Q0pSL-?^gHqrGF^?7cGLU7Y!ZQsmv#>_&g5x3;k-~ zwcX5psam`_R|$*3938V(*8G$C)@?7Rj@4)u=RU{CFH&hoQ z)I~`xD403xu!RJDQtI>B9VA+i_PHm1j2Z{NBZJwT3F*PXCG1Ztj+J#bulHLNOIvVi z(?Jw7($)gUWyo|HH54Ys`B!W2@Ol*@2i6)mo%0yQ#WhQc9D>imU1qhj?+)0->8WV& zFrxY%q8>zrN<*3VFOOUOx-6G|=;X5Yl3LJP;5f)=^U_ENrFK25+H6ect}Gu2*KpJD zW%W(EU?@~5FDO?Nm!905c^JDTT^!abYZP`%-}Q-%cB=c#CxxN`xxnCRpBCmh-`uT0 z{%jxho=(QYK3^-jR&`y&s6;$RctkClZ}XGdB^#;5aAldyZLC_o@1cE|@on||z4@$> z874`88~0i%W4zzGc*7reL2@?3ODy(y5LrT2!a92gD73@UjPjg${I6q4Cd8 zmIZR(!9lT%o_-#G%b#ReO0ldKWHH+ULVy0D@V@*ZhN0eB3o_U8z?9dANN+`%h)=#0 z&St?6AYIa@omVFVDDmh(xi*}mhxXJxUm&b;@m@#8ZY;$v0WXs>tD=4TWB*o~i8vkV z#4w49J*9U`EQA~jkG!N}eCCux$Ux5EYZ4e5}RPyr9%qV#VavcwgdGmq@_SBgMR0{|No`Tie#$3E+ z#8#j9dZ(Y=qlSjy^L}60a%4Uw!3141!AlnmIw;##KjXsv-Z5ReA|Jx;Z0?UTRt)@D zfA^*5r+_#lTOgQZfmHma*0S1qIa%!RtxY@*Kl%Vu<(tvHsE0z*deCFPtV$Xn;;cN> zMj3W(=8oku<70&pILFBi?}JC8rTx4rkJ}7d-8B?6n!_|MhNeE?Xxb{me=ELS^=J4W zc}%~nLb$u|k2*iL*QzZLU(k$~Bze18YA;wBAGFPZqbNKXqNz0GIJS+QD(^07axygd zKIr<5Hfunq|C8yHFzrdh7MGT6fT0mU_VB|UsbpKvz2-SJEC^Z`?Vxhkf`RgODe#C- z)5NqOeJEtRr|}M}c>N>%{edZ;j^;^1dfcI39x=Id9S|-K;@R=qS;m}@KhV#JKI(Vf z`jil?;bEGqWtd6Buc_-tfrS=~nkMBHFbs?>?-!1hH_5(wZnSG|VmUVAxu>ZMfe`AU zc{gqb&}MU1>YKc*$cDsxrOP9Vr2&oBGqbp4rC3l!Qy|iMl3bi*U@UkrEenE?C@WV{ zwLXj@>7#u41}U2Grt_R}d8AeqT31GdAvTwdF51oTZ$^WP$<%pfRxx%+GDUw#W&w*=Z> zxvJhobLS!P%R}G=3Lg@;(YUaa%N#_{a1CBKr8bc}dlq-;x-2Lq?1vMaHUXiLGj++Q z_&0YbxXdDf0eTAbK--MZ6>0Ry_rN->gJ^~MT9T1TaV@NzgpXa0ZE%y|mfSnhe!}Z+ z`3B!e#23GlSd@7c6-0wjQXGY}Fq5u0xmdiWV}`Kl_|AV7L(C@!Wqx=~U3w=$ zvK3xMM|}E&diqPlhFtK{J_{ zNFwhLP%VtB7u?*w;_te1PV@?>v_KAOvJJ2WlFqo)uix03r+~gwP7?5v5G)MzSdYX3 z8o+oPoGn_>rX))>;-}4~@(OVASy!db<{0{0U=Rv)VLmy$JM3imT&@UQn%!&7JLr!q zM|8XkD;H1hkq#?+T1bIp(Y%bZHCo+@7r*WGs^>_nJWh73?@d0Wc$Rg4T?dtKG!l5J z#NG*E3x4P@ENp5t5>_8CK@#bCI<8+6@C=5uS?-Zweuwt-8Xp(uRk-boAfz}I0YetTZmscIn&s*q8EqT@SuPb&zyUDm{aEW2W z*idzPEEv^+%eZJJ+8~~hPf%67}x>v}QY^7=fI@%n{ zOb9utD5R(Ey5eTV`v8VATd*H6e9$sFvbQ9H+D;LmhfZ?Q6e@%cY8CRk0Vh$c??{+G zYs!OEmI$r8j?NlOiiUuxrRv_tA-zOiT|y|M;+j_~m6|lk#FTgB1FzJj6Ne`n8?Gw^ zaXYM~ewxFxL80_#f4^EaFrRev+1=!E6lbZt+A#1sjneQZWEQX)a>37Y28I#2tY>JS z2p^UYx1e=F*QEp>8IK*Q)CazGS6T@_X!s*0ABx}*9Vaw)p~+lXlxcjbshRd@iZ7!f z*((JfiiWp}ayh_2yfolhJ#X3P4`_*z0S3b4@pQDWvLaz{G3J0-0N{l$lvgfkcnW+G~=BM~AMkr5iuy~V@_=tX|>=XyM>+K{#@hrs_62fx~s z8VOJW-$Zkyma>EtDc$J$ZpjKz{BzaS3PhV7;k9#)lC36I-$@1$FdX2W(-{LZVg)MG zh!R{JNckZwG75QStYjM5+I^6dk!pgP9VfEwRvRDNUKQ0?qvkXuh!wHo{A#QA&0(>@KsN+kL| zGFi76aZy^yw-7NXV5|O5ye?jDc!DJ4sRs4&E*wGh;E$~R+d451r!o1)h<%pQzS82I z=9nw&Q?Ml`AgmFr(bAoFUVYBAzb0!Y*J^g|r@p30DCtA&^JrLleE!^h{C(*XY)|tt z;B1Upl)=VS$ttIKvjzACaJh7%QlFZ_TLQis%YfrCXbqK%g`rwd?UNhJ@cj#q!iJjI-zK?J4 z*qaVnEBluFjBtR*X3Cd4@B=cS!u-Kh#ZjFdc(ZTNYcttqVN@nzmKeC+k-w1#6x0nyRX;nR{-8$I4Aa_AQR^cP zD`b=@GK)qaC}yCx086}K|0dAI{~yJ? zj>~LU)&Zkpi6~O;!kJR+^ybL>NnA$M|3hA(gZ;!=C|}cGrBp{F%SY#7O6d>sk#YWJ8I|it~DTG2RI*!+e&I#=zZ>pJ+ ze^)IDD4rN17cw_Sa9lZkq|aEev6-wHtukX52YxO5?y5XgKd~p=`;R&c()qc_z`GYt z0%AyRpZSQ4pM}EWccHUFt!g)!h0cC_9x&S^d56%%$1{ONunZn%i>|r1XE9(7q7MYm z=nh#AlDi#zMx%=*}2IUM2C8XwJEM_DsY**L;;%U4Q#w>zFJaf$BEbO#BsIL{x zM{CzY8h;}U@M9JC+EH-Mjt3lm11d{Nk7VI|sh6y}3#HjMpLM(LSY@yy2qUKT8XR9#wNCxya`*-#q zZX~z_?5FsqR%>gJTp7SgeZ98<#$A^p{1Z#AHi|s3!f_EnnBo}g4F`mO${aObOEl7* z#F3g4Az8l42sK58>zWCz^8BNLyVQ#Yo&_3xk7B&Jzb6ii$!#z6(D+bW#DauzdWG(% zpB1|H0&j-ams&2#LzJnfNV8%Dje>=hbt9N!QGsAZ!+V?8{UkwDA#pK;4q{_Jbm6fr$;v#!Jh?db&)X`uPpB<@?e%g@e16GT?WZ<4(k?hwEISaB7X_$RXHc9l(GU z@VYAMX&puYh7W8H)(qiNiaO@=ooqe;CGNds+7`c;rJcd-=Y;A8Dd@;RmlXTSJIfDe zDgte_$G6XDLCkR}&^VCZ1fM6G4quo1gu9DsE$=0&DN-C$1}^kGn7vesXS>X1SBg09 zb^;k&%+<_>CQe~BKmB96`E*6}i8D>l%QeQ;!*xw6h(@CJqoeU zGii?8Z4bVmyB_Y))myI`B{lgpnBQ+@0uyX$oq3YLK4$D-Lf{OYrErf!K~v~UfqfJc zN@R0KIOEg&Soq_bei%r;Y#cmuohY5H8H^|=(12N1|a=IWLw{OTkCXHx~^qw&$4 zF{)X$8FFS48FQ}q5*S|)2!jC&B-V${yjXz#yePF0nidrnuvV2m`gHWAZHEY=^HDb> zWE-BG6&A&gCAI9(V7^mmt3KTmq4qUVj@I1f(zjC)$EwW(_i(oyLWTE^H1=goc|_|S zuP=ai?arcON6nW;4YtANEVtpP^$wI)jyu|JGwv->ir0J%k+n@r6Rg{!@jD z!@^#oE}jZ(hZ5+q`05`oWH2-8UXG)|^ZY7m&ReABZN@e}`! zFvKfHK7t(?#|YdkudNPy?OQzb)c*H3zk)&PHm0bMlLqwuKu5a_UZk`Gx~b_fT>;9S z>N~A9tB|v>cGJ-=YE?c;B9p^f_EO9u(A0N>_oSwgCXUnt>1|fnxKrNWxE~?Sri2anzIZVnNPygB~W!L*jc6S3Pd}9INwZ9qK@ZE6hNvVF6{G>YrqM?;x zns6mq9^skZFd_e6X%sGG0Gl4Mxd_z%(zE|z z%Jn}?wGd!8lJzrby8qMShh3evRrM_#_)o;f%Pz^{{_Kk^noo! z!_(c!;8giL;AgxT$^p^<0P?| zKLVa+>~izZDD0+jWg@9QrI0B61V`YVRjpW@5Z}kp2unIWjCJKqKpUh+P*C& zgJ{2NT?T{R<*CN_G+O`&IDAHWfmMSx!46=n6#P2?f`5#YfRV$f4et7%fTW30*5Y#Y z7DjO2wOJ*FOIL5h(Z;@+9aaj{qJ*4g5$`3s zA-2DZqB0(`DLE<15dr6AN3@RzI6)8aG2!)SJ8K{e<+eeHxM9TN-AJpH;i!sJo0aau z+o>`Od9w%whPuNnC;umS+jzs2C{~qp`Q!9nuXk<{m*l|Bs1Ffp)SKuxLU~UkW_SUn z2g(yAWNwO3VEI65c5m{FQ?;Q1=3@Av>d^A+w`f3JW<%%@rnr zsrft~QVJFyS~0IU#>WPTS*;D=Qu+FK!I-pno!6b@dmkriE#_d3w2--qaGQocO{$#Nh)UMOOQS0)33aj|E z9RPlczZNUO>!kfOc|x}H63<%Uwx6lazCUG~kY&FV*w*!!i`6?VNIlFvf9*9Mc<2ghc2r~NdHDa@^* zXJ!VTO6$9gk%~)%oYKDD?@?f-@~?gF!(Q)Pe*W~z>8|ThH5#ove&%I1hnFJdK<@); z;(WU2;1l1_;`I#IihW}sB83t~;C7G$ahRB;5X++QlC>OuHe$h|f>%ub=l@Wb4>nlW z>bskt)n?W};W!N%^tUWFXSU0zlAfJn%0>(_2|==bbUL>YF-|OpB%JmukB=nS3`iI=9ug z3QM9)m`%a|->du{Xrt!Bi6&-TZ*SMaoF6cO-|xO~OO8h2F1ULPFaS3uF?c82_ayX! z312+eW9_PP&mdY@TMO^ce-C!8{X1U*ug2Jr zbZg7`f|KdFY5$5J-_Y#&RJYP*^0o(xL5R~R%cu5yrcdc2h%^_$oXb&HO3JKRoiOZ1tF-Ev1Y zRUD4;+xP2g-utiXtC3cNJMfQwcLLDS-Lcz03|EK`4-Z`(jP&-p^Tv7v#95{oa$2gl;7IwW7 zt_|*?2WL-)O1$&~l(qjm)wRiVvpGGJD5#XmkhTc({8z+u^YOK@YIyN**=H!~R|)UG zC+WZN57FBvy)HM7h-{>vPS(hl3hy@($^Kt)4W)JU`m!VsNKUv&DA6t>-_^LTnsK7! zZuaY`Zr9&#lO9ngtRH`Uy|+NusfJ;AhI$pXhnpa$D(K$p-dWc6yBak~CmjBR`f4&o zY#c?-Nb&&4`dYw5uVUr%Jo#C&gzuXoVc&BcbzvvvQj4MQH~u4(-Wadke^ew95<2nY_C znW1pP*c9>ePygc)@Dqr9uz15br~R-ANb|srx3EvXs$Y1=a}Em)U$yer2eWQdhA*x&7_F;3g_U9+`H%{2$hS z^I(sfExORZq+2crbq?^PrZ3miOKKK;XY0aTYwoySx=`DE#>eT&$uq2usUUN~k1Nc_ zNd_05mnaJ7jVyk_FGp`*=;mYMip=1Y36!os|Ks(qO~Ci2*2UzdhJv#laxE5^UHt6+ zTWIu`x5M9SeWhET(MXNi;e^c$8xqN4PVZl{nMEB%9OEIs zaw*E^%(r~e|DJr?wbsQspZq-GuD%_nmJ|eciU9i=Ze~LCR003jt{YQdOj*RHcL_y&35}peRTakS@|| zAc#~0p%gx*0Qgx-73j_-T!dC!OY58UVSi6_}Rd#^U z97z2ga_OfwqO|;qQ_%zHs&a54CrzcD1`*>yf~tNJw_bU{i#%f%{qw+gpCm>K0@K#? zcNO1tc}f%)7pi*fyiZ+=Qv=!Di(|9OiAekEha#9LE+Xpv%nT3p82McP+Nel&dB`(X z4?VjkE&7YSKAAH8L9e-|F=f7nAYg9s5uI{3g`MoJz=QCYSpm$=;gmX$0#4mKxp4`C z%?xYL69^Wyc3Gr1Ev^@GC(@%min$75(3qlI6yIsEx*E$+#P#%XN}dgcvs9!`^{e(l}e2x?s%$O!HkP5=5y8Y2g9DCJQ0ZDd?}2PXptIx zm;az6toF!Q>H(srL*M=)lG)kV2%df5@oCFmPt!i0xtLB(jMy^Q6U6Qs1`R ze0+Y6l)TCT&J3>s_4Uxe{^@*Rqk!4pLzT~Dp$kt+A*hKx_~teBbrE$b2Q+WMQQhpd zyq6X4*R%t7=}-qF#@{UFny8M-9|HEm-H=jDLShXlcR4)Q{O+;o{N+6RWwTp?RUX%- zSAdaMsb&(GC%Bq0&dy1%3^G7XD&N04Sn0?tYWjLOrfSLR76#>T7ntkELuW)rW=033kg9mdR)x{P^9`puPDhYJ7RRwxhd6pDn z8hWo4&y41FOwjW#kPmCY^^dY2n-KS)8JL)G35JlJy90nY@XqN_QbTSl&^ehLiM*(c z<2IiC^ez8qK*q~JUtd2afh~agavml&dp2{VWXlI-`8gLtRq227mIAUrHsN{Oi}s<| zz0WH5_JPyjzA)S~x!qWW=ZS&mLHMH}asT5tM03&sxB)vB#FvlJgf*?XmWom7T8r}) z7|C3jDH)U^gI<{Hg+{aJ4?0XuDhJJ#ZxmawpEbu6I$rv{yR_Y{2NuP;dOrzx*T{hV zcMNbw6gpj9rKSx}? zJ3lOC11w_MefZ5>e<)I`E%o8y64j=@t7O@}!JxDrS6^~MN7If8V{vd5C zTA)M1og3nFcpKA)QSmod$p%s7)YOuhRhEpUCF)WYYlV?X4q{*>)PNR-y;Bj$rY~w*k zBd2bE-qQZc2WD2RroE?d>4*H>PsM4KuWeCmCND}eP)~&W>8WyNS3g0pN|vC=K)?!# zb0He%v~VFpM2&IKov~*iF_;;^QX0p#f#W`@pF@&bF&u6F#LImLG@E%Ziss){OAbtOiyG<$F{bN|rj zf3ANxQm3P6^~8LSxws$kp9^j(j;$&5aaaQbdmYcGfHCJk=}`ZY4G+j+16a= zP+=7VrK@;s)i7KP7ySUWy=W=B-3Fn`r`pl3dJI z)9WG=L=qzi(@BTQBZ*el_KU+w*HNa1?a+5!u1niR+5u{kGu}DXuCtqbCn!zwSB}qx z{vlu}p(G&uZU{JgG}-{{LNZjiWj$H#>~>+4G@9BC;B^;505jE9qgiD2q~f(5)I&+& zP;7Ne0DiD&&#;zcmL->?BM@i4{}CB72CzEoLELMp_?b+6$|KiVEB2aP+hisf(?v&{ zhl?Vxv-Op+0|VSa=La39*Mo<|5VRqe{*SyDTfK!NC6nD^>m`=5-cA}v`|20wMpL8Y z+btwgwRqBqtU+)-#aZWm&*$W;fx6ikA85M-8jj%4deU+dSBZTGm6V~ZRDrqHW@jsD zKiYZUa8T+>7Q)1iKkoF{>y>oGjg*#_M9kb%uwhBbs>kN1?f>i#5TdW2n-Hv-TKL^8 z0`}FVdSeZxT}`LWbmie5lx*0E8VHQKOxOQ%C#S@#n#ho!ho}))J@ZK_OnB{kY5LQ& zR8|xD($n>YYAYJtzpTlLWSujc3&=fHdTq@Zc%@LsdDajdH{iO%NzE~uDG%DM zFehiCdw7DdAc~{cg&|L<=nxl*;#gy3?VsoKTRvBOX z+nnJ0)FkwkUhJd>r0EsIG{`wgKecV7tSap?Ohg{lsc|1t>^sEb!f z21fcOcZ$%Xm>o!lii0Zykt}Y%X_p^BWs&!8h?4_>&BXN#xqv8l+Pi^!ZhVO_Wf>v1PylUB;Ey8JWlIUQ^K2 zhtTYW9q+PuMQ!Igp;-a~oChMwmq_=bK51OZ^X-t!i?dmLLq`+~PcrlM7MIEu6O{dN1NsR7z465!$&)+H}W)D|QNhHIa8 ztkOQdPiCvW$y(=yi~MeE%xZtoWd##Ub`4(*jLB`K@1StlLjCFk8K1SH0*CpQ(2$~` z$=9D7LThCR{=qkubhW^|r}=9RO~v@@!yO>b(v$@PlbPL7ge%UzYJC@XZ$N|)!CLKh zj}QM|wh`x!<1bUUv$D_Ob}hlUF6*y-q2vQ)#z1*QV8P=ob4~b+z2!T8ZW*YWvS+Ne zyOCP~)st7KBNf|F$qb{quKJD#GvqY&D&F0ae& z6#v&n7LkU%c&|PM4mwdE{5TE^4LHvO2dEy+1~qndbxpl3nywTwt^P{-mJirGOT@D)R}u~oT%EbDi;T0QA9Z1Itm@harJyYV~%0i6DYf-h2WlfJ5d>MS2p zRw@ECi`~2L(q{&s$R`h~Dji+`PVq==HMGW2%-u7u(|q-vjB14O2O`Qx3eDt<|LTuJ zBATqZ_dtiViE?X$nAp5UxHp5rhCPwEEC!6xcNFBQKBYK!DkcRgfJ%^y>s1ru);Aq0 zbnbSjn%j9R>-Hkn1+SI0Dc8XD#@0AVqxXG)#b$8mU`tzVnHd1j?+oXfCE5+QIAA*H zgg)Ea203j8$f^;yH5_-FU1t9UKWdwVq7|AMa?@7q`-Lr`uNk>eg@q~vQN^VPMFYh^ zlmp$GnL#e7g@sMo6IK}8eIkQr$i--xyM{Wa=mNPsN5sz#W7Y7>UT1;@`AEQ%gCuLL z@9GeIMJ;RGfZp$pXA~k`w}^;tQM#Hd|2@Txm*&d!-#_CV$!pEE8^U~=UFS%X0r47V z>nO%8yMdXm_iJei{W3MQ-t6!IF$}kUIb4y&Mjw|T)3x6w^%QwQ5sGAyq$LqsdP4(i z-Yq#gjKan?i2T7jWsEfF<#}7=)I3mIQENx_0wjV8$e?}PHiNZG0p<{S)&_`GO$yko zJV)0!jb{@SHcpR#a7$s}Lmp|2+^OB4KYyx*il=*C_uCH(6#&gC2F$@rRxI!f4C=Cz zh`Wa(!JokO+e%R~0cT?v7&FYs}#?zw6b~CAkoE zo%x^;gZ#&&0(VE}$gnJPElVr8<4IVd9 z12_YX5;PhJ7mh?Nk$WGDj+xT0n(s$o=jBAA>di9@mJN%&-B4?AI@5ockFfUvP8eK(NmO+PRhyXV zRvhZ{RC14GhT|MP_OjK|WyKM69qky`o*~zPFHi3=i;KM<;JSs>XpLnfe7re#}EROmz#8 zwIssp(r%qv#LC3?le_>OfwjF1yno@3GfY{aJ{cJqsg~( zCgJI-XNSHZ5CdNIiJ~6qIqe&2>c%I?9em8yhCb%q#-Z2vvFosOq5~|^EzRCy zxJuz0Q26Y5Oi zuQ&Td8fLve;aFzBJ=e?z=sR_tpAke=zB!r%1fWR3zG{Dv{?e37FM*-`RSt8D^?xwF zUOMq&`ZM~QcYNYT$x$LF$_A3x$FEY(W^Q#$A&cSHEmlMMK*sN}d@`;0$fW2bNa*Qu zirFW!2XFjMY#G};{;b!sL0*+g8RIIe>Q#ZbJ1DI>skMzU_yt&{J6OH!h?4Ep2GbrQ+$^v8F;CI!p?xDAKgNG26L<7)FF^x6+L28=C$(2}!&C8yMoz+;qTsU)Q7@=$~iy+WfgfehAHw%yxE zC(j?G5-wAP6@AhI?j6_77eBDL3>!~k+jhepJWo8JMNi@LWA*E>T{7#SMrCRbxZKB&HMlC~dKt#Eo zeLb9{iIQE0(?gIa3&HcCbT@d&WlQjEW+ z;Fe_&S=y~z2l|u@jkB3G9fl5F9$cqqSkj&QXxRW69|qbGZ@_T3Q++z<_@&l9G74`P zx;Ap=*uyGCxt`Pn6e4%;xNZ9$sqeoVpMf^RpBgeSGHwPHQrw9(BaR8Yz?sqLtrCtF z;?DQ_k9bFqqe#4KZ~ta{UM>_tFjl3snf=5jHc#__2$rcCxPR2Loo{rs>Qg@}A;76r z0j2>em(QC>jwPPIRMQSn0-Bkc%)Grdip5Ggx-Vv{nLgx1TmnwZ!O2Aa4$CO?gki1K zmAX-HTf1Tk+kAHQ!1-s!N;E6Ws0it`^jo9j!@5M$?8dM1uz-NnTSJr_uQR$Kl^&NZ z6S7R+WLKzK>~5ShqFFZ79VCQVv}M3XbIN$##`v9ex&ute<%nedAk)UMaXi0%b&g_G z6<}<+GV%qK6S=mVDcDy-sDuXoGK7!WL5n~bza;{wO1GV#?4hhJe%A#t#(_MavH9eF z^V^i#n64WoTkCo2_x86GA(V?I1>H4|p7xw{mIgSb>uWfT*^jt8F0eF7SI?e^z9Qx$ zM!>K00BCN%mR~)?!bIJHIjyShK^Df3MeO22S{82*#rD!D&zMmUi!>DQI1qrE?&_E@ zX++_^{^nzBx2IcVe)JDQx1%8NPKKNa0@!r9S?BF*V%QsolPoj9YEu=v_v7?^eLbqU zT?;WkOb;d?gSl%RuaioJ;vf%-WI)2H@jBUAuM*1N19%=Y^|AY)C+3rTCtd(O-P!3r zODWh$=hoKo@Sl9Y6C#2a+~VmFo8P5HNy3dVT$*YU(jd;^Q}-iQBig1gK##ugy3G1_ z1+rWDEkG=v4d6F-$7Y4_=yuCfAf7>N`LDVey|DOZw|_6GZ31l_7``8er%W_))+o*v zDq1Lh@0loRZ}s9`;#SFMH;~p{NM)A&@xv%60A zd~|pEz(^OJDQK-ZVQ2-4*rc1xF7*g80kRzY<3pL^!~Ej&6ST7KdKyP;8AfX21wbf7 zuktnspUfsDl|Puo=r}*yRb{K0&WvM)4UQn)kJzPYVWCY!egUWZQopt(K}}7;BvtO% zA(vQ7Oeu> zwgmR{NCODs`s&ttL(C#j58@1R!wLkU81a0vu=$E7cm_;ZMwikqg8y`vNdVX#w3o?; z6%l*M+I9xe8+5yHXO(G^oOfoAb%)d`o|Aede5>bTPSY>1d6CAX?|8^+?R!{xSN4sP zhS!ljbn6!b2??MHaH_x#nX6y+GU4I;3jdQ;$rquFqjNsI*;5` zj(`&;_=ybE?sm`!2$Z)~u~!P?8_)lMaf8p;6DXfgjU3gU{q?SbK-jxDQ0!`GltCIN z=yI>*yxdnKkNYD3NzC?0wt7#aQIL6HFy~4@EWWPjqR=I?|x?yTufZXMd z<*6YUr1$C|Msm5Kg0F8sU1BpX`JVGN94|yvxlAL4tSvxt^b8C>6`x4RsUPyL$x%lV zDBq#dnwhmfRSgX@FA7@W)24sZ-ioxKuuwrSpbq;-1Tz^dSY{5uLyPUdGF`p?y{|wT zcwx@;_frQDK_cqN{L@^1tEdTNt^pOhz-U+oJuY}r7t|qp@uRyEmT#JKt|vIKLGubBDoJZ)dx(IOK0r3;0YcSN(oMf)G= z0`}3#q$xw6aj&*v*gOgOUf1 zrbbn=AZ7IdE%4@30@=lzf8MQ&;FK{OEy_p#jNWg_|MTgK6=mi=Er-kT_B;gi5Ja4F zC+z}A;RAxtO(Zka>^)&lu1iE5p<@g&k9Nbf9?p}xh8r$!MWtPF`s~&(I~oyO9&qL< zWft1XetrJOsKNi|YSLiq-%TDsqPmEX zC@IRF3P2eW-!Dql2)>0mW3IyW8VRzq{e|*$Bv!s4$vA+m83pH`ofZTJ+O!kReP~B> zjD#L>Mg@vY&w}$iwS|U~)er3ltr$+tp;7!1%oz0N{oMh-&~>%td!GY<=IwHBPcF1a zpsZC>FrsQd#@T^nnKV$xr)}3C#5VpsQ8lNs5^cP;&(wGv+DW|Ax!8pI11NVdUq6CL^nLr&bcSHT{`-hhU5%$Mr8kFigbbxXe7$Uz8W^9Y*H6PYG#f26^bU4Y zP>AcBqbgNJi_NR1$~oqv9l!5pv1}V=xfbs}iSKmjlzM0B)ESHxA#+uG$25g`ddt$f z+N}ZCSf}0uB5g|;14@JCYo!+h8LJlKKP3EnALaJ54Dy(3qB)}+X`ky}=gS&fv^~$cCH_UgO ztW5b?c1E*8=bD07S69Q{QP6bsrOQ+V&DKJ#N{p)b69tVKBNzp{4CGWhU)H{{$ZZru zKv2?zdTA?t>D@y5s-jBy9~p~W*+{S4NG>C`x5oholsf_9kd4yAxcMp0=XV@eIgmv7 zC_1zZ{|LRwAzVjH965gAv48if#`Kt5?nvaN{If;hm5WtrqbS!JnvSHcgJ+#A0Z?;m zu0xbwcmVd~kJ`FlDeV~~eF9R{cA1dilo4aL6#<^P9Tv}its_*sc<0RPDCcM*X#T02 z|C+j{K>aprL0AT3z&9)6QVvck&a~cDEH-?&K-<=$?eqX=b+Y?sr_!;)7(Wc&QZcf;46zK0w{#CbPvn19LcAwMZ0#!~%yV)dY7jSlLXc{9P06S}dEs(oYk zP%GeA+yCOy{Lb_M`!k9CPFvT5_5#<-#(+!DpgRFI@(sRa@(m~E!qP|AJIi<+2HiaF zIgmuHC-c>-98GU?D3~9T8YwEJUW>J{K|55f;&2fxk}hrS5lo9qzvH2R>AN2}hVt`r znr)Ev+?ZfEJKE~cS1Mr87}AKYL}Po?By)6%+6D%m=Qc`6Fh@PJdDSz+dnW~GpPMd+ z>0K{C5%6W5r*rNr`(cs@Y}v5GJ$q#n>6rYzatb11(r?ccU^|a|13hP`a#Ln|J6=bQ zq(W=F9`Of7c5Db7)Lyo}t9@I{D9?^!VUjK$^m+4evX7lPnmtBuF^R5f_3{!jg*@l* zEsNB4e5c)hQqsiBAA{tY2M&{2Lt6$>q~T`(5WOP=e z*qO(C`@md)HEB>@5w=kqg8uhYNw4(i2Gc*u1#wRIFZ85{YEKK9BIz*>`rabi@>Cz5 za%d9~DStbi;8uYB`x(zc!Sv>ja0W07>|G*aGP)b)^d;s<_5c3*U)Oc!pX)|Fq!mP5;lnxWaYf`1tsp>Nr03j*O0GbiQ)>9|Ncm4Rr9G9dXV7x%+P~ tSMqQ)+4cX1{O{p_{r}6a{NH;9Pkdz!XFu)5)C&UsRG(@+K`5Dr{1+&7wX3 z_vU+?SM~b5|A6n0Pq*9a^%R%udOXhaK91wKALk=zx1r7oMlMDQg|b3VSJRk6A>Yy` zFIkNLL{Yd}@t>t9bPu>wD9hH6|1F?gPvD?X)>8B|x9#;#==rj31!e8(ryHMAyS6Ws z&Q065aY57O&CBp-f4+3LP#6CDo)X}-Sp9$hSh9&i_wOI-R~D@P_dVs@@__$+zuJzn z=-)pA)-GK8?|aH3PRfFR|5*EyvgF_Qlx_cg#D5D#q5Kz7NYelEg7RMhp-}#-w3Pq) z1sddkjg|5rJfKkig9rb?0|J--g9nuV-~r;`KX~vTJRtSpKX~vTJU|%y2M_*(2c#VQ zg$Hp@d?G%aeLY__&$nD#%htUo`l$Y|Zy$r+JD$|I^~hN~V;bV?l#l$pjU2x?%+}FxKUF*{H{B>dfwW8YLN$=)}YcloI#a1&i48zyE z|EPev+ZhAM$I`y8Tw?h@^4i_%4e;-7aBH+KJBg^n#F#Hz`WCdtn|NjNUT0J*+cYP&V)v^!#Q;D8>?hs;@IrKE( z$d|{CnPz$S)7r_W?$#FlQ{9{|@5?Z$DC$b&R`D4Nty7)eaL4eb+51THBGGl?F&^X_ zN`S}cWLJ_-Q~t5`;X1X5>vB$&FC*8rPqar!|JqMp5X1Dhj%sam?|iM;`}l)RMKG&t zN2E^WJ)=~c@vmP0UMP@FAyXcTXqsz#rPiyflD6c9eMMcBF=BgS=4rq3{QG7XH=dao zP;3v~Z1c7FH90fzjKOu}olX_jBn3+; zbG*6mKiFmf0>iTnm6ecF4?6igC zohdQeTefU@mw&8j|KlS@d((}DwZph>&oJOO>gg$e-fn>V^vF*ptaDIc;B-G#ZKcxB zWM)I!#ERO%c!<19z`Tr2dEi7l|2zj16T5|n5w1VeZXp?7J$2blp}lrOdbq1D;?B++ zmG}2$q?lxx4OWXJX?l8k>Q#}23b1me-$>r;>3noj68}x5lfk$@EzR<$XBWo)*{8g} z{cx>>Dg_rXw8P(CEuzEV4t-tlbLN3HquuopxAo(+Cx?Et zNAFS%ni}nn^VmRs-ykURCm=O7lT>|ee!aiV#N=8n949(Y-e&jjEu_l^@P7W1=VUuK zGb!UgH#0F<#cw9zqjZ>w6c~fEp^{;LSdNSU!Ro=N_^??Hi1}oUD zG!a4ie>Tr~-^Hkvx+S z)}`f~%-r(Mfq{X?zZQ$puICC{0@(_6vxC^A(wU)GgF~;Rs}R68wb$k7ufKZzI&=lM zyr#CccJLay-Cwe-sH(p|Ww0aKL)?DURK!{Nar*S;nf_hqV{Wu)azV1+`S307o#j1^kH}Jqz4z1Man($hp3ge)Xnh$zGG4*O^7Rb`X|@gfS7(@H1%Jvg zB|#`pef{!f;8)Kk$)le$IWP13dGq+s47yHyzpQhSv8~bXc6qM-D?!1OV@>%r z{!GXXo5o!Ghlie>+yCIuwhiWm8~yO|{Y7p+I;#*GHZLx%h{Q^9D;y7PZfM7|ji@bL2zKWBv`BqXHG zJ+buue(^|anXmD9GoOS>W+3P0!{sBtKG=4?zBbtCkW>*RtRGz3n&{KVNh(>0beSSa zFroGI4TC(cl(csDi9C`NHvbm}5TIu?% zgK@cC*{CtHE-lL8TRP(v@siY2!=0*DBobN9lD&Gm@;DadA!^)yR2gYL3DfMET8&m0 z))~(<7v5KK()>?+#=~zMFHYBV-*7O0LuCX%zf0NVVS^-971i014>8JhmOj0#FD|c& zNR3cc5}sa|R-zTcR>9}fgA|fG`Y}*g|EeakL|<{=5Q!eunSmGaDn6dC6IHgh_>O;_ zK961h%wt}hR)w{Ng0mMxndYuaDx zJ=j@=bt2nM6`jhmd{Ug&elXf4#TouHnb@JtBxOwpa<%@XXB2d*(%M zc6N5os#)XIUA-1mKVK3pWmCU1CfY)zZII&+Pket~msm20fT(zL(lo$?X#A z+53fcG>P1M@@ra!6SXG=zR899^$ct4Ir?R7H?Rd-jV@T$io}dFlS4*%M?XobdN$g} z(LVU_VeP|*5AVIV`@3n*{O6?EnbQ{;S=&DBQVWyFE^ITcv&b^bJMunFPu96%L@!BXLj2y9f)fuX5u1?z6B;n1sH5{km2f0l|Y`NDuBwAi3)OJN>TB>v);L9RJx2 z%}1deGJh%Bm;1P>4BbqUTYaO-+p0Ahw~L z+ohDL)qmbsQ))7Y7e#gKQ}5q!K6s#8Y{ZYt%awL6=j z)=W%w=cMB9gn8+c_r9#I4(jRYX+R~=)I{vB!b)2_PiH**;m%GOr_Y(BJsZSt6hQJn zs=bELQJkA-Pqlw_^EHRItska)9_=E3_`5#G z%HS78^j>Lc>HZSWW0|O`Zf{rQ9MW<@b26kYnOGElJlt6u zQl~aQV;aHlKO^(2&J;mZYdSJ({(HLrTx(s%kgjUdRX;Pj{)sjmkf9d`Y8mZ8#b zx|f|)1>}mhrKKe)DOk)W97y*w$SJ+L#thS(LZo8_hzcETK&~EX(}%WZ zS(M1DVn^b)dL2IlbR^@|*Gx**9^;n#xG>ToZt!C(>N@Lj;fW(%O_r0BlPEEv9CAnZ zD$mahQ^ie4Vz?qXwb0#c?%wnizZKKufHpoj@?lpMK!|N$bJ0Qb`p1qR6el~P+hg_^ z2Bn58i6ajmfAUp8>z|z-k2rX|$o|INb*$Q`*X=J>sTq9nqx|ZjzFJ0b%3ym{+=&#c zgLy~yg>r6QpXfLB%eyzPUQk-vC8PV%qety&(T2f$47Ugys!n!HQ0J$qHapB@Th9#d ze0=1cAR7whr<0^wI)1nl`%+qlGN9jH6%m0#bZprD{nZ!=Q>jGXu|~!2%tuiP%YiQM zFbeY`1J_z~bahp+Tb*IzN2BdbX>BfYZ%4z@J-W>aNO@lCVL$biA9~}?FT-g&{QUe# z+W-t?P1T7AuLxnEZ<|H!8N91DD<(yq8G2my#$~XrLdNdp6>kKK4eA@U=nfL~9qv&P z-6j>-?&23JdYbEpoeEkgV{Is>hT14OBAtfoi4SiT zB4ts`Vyi@%t0xc!e<|iRDJ|G`mVs~g+(Jr#5DoM^bpbFZVDA4mxA@HtZ%lGdN@k+| z&}to+!n-uR=p)UAuChnou9e*N{MD;h(^|h=s-uLdW*_jYLiC8#?Uz?Z#>VcW6N_#K z`U_dGaB(?u$rja;dfFeQJ>lf%1Mkq70kO15n;Cca>}ilmJk@!vx24MgNJC&O4pYUI}%|H)TYQSorT(YjS&pbK?Y z9`!G;Xh6YdtcRf6==^!r>7L6fK*>Y zJYd8WRlW9Z;hXDn65)z%fi`s;k+9xBZ(Sz$dr;YE%mKxokP^lI(&3bo-JiGay*7Q* zt0f56d(8c-Q_d4MNz|lEnv|IW#6^{n4lgSTrNj_ly`|5wW|S(&SziG{ZfNYUCP7n> zDe26RUg_xPgM*znTq+N`JYikNwn4Y1g;jiSAh3A3z-6A?qJeqO?G$1A9j zm7$z6N8ToTgD?6Gvy=t~o?oS^I5$;Kt>kn_h|CumMLY7w4y1VXx7^qjIAuk;GjNz# zu~&a$ZuAP0)MHI95$NbPCF5VbT79FhELl7IqqB1^<%B7zb3T3GnU#;~RJjpOVE~!V z?z1vgJZs`CJP#zGKs*FAV&DF}%?qi4XE z;Ki%j+AsilXQ`Q;*dLS3{gE+GGJtt>cu(#nWyI|95heod3D*C};y$X=p1Z zEeWGy_9Y-{M3~#=k%FY27bQ1H3-m!?R>_-&x1Y^f&}T^EwaSr6=)OV z<2Q0+lnN1$ln6c*o1TV;S}pB`?cpH~iKp&7B_JSq;7r~M3Z-W?>OKq7`lvyo@)k?q z(N7bAzXd*ZgxKA>%vU_=LB%UH!Iz`1$g6CyELH3)?#|{=^7zS?GdbI+#csiZu=Dze z1&n_$+$xfEhMC+=>A>@42hBeqxqmhlxDYl~5#KXk54Jqf)H=u3>NkBXvh#+53m+Pe zt{ZZ8gsOD`;3chZ9`v?6V8KGbio}V1jRXGnhYweR5%H3H#HGYkuZcqcil)nYRa3LW zm6_uAxxl5BW0Re3WY-P(V_c|TqYt?$6k`L@ymj@9ii%`_`n-SLjg65Z3n5%%KHttoqpGr+pQ`u9 z-U_Oz%`4RRQ0M2!ZYvI!uL;@mRhn$w+)x~qtT>~}jmSu*@fIJKYa3!IGgqNRfR+Yy+W7m6g=eF1AHe!g_ct5p5 zBIQwTZrkUBE@7yT@_;3KUoZ7<5{@%xM&<@#dDxHkg>UT(Bn(h1o$|hJo{hO|er{SY zZh)vxgmmH3D-h-RMRQ)%X^WAb#?7c>d?kIwPLYZ3I-7AVca*%*&Jp%|}&Ow9=?!NB}s7UlF!ZS+2cAH9r^VfPd9V@84J986YYp|qsR%)r< zhkE3o&9|p#-{n|Q>0-qX0>cxm9%OO;#&UF=kc{kNal)1*vmL?5mvd}fJNCsXr)`-D zh445K0GVuXHo7|Vlb`mv;xq4VWL2N4uBizos>D@kD?TPBC^TXoMb7AuG{}qSwRv`q zzRBFG#Iv^$`I6#PpG~W@!ec8De}2KHR=#=aPB&y7quOLC_Du}@XI3LK4?BN(oUS`e zio9O*`rD)9Ar#7$;RHG_JZ^9DE5+- zb{E}|C6#DG9O$isCiVL=_sdL;^>UNT&G28~_X2uEQ4vMarKOaB)Mc^-cGXdYJS$Ip zJ5R&l*{!w_Dl`HMyrgMj^4ZhAh3N@k7yXoQ1S6|>IpFqzT;;sQ=mU=&9 zxV4vspv{G=ls8saLubh{qCnQ$aS=gV0Wiry#D$?FG3^C*p9xSFztK5p2#Nso?IfVjuT;9Xh?y?!GU?+e{p?Ikr~}meB0tD_?@)Va zFm-lnw8@-`jIYWnXyGFAB69w?R}1f_f$uMtJ?^`(#xM{Rkmc?I(Hnjlh)ReXp%86sdk^aL?Z5ES9J`Gt3&{tbeO>W~I4 z(>T_MDo(?hSmesr*EZXta?mnprQ){$QsVxQS*GNVTR~vk32O=@OhHR9a-!CXV}HK$ zfo4P_shwGD)&5r@B@}%1Jm}H=SrWA(W~6y*6tYfqypN8!#6)f9{r{e>E?-Z%v0PzAcfLqJRpb?$V@coSe$8}cDE zoOf&GQjvt!tl|?EcjsfF?MA50c{c+#(HHkA2-<)tlI7Dv4D3mek|Vl8y@i*BGT_5O z3$JJN>_h>+DY|I)V&BOhaa6^xW3BUZrZ<_~SOW@h{SBT#^(L8kMItf1|;-_OVn z#0ayzS^&l0$skFD(yxB~4WhN=HyX zAJ`*Dc6D$5)yiPUdklaQVtdzr!T|Z zv>{L;82G%`5;2fvy?)rv8}b!b1h$j9{PlNw6wpB^ipfSppd%Xt26e|=%s|SmFY~fJ za;OUr3?#o>ypo4QZEnJLq`y^d@p6vU&>zI!TKdnl^S8VBPao{btG5(0D7BqL1~JE7yi><(@BDEu2Wufo?%ruX?WNg!mU8g!^nL@D2}^u zVQV&e-_NflUZkBs$6}P-lWu&wu)l1&ElOW%vQ}cXehHX#1p!0-=&L66H^FWQ2P9IS zjPSzb$G_j+deKSu4OGDv>^b<^c?Op}&AHZa+)5!nxBbD3mHPItX{b#ir*xD2@#g)> zqXn&gKEZ1i#HcJ>ygYDjcAEXvT%G@%d-Iv$T0H~Q7nX|>0l<1O`ypnK%FlQD=PiiE z{P{lA?WrUycb~@@#f~%Dqy?)->yOKufpY}fVYSlT;;+#26g99 zRr!E68@?12k?!F?H=N{n@Wi6ElVzCWG$28isTAO@D+%;e9R0Y**HG-7Lz1sN@YL?) zJhJ@{ZL97mGO0Iif+z=&_riqg|K<8Jslv6FR&cW+DfQhpA%q^#x;(hjfU z_b+{FT69bg6|@aMjCdtgvH>#g&9nv|cl z5QM}MdV2u(rYN%fr`(~_F!b$=}*b&|3!6*}nnON{1S*O`GQV0bScQNIGWRjZN=>WUcpcy?DL5bjAxQmWCy$|T z5nlZeNyxrOiL#>v(ZV6`yq}cdhtQ?zYRykPqaPfn&Z}UCbFIx|YZ)mv^iuN#*#pjC z9(YBFz*mA3i)Lu~ffP<5RpvI$g0fo_04fadQ40tSgARw1vHQ^5$pX1z9HxVA7ZvlM zhhy_$1CL+tg-x=}58NxlyOpE2-1Jl{Jb?5jzgTY&|DZOn-rRjB*%`*$6lZx76PV1r zzAl&Xbn`mxP};2EVtP$D(ObYo_k0@#5cih_6SxT25{@t?3RoLJlIZ(0h*Cl-jBxcr zA`5Za@0l+v8rE6TyK!f%m}mMoL+%8T&Ojj}C6@^3_{1ASRszQw9tdO?|Guv{{Ce{; zi@6dsXj_Ovj;3>%;~5av+O%PQABZ#&b$-_8B!P%S1w|v&#KfTu6;EO>5uqMd@r7W~ zS%f9FqOAC9)+MSeD=qV%pCcp3w2dex7>bcX8$^Jd?l3{z2G?b)tA7JW2h)r}O|k&! zibF5grD9#l)K0KJ8Zk$p{p4_$4&Kq?m&qclGlN<@CqEjww)&2<9?izUXb@Ra1$}4@ zbdp_0#T_83C&@~`Q67Fxlzx-?K14bp*{EgPWo|D_mVH%M7oo#18#arGeM$ssF1KE{1)iw<=ke=_=+L-mYzC6N( z649iZv{$_7N6#%_V6FqR02$WKV-_DUyT7FSJdhB3F^e%0T1!aWLiKZbpw(att+C%gn z`b0-CmgT%kvMaZATseYVGq|=%Sa5C+V}kN2w}cbVm!=1oY_GupV3~C3#zd&lbalrB!*6v#xr5Fzp8C&Qs2G>!wO9RN1`?}J}qq0Xo z9w~X{f0^&}ky3z?cT|7>A5=jy6Elav=?X}|T0Bz#>7)W~ ze@YyluO~>KG$Jx@GrFa5QRudW51A2>Bxpzdlp1lyRD@7iBd{kHA^kASL9_^<0x)Un zr18{CtN8hPn+l{a*->IVNwosma8@nKSsSi0*5D0U#x}`!Z1U4Io0K^RLd}j$6<|sL z^+ZN*r+O3fRP6)K@V_uUv7A2mC|HSGKPd+db(*kSS2NDYk>i#?Y^hAe6AU=#DgAF*{oC|7eDt3Hj|)J~7yy z3I&;IFlo)HI`oO&IVDG(QTL$vln^QL6O%b;RfG6QiTMRWWNJjF;b>i;r23PqFhC6@ zqBIXQxw;??~9BFAa>%%`G6=Ftcfm8kd!J*OZ$wSfqQUtGq{b~+zDXAmJ@ zDOJ)Fb0t&+2{gbW7I{IDw=X@iIAqN8wDOYT$jkZ^SZ3qz-vSRAHm+8wKrVm z9+7Z6zj#F()R)%moTT?(F*0rkc8eg8m9(woYiLFUUvj|zGbXoAota#M&uWmKn_1;QvAr2I{2fZJVE@hI1bRTW6d#Cv#l*zGb3&bT zKLDNB=XMl(xx$;_JD*NN)hcDWX)` zV#;$dF$8gUf7;PrQ2` zRx!$rUsjtD&<^L}#Ozh~Xd(n4!EEZ>6cV4^Z?tS(xT0Y8ld&(P4yS5dWYqI*iF$xm zP6W?3Xw0Fc7Gs6qdzujqY$Q?fj%=qrG4KsXpOPU}s)IrQ zEC`d7l4sBUZ{2hl{=cQ6Q524fYLps)_D6*8*kF8m@%r>|(mW4gp*!@w_uMfEg8VVp zxwH)RI}A`zh0tQfzQXntAQ!P$ki$Jxs`#TZheFL12>E7+0O;==#jZ?10vfvVR^v&o@)+? zLHg29WHGSb^Ctm;quS3clhU=$owvgDTzRa)))k6I1+d-d4JY6Rw!4X^kCNdIQMO}? zqpuDP58J*;*g|X>@c<M=2d7D^I$dvWwi7S|RY+CLfbnS^BpMDdY_nUcmh+jI zw2{fo1ay$3b9R8Xu6v-%1#CJ5s_Ht{=umZG>6+kDA|kb?-%SigRTNq;QG&8uMw?-Z zwnhOFNvz+M$O8wN!M5BE!dD14eTdMd%cAz=zOq4I-CCX(L}94~gKfX=lpQ3n{SwR3 zY%+>PQDC05zlfA{c`|B3#Fjx^XeCsIg2H?d0^$U#BKihOrZ;REkN4~M!>tlZC@3z1 z8=-R?t_(S10n_LuMx7%FLsA)CpDz_r>|K@2QG0E(2*C}I!No?Lk;yhlpLZbkEJ8r^ zJI;~D+4Bu@J1bgh7%rRj6ioy`Axygxy9lXH8`xmX5!pG87D@)IDY!H}!>ebY;{+4A zd~UMNpUwLY>WnMYks?d3rCA%n=Wfxun6LnVak)U10*k zQGvJd_xw$uMY6;IKt}0AG$HN|*3L@hyXtYIWCfrwJNoH{w^QWyi1Zw1?xshpUQaMXdWQ+z1SE4tIWHnje|vU* z-R8}kwW@=ULvSSyi}+3UJBa!(1Nnt6DR`O+TWbp5$_SkBWlhZ&bH>-0SmKk3JYtLf ze^ABuK{9bSp`V9C;FW^LTS#-oVKtkcNbhzd-bs=|k!p*zX1d~D@cE7ywenxR0)L1m z8TTPkBu1R!rXq8-cPL$d0wszTD9Oky(%6WFlKoT!0JTCk_?FNeaZZBrX(M8yW)f6E z+UVGFqJa_}pHyy;b~pko{bxsspDZd`xE1R~i#t+x=*^O1V_Dbfgok2weMga#a{Ckd za=Wzuq&|8p_3fjAW;gwjzOP%4)ri7&JBZP6Rl*kcHW0>8qMZ=0-pg07BqEhDy$J$q z+e~Je1a!(mDuCOL2Sq&TLy|Sa5TINYU?(>b2Z#8GF7+-|XS!jx25~XM9&1wyUZHi} z9|PBRgw`%vC6pbo;6kn>pC0QeviN}s+7y}PMwe>}cVVl;u%_aIf+$cXJ@ilEf+Y6G zQp{SkuDiTV-bQE>5qc093aB_FJZ+&|)0+{u0GZyky<8Vz;JS&jBZG_%AegO&v0}qW z51AE$s2Og%|FIEelO{Gr8!9;tClP-AKi>|(G_l*khy1QH4kcp4$neY=<3q%k1Rcf* z{F2CX3e=fN5FZ zm4mZt!7Lh3DAFM32qb{srJo>;%E2B(MDDJXckSNHq#LpPM@q|)!^n#G?JZb<~s$Z-M`2;s@i&5eo= zJqK^SD^k8HUdA?9*1w9^i;Oa9fLe6tpG+Tytg8hvAVk^!m1F@Ck)p7>gvqqdOo7X= z6BQ2nV2oP-(2rL%6BEn=ERJ);B`&t-jwU89Q3)H0(2?2+8%1V7c0p?h#n?d`*|{ek zP0yK3>j0X;iY{I!+>|s@TxxWR-R-)%+o}Q2F`o5(?9!@AA{u}fp%$;`YC{YILDiz6 zs=ia@s1zZxO`xRc=3Ao@U~d*Zwu$-TEWbQj_D7gtBU0dkCD1Z$66~=YIa2zJZ@^p3IkGtGG!nX)78m3eck|tX*JwT zVg}fs1+FDLGr0N!%seJTWV!uZ%7aaj=&#Puz1k{RD&CoBy$llaCa zdvS{uAlEl?yQXo)?PLfgO`XZr9sXrJH;wX;3etK}>H7e|?j#V1dz588G!8SE2t9s( zOxLaF_zYJoVK$^rFh(utQDhF%B(q!05%zbe5a|T@c$f#PqGzCOO)ORfW|KNI;!M15 zD3V({#>XLI3^WcgSUPGf5VT_eZ<7CHuHVeV68$c;sz3Q zaJ`kk$`28i<2eW=O&r>=g*}WuaSPOQTlhfXks^#D#)R0>Q5P%0uo+dboYR%Cme>G? z8E)G&G2c+qfA3!QxYM^AE7@2oERE9_x~rjbp> zC7TKj2BwM@pO5=(rT43=*StP8|5Ad=!P?nU^kR9Tnp3UW;y(92)y-b<0>dX(8nxuY z`I2>geh3%;_U&%@`Cso~#>2g>I#BB$9v!Cbaaez8vgO>@`t;-QqhH!bPsdzDSHQOvahk5^E!Q6$zW&fyw5$T6Sq)23*r6A zoWeFTgO+Tb=%iu~Z^5>pYiRhnkU$J9=0fD4M|@~t;POvc<#)HXGaSfhC#Bok+Ilf{ zlN3{=KtrzmGT5smOIlvPUjFRaGgRXz=hAh9!GmuBk0AuSh{HkM}cPU2k|FAOC9R zIZPZ5Zd${wm{gvHw_5+`9JjLfMmjpWh8Z2rk!wn4CN}c$^4iPI%K^kpkM}za^D{*v z!W2>67r)F_*tF?6LcVe4E})~zxsZ^M%uXuC$!i4#&(->ClCLBIc?vVR!XIuRH4=u2 z%3>M$STa~u?mZ7$UI+TJX&y^;tfGqQGoEeIGzaq%)4O-?7Jr=)x$qSHZzCjr-2=LQ z2w0pJ5H>I{@QBCEZ22cd)!REex#2h0aO*`wzBn*&f<=6gZQNH(JTVQbTxtlj{4m~4VANcay!v$B!H=^ut$8o}B zD3y_qVLJI>44-3G*ayJ>c5~8&fq_A*3RzBlSA5dx0RMZ6I;PGKQTk$}EX>}S?=Vi^ z%dy2Rt-}e}*AdN)DKu;{LxkyFm-dpgFhD0e)FtZf+! z@9C#ctmrdQDrA6w6E;i8b*HDNV@R^~O_G{)(dRE;xUi!4jBf}3-F~Cv$uni9v;~i` z#hxpqrKP>RZ-LJZW|O>sLhwae#^R?iJKX~1D)gPs&zx$j2(d+@zqkKkip{l{v9aER zBfU-RTfO>X_9}SwnNLhi{1jznV&dEsyW=8eU*xPz?r-#G=K+a!W+u*H%;||0l0n{b>JeKPcyeygV&qW9HDXu)&EzTNViugKk%T z?1NEconVd6`}glb+8BD83U-ZgKr{%TQq@d*Kd%v3MD7QW-NG#^C}=6T7CkCAuh2Sj z3n|SPB>o1pF~(}KpJp5mAHDvy6|`V4g}1){Q3m}eE; zP5J))JA!(A;QRK%;^H<~;G=%y+(Q7|L4TGy7k>%4;lO7`ZTM*Rij|j_KbVXN)Lp2t zWI5+1&5TZBwzLLubDsNCM_-9(9|T6 z@bUz(qQr1367AFJQWT?S6&3W@!nl1d_VyRATv?6d2D`gA6uZq%okRoYgK`kNx2jW3 zFs07a#zqhFO02*ZF&3?*r`(+zbLnA#WxOLO z2I+~y&(D7#54r?5d`dYdXxlGXlQrRBK?~EOx4=G3{QS~IZ=OG=!*adfhA1^oe}E`` zJ>U2Kc8E#4u!snmdnkJKC1jpf#UHrh24b8Fr*N3|l3Pu@OCagR3_0M0v%mBZ#P)196 z`6Bq3&SI$8v%Hv%iRmnAdpia-*k~#9K=hu!VaYCSnGDvdczWbs<`f-0<63299%SY| zMNTH8md8Hh$5HmQJ$1^!e4RWq{cqw*k51tEM*e z!fK6H0a{+^x`U^%!$!2M`sAHEcM2iZIeeltpzFTAbOBopL3`V0Me$fh(4h+ClbyqX z5>H8G6&3sXZZmat3d+0ag4E%Ho4@yC1+gV z%PTxvJ(mM*>FVi4?sIW)xC~beQK@PcuM7KH=(-SM>oXumq583&#x-Ew=YoQQ{#UXp z|2AB=YYvs4w;{{LM>rN^JLd2-nXGM)AP}a;4{D^oCkKtCxJunTak)V&P zWM*dm_WQSZ2|67@?kVCxa0O2E@E$*YJom=DGin4A)3Z)BmD5N>b8~Y$x%oUqHx!>k zXk_HemxcRJ*LUMAS`mP&H&qP!&a80=y3VzE70@pZ?pM>J4mfv$Ggw7E8&p+QaVq3o z&uNQ;g(q%hN|w_aq08x$MY-yg*qZ85Z5#>dBp028b!NmM>XXKHF%URCw#zVz;7 zipKWsgJ|F438AvF@$qDyOX^t^k=`$0ME$h6*_`w*e2GebV|)51S6%`z@6I;gQhgF3 z@fK*8zzDq^>Y4I4)W8>q|`y zBM=I-gxk-nb@u=lf%2>oT(?fR{_{Pfg{ZrlfX^qd0NCJbh;ffE0}uedYU%0etM3zx zt9GN4it;wo??3-)#>L9Y3J7e$f(2%B^C$b7IdRf%IkGVw`3C0!B>?}I3Je!jg}))jBYTG%+;@LvKI<-?R?Go*twAzdQxQUEhu7& z-UDkH*`+pQSjJ&N;AUS4`(bq+#^?d?VVOD$3QieRf0duRIWsxj4oAs7i<10v`23;l zB)_SpaB`o|G_$p}g(qbxNWQTms~$$rf}#9smToum^5kr6ZK2p%&{hBqvGnD@)l}Mk zr$n5dnbReVSWnO#HCvQ(`+0Z zq8XEQ=pbnE)_*r!@A+bN5`8J=ZNRj-zj4Gc`2_Qe=huhn`ZZPp)6TzM=S}1Wu`? zpWjQ1!kD;!Ff-13X5wLHF{UV@3FQy&VI?>=QbY_BC=>`Hbi{ioTM0k*+lRI~upn$V zxr8lSw_(F_C`FO`a`Z_mez?2Jv#(jKC?A)GW3y`vc1~uj1Je8n6a&|=1YnL`1RT+8 z0gEK!g9AnTmE1d*qm$e+PPh9skK`N}8X}wQictrKO02(r{fcq|MyS1XiY%jG)WxJW z)KNfq=6;ic==+cr8AW7xP?&kPFcS+L1q^=$`0$mF53VLAu3WWhRf5vV9VUxO41FzT zUAb~)?(dVofa(SY2Gn(R13S#nJDpq0csn~gm2|aHhWfDhu#TqojPq080!qM%$=|Gz z2<(F+BHKX6uf)U%W%!|nVaky39DE46?hD{#^phwjWWvi>?jVvty7K=(5VKqUp}hQj z?I31hk1N{q7gj@KC$qez6j8XMP`s?2oFp7Wv7xv{4bO16Z<4Wsx!os)g@x%YiaoaN z-5b;K1xvan3QE@HUc!6hM)pkXbl2Dhv4-f{G(IQ9|r47F>8fPjGL?&JW{ zUX6|qKqe88mp93f!J3_iwMcvoI?5{jzkLd$!vmwRA^na|u`|GEdvSh_1vG8Jx1>%g#V%H2d@C&xPu*itSm9`xG^MeDBW%KJcCPM624JA%hhr`1&GP;tvbJ5)_IT zk?VBqKCR+c<$F$=TdPk%BmVn(V6iT{n z-n408wBE`Vf<}~62#eS`;9kfX+euRvRVeiA*3VVZ&ypjjPXz*-3@Vq;^gVfe!+>Q?%1 z79xpOBaA`KAzRyZ>Fed>_IXC%xOECnNA%#EjWedVcd+s(dFZ+gTRA�Hl_l_DkRY zP!Jnsd!p7K>xKb#6xayx{I_q1Xsxpno{{q?flm1G@#EnTB1v7%^#0+(aT_;n(!hcUeV4{zHTrmz z)6Shc!7EqdFMqG)#MUnc%fW`jvit5R)bY+_kR8U`Q)le$?7qQ!S_z7E0w2kva$0s* z)=vXX^+Si&VkRb<@fm@OZn_amMmm+pFJl^l=!OIq4!FxAx?BBkbN%UF@vk$KfBLk~ z4I?H8k1IkBxGZeiBKRfBF^s2BPzEaCN;S&0)6=v4`oxDFJwjJk_eyL9G?{JNwndrp ze9ZGYcp0kc4wENTDmAk^7~L}*HNh4K(#*neZfPqqw=fD%mCoRF>%i#f#gdY(1e5PS zaDXt-dzc48S;2wBH8JA*7y+RR&rIf)wKGRvMSJ~@&Xa*a$tR!zgA!JxD5;k?6dKl1 zj4_J9rcKP?V*g9g&Fdmf#}?AUX==I9`t>Q`!%_KNH&lI<;A+?5z4JZ{yviCu2>P~o zpl-)Wh^No+kcLC(c#fG96J$uof)QNwO$YeBh^Y+_ceTbLoDRo>B5q|)VN-2j{$adJ zC~ybx67h!GE4*B&4(R9l{W*ODpO=kWE@{eMg$ z5-04*p^>Pgp8YLh%_ClF8cXmH2R_JHHO_Mx#y+0a?Lw(86B^ZTkno?3yzJ2=^fDYFN z>X};!nsDcNdZ4ICsoyLYtj14qbXmCG52J-8t5#jk%gb9C6?un1w!*?f-Q(Y66%?v4 zsNbDqslqG#=T>a~-bwZzkm2eTj!=c`jkxSdRlw0P$=^7$0KYjM1sIAHA=KzJK>J|NB{|z1Wa*~)5fdpb2O*7 z5EgSn^q?P!L zOOfq}leRkQaR#TJTsvMe5g)md;ngR=c4QauY!^PP)Mjc6ya2eYqfefE#ds*sOyI6& z5VIoY8{&KKCGT5#8+DEmRUvxcLEs(2_`yN}7*Vw4(G|91@RY|zwALkzjK-oyEi9az zK?q%^8B0kCd3kw7|2gHFtCAV&o3LrnZ7Oj*L%2Rx@*tb5tE;G0S?NmS$U6jX_w|M2 zp(?uBHx*nGd(@gqM+Eo`{>R)J&MssC*$;-M7ZwgVTREIxEu2|+$4|w^Dm*-Zl~gp) z;g*9Zf5Im691_agB6o+Zf;(TqlL_24$*}))@W6rZ;CDD5c-CY~OuqGt#onh+YrM%h zarNrez_2hadekjte;gQ|fYZU3m= zehf*NczBlMY)M!+WN;}wI3fbXkXK|{ZRygbIN!<(*UM!LKy5M4zgFu{j+-JQ2=haw z*Xr)1qGaCMm86=h=1fF+ND3>mCtcwGz%j7o%uY2J$QCVHMC8Ok3I&J#LA)0{U8Oej zw3E64zc_^9M6ld^@7IzzRK_9$1TW0$+|?%`w`qBJ$ljP={uH)zAk7t=n-<}503j=B zqCWUJmnr2Bcv%Q#JPZWu8!n8i9-<8wlqW5mNN24ZhC-{UqeDPd!y|`PEvQ{B<2Mr$ zHe$8Fp*X>if)j=jdxUkvUn1-iih8mF0Ck^GgfS6d!6}f42Sx#1h~*Lu5oz@f8oyDI zn|)S(8bVYY{bdoP0Q%@3ywI_U-P)dde7*^28rrfbZHG{ZFfzEY%8#KYoG@7%o4@64 zXV(6QbRfuA%J|O9dUI2dyngIaTj5xvPPTds*gboWBxzC(eCByhK7ch zs$Onxn^2R_!>2|hJwT(`Z|D0#*;3*9h7Eo>oc3bV=KStxCICKd02#Se6PQ3h@E)|G z-{U9^W=ELE>C?rTQ)oc8c=Ui-P9~I^Q|Ai`6d)qr`^0hf>{+6FXao&i1+oHR+c(xd zMg_7H^@7ih>$WmC-GlnQv$y35H4^pB(Ew(B<69hlYHzZ4L715E- zojb>JFl_fywEy!rZrtdI-QM!6;o&;$dc`LZD2I5+X27&4E`ts=k)XMGsJEwRxn zy6TcHr>3qmHa33D7eYe!1FYu+Rq18qE)2MMksdcXk)S|9E6^qgc7CM^X4FvDlkp%b z(%8vYjNCucxJ_e8Pb-xl4YUHdIq%D*H$eKvzGvy^zjbt60JeDg^(!xcS8mn)fmPn%+X z6Sp)^RRMDB#u8NTRO8>1tiAvvCI)zdP1YW0xowi+Iy2$Qqvpqh(ExejmH7B2Sm^!x z_uI8>kd!pSbI8z&c!*L0TKyIybLFOTE`I(9Oi0_YD}^Xsd}@B73N9^c#l)6^BF22q8)>+^qv4l`jFMR`pa+IVK1K+msD4w9)-Ia8;v^WGu z)G^{ekJ*7O&drhuUHJQ`^%qtbp6q7B{PfzXt>#fFA@AqBwwF{pn1s-&#}}(7nCb_B^mKU@o$MQNICM z9=Nt^dwYBTT)%(i8Vyp+72)Yw$*&rU7V{lLo2aUElPoSg@`>2(Uf={poh#@24ZT$tBd}M2 zDl}95t&A-oYMz)Fu!f#$_;7>9l7y{ZE1_*Do*EJYCA>&L9ak!%nFwEJ&Ybc15>Fe| zXkI%17bzq~hK4RTFY#P~y{LfW&=sIk*?WMpick3|@P}&A`=r~qg(0qxa}KZZT%J$x zIV~hM;3`uiP<1RiIX4@gSpW9g_3MJ-;*97n@4Z;g56n!uW2IiTXme8Vq^tTlN1t@B(Sy(P$px~6p^_v_Wum+kS4{^w|`~{EET~cGQYI$5$ zps$cTJ{(=X{Vpm5o*0Qi_d+zVazI8FUVoh7A`EO>7GuT*JT$}x*NTMp>bEQ`DiVtk z?T4t(h3L9Hst9YH#@@Xw=rQT);`YZ{N;z@H?dm=!Yilxc7JVNec!4x=7)L#-^R$9l zo*{I|S;Q>&pV6!7P)Ugw@8QXAlM4UE@-8hrX!Fa^O;TQZ-@0`R)}ALlr`N1mgLlw* z*C~D*nm8U&2Hs@m)(hB0q)t6KL>Zvy{=B2C&tJS?ZS>@!K!*+`4HHCC)V%P4plv4` zu$v}|o9pC|y&er<5U6CDlYJ5c0D>XFd#%w75bjq$+tR56L6Eamgo--%2@_0M)Bbln zr%9Qcd@HbS-9m(!_w<+~)NbPS0Ka~Qy4^b1GK{YE4W^S1Udzu9;}GK^tmag>^=eBr zA%KE!sD8OsL=S|e;n0bU(yvAC3($eFH&4$> zEIXztw>~Le5>-**efaPp&df6)U}-B57xkg^3ReNpBIZ)wn9xP18qSa&zi)DZePL4^SQh2DcH+H&9; z+fiGsG2uhse(~nbN{uDT5YO?6cpl%PL^c1pcV9pjpSQO1gNjDq#Q(iI(p>n^BqIXO zH#SJ(x!vvrliSJNmO7Zf9B#>v6B7VP)_CRqM~7EnQA8%sT!&?rIp3u<91-=qhvyP> zNqXqURp78fpMKz+6S|)cgs#U*^O*KNJUx08j~yII-RX~kEfEj_ zuqd2o%Q*}*NI>iA>rel5C0B|k-eD93Kb8;i#x+f^m62g8D=Wh&X|eI1J!+>zamJ5K zl#33?N=mMPA63K7E-kHi9z#)90Gh`~KW@~7Fn%^CM|x&<7Q$=Dco~?U>d5a;%T!K} zs3W_KlGV>fghxh2ox?LLtbrq=-pnEy4#6m#`-nRVswM^u8W}Qw9SEW^qAuPO0|MkR zh`Z!>I}(wf5NcRsG^%6VhdT5gAN|A#{+au`KJ!58XiaoK9+SWUgdS@SI;paVfgu$> znc$9>dKydc53CnEOgy_YJ{{nj@2^*MaBzT1>@dlN8n+ruho3(wqAUkZYs*;Q*AT!L zy*G1s5GAE7L3!qB0p}b8czR|&Ke>*YdjFD5c3Kh919sVO-+dLH<9J* zXqUy>?P|a=KvIDy=}%0paIBuh1QQpRI8yuO4-VuVIq?xW%E7_S9Rl@0)YX(z2(Xz9 z-CH)tY)CLeB1-v6E!3lx_TG2X|V-pronXiubt&+? zl9D?yUrHb=Q)2ozwsyH=MJz${w) ziC;~{1da)qLHe<+5Ub-#Uua zpO+8K;SKZ#oXafzNsjJGs>-g@oJAKlAKu&Dm?r3m=Bl&wGX40Tu=vWxmgr(ktN>fM zl1P-8?#*k3%lJKIrz2@z=3O$0^5xIUz|{dB@xlE^sH&+Q6Rh=-o|%mCM=%b%QX}U_ zPdv!(^W}G`88S(q1i$BX_8L7suNc2|D}bxy1BQGpxJMP+*J9@yW8lHgmcwtX~j*aen2|xonA>>vd+@-SG+QF z6s0Xky0mMTQ5uQw(o|I$8LKb!4p+hO+)5^+1|D1D;pH_J$xdawiD1jXIk~aA80_|$ z!xD$4`i((pmPcSnn!b|~z|O~=Gi|Eo3!+9($XpdJS>OlVDJVYI1gBJoaN&+!0z~4U zP96VJXP)>#)Dm*r%{A+W8l7Kz)E?q_ScwUv1!C;?nXUJqx_r4QWwp8DLx4jyD)XfU ztLmNB1oaX8qMtu2UR*nT{p;q=shA)hIDTB+W2d5$Qg2GIKFcr9c(K_7lw{+DBD|(_ zU(+<|azO+c*V```ro~Zc1VXu=%N{zvNA|ZJ%6s^j2U{Tcb2{458Zw6no@tK zebH?#d!w1zEwI@9wqumv=H?z} zDst($CAT*xO}NlcQ=alW$9(Zt`2Ea}ZD zvzF_x^w(_HuH9^qQU%fpOf1`qvy42!DxpjGv!tV$iEooo0!-%M=4W2L3t9| z91oR+;UB07c!<5m>a5VRU&gqsgPy+r`{Lq5K-BAPEJ&}n9h)6!>V4qKOiRt;`?)&I zq`@a0c?a53>5Fenc6d5Xe7#VMoQcwX`=;DVZ_jT4rca=)md!#>+zR~S=jWZnfI29I z1Yk2M8Ku@JZr@>ME7x$KIcC~+aKqb3yZVXL$iX^Y?5DxaL0LMi{#P7=+zGfByM&}O zL&vGFAK)+mLuU!4TT4`8v*h*eOF)uRa+I#5l)Zujwrj^0(fl@bCcSZPyrIa?^XiJ}mwn-BV`1)Ve6As_Y zhzP2H-C{-`@6~YT49>X}75L6qoT0x-pTU6jM(-b%yjLGz>ocNv_kA zsyEc0Vi+RE9fTG4VfDfZg!4e>0qQX5m%*AfG9VSEQ~FS`bmj;tecn(+M~2n{ft=SV z%@R%)0mI>YWOvxV{ET%JRal&3-eThFT9QBL{oJlqu)D^jGnuQ)|!X)lP5mJ0NUM zo6zjq^Y_2n*V@_JS0Y$4Q#u41N*Xa;F=!Ms7%2$9?v3wXO~>#wjuN9&#J<6Pe`pGU z46kdYD=s!8JGx;saXt58Q`Ybf5@y}#BBGY5Y|?zokz+Z=HbL)!<@>yGc4I6Gh6yG~ zotV(K0h~*Jae|s!*P+=Y;G+P538xV3&f4b_xQ2`v(MAvgW*&;6-s%exK1I*J(nNHu zv=a#2yOP&d%}4-T9zLLeQO*9nUrz}-+L|n2VBzu8!8hd{PJ;Wu4^o1?nO33Sw_M?P z;@egTgTLnySwhLkp(G|8{P>m;w_veQU&aHxi1EDzAP58d``g|-Clz6zA%q3Tf~0SC z1gPLJ-DGOOlcR(Rn~@K)D{xt!lE<}*`Y^K(jhRoy7-HOq4PSmZ{0-Cws3a59Nzra$bgw8a1lA49?V4#1|rx@F-KB2K&S4Uq1Ou zQ@_7Sw@NC8TzCGy( z8A@?;5574RCIrp`4rhQWLIISF45EjHXREN6qB-i^_vb0fLCSs;m?k+}1_}Qpj!p+A zP|vUIs;~vb@hE8C+Qi|6<2sCW+ zXUiABPbW|^7cxf58MqdnJrF`KG;YuKnZC3uSI`YLZY`=Imu%o|y-I`iV6hC~E?vLK z;K*1|!S39#t0)7u`TXws=BR(U00prs0>muzUQk9EBlNh_Vh4eRkB!puR58l92gQPW zT}0M%E9DB@=6Q7;n9%%y<3QbhfWxxUA@%j^KEM@|ps;$GI4%*SM;8M>Sj;;Hcm7iY zwEC~)!p5ct*YnVtAdi^~2sotb;PBpxA6NKm3Sg93*l^nugkvN`bK*54UkM=%(ukZI zV%Bf0g0odWSr3{Xs6UoZzQ&wrTfbI~xoN56g@$Bz%Gi%@GgPxJL2Wu-xLw)^N@R1wrnDoLxnD}Hv)^hF$MiS?zZXe1x@Ow&8eo(D% zSP9@{!6u`h-y--AL%ZOe#A@NaJCq4VdZC9@gS7M7G8=D4){vGHyiSoWqF`QVp$K8;)4cZV8L zyEyIAaR{x8uYD~z+^H|jkv^ZT`W3larZ=TI_LD$kI)PI8$+YF<7lyBaXL=jD-!V<; zAplMd7segPGScUaq`t~`r7H3 z|9YGxkqyxJ1zq&!~#*mHCVZ;2}EOwHv0P<$aLp?y^fUKx;u z`gJrd<_R98xUYf6$<)Pp2Ir-3||NOqor(1wn9lXhQ6v^O* z4d9BudnNa-fjXgc18l$@mJ{(m+sf>%qv12RQlTl-)VsfJPQj}mH>n?vU?**+6bo#0 zoDgfjTz0LTyIP=Lqy}ZV>GY9&afS6yd!6?1xKZ(DZo45|#Iu&gNR8UjW@0btlT~y9 zAA;?S8|;_snxHNd&e+`;#OKVq!Q~Z;DU{vJ0k+-#SI5~YStPG-3sqSwdyr&1ObGks z^Frt~hBd@6aeo$Su6GhF_b83<(~F)#K|vqQ1$rtJIu}e>aJ7u2*s#9{IbHDflYrqz z=rj)gulpz9-J_rh9hfn?6l0IHb2|f4`{Xo5W~pPVN6=Mr6p#_y>t?$?eE3jsrDOaq z1Q7t%ZP_Bfc?&#?ZZuAITfKP5(RF%bm@qI$)IOO$5~fjZc1hqC#v19B&)?E&2ty0E z65Z>Ix-)tBG&UI)LKMl_J|vjBK>%CIicxjc5sNPtG4!f&JM%la?sEM*Rl2^1W}r94 zq}#76nNhi53^g;|yOKKFty;AzXQv!mOr$m^WBjh{;Sgn)z7k3A&oPB@o5#Dc zs{r8kZ%JCVXi+!8#11)59NTOs53UEFU=(BB))J6}ar8p6nPxR@ld-a1^Rik=UVd3h zlxlbKRBze@nNL$DPwoSet{Vu)&y$xH`)V)&Rx`cOz=OMrX?9q!H(<#T9_1I?i#gaq zdfkqQ@Mz4NipQL7ktjCB6nWq)f|l##nBspd4Irv7?Hrafc?^y)r)Q+|HILIp+3$D` zlI^hVs}#IVx<$wD8`msDWtiVK^+?W4kIKr*y(wzHVY&y&C+itB>EIf zB(Rtt0jY(}NP6|ECtZ(QazuD|0(W*txzg-l>gzb!>r=u<3AU-Sm07U~B2rD-!= zd*C$Oa{2P*2p{BfO%N;`6SWu1I@-GZGU1VnJH8-UIQ235yO7$?CLY?%om*5pfpZt{ za7}g{#FHGzr2SOjUO**Lg&9>u?Qz`Jy>H*qk*_l|dolf+4Fah+&4C(JBtAOXm8?&K zxF_84y&EHgwE{w^UtE$RZr_f>|MdFy-TKE}U6b)#P;wZzXVM)I$-3PEzmJ@ z1`hM9Pp9VOq3kt3`!W+qP|zm%Fy?xocL(TdH%$JjVpH`Gq@;K_q%9g>>HV*w!WEP1 zFT=xc(N%q`+Ugh-$*+JDbO0nBV~LR8pwW{;iuLFEf9zo>eL()98U+K zDb$*<`hVe!!R>GmA-ac^7AQ6MHCvUAvF&Z zGc@PT8zT_5O;CcmTtBmgUVP1z)$0@Aypg8QozDTc+TBG~(8AZ;X-BwJH8V4dNG7-U z6OKD4n@$)2TqmVsq^>2pEf^qHUUC~jLCsfhy}8ul!4BYgMy$UcW?j0D4`eG?DmN*% zg<6)=eon70INl$4FlV5rm)8lNt8i42I5BeDe8;VlgeZV7mnwXyrO9v^pLO)7!=XT( z7f@+6iDrq-Or7A?Oj|bMQn!|Tg;jQWpc_;o9Vi>L?JN+m$X?+>x)nqDyu(*dWfmu^&}rFamjI*QxodkmY2D41&Hf zF?Itzt&@|)MSE_RyI|*WTFz;%0vHl1sD-~H@sTIp>>O-u{*fXytozrDnEZ9 zv(tIBIK7wndWnm|lap3)h+goA2FZM*a|HTN@|W+cN`{mBDObwA_kX*$@052>YhEEp?0M+;w9$wB+JdlbE&oS>3ePHQoDzFs-VZ z97#2n02nHfz!`^f^xQ%$f0+a*@jV}32l~)8L5nW;(;7yrG6MpjT>agxeD*>5y#?_Q zqHDZusv~enGGYh*#65>!dr$P6vTVmYzQ{U@=dP`Ozqu;KzZ1*^K*zyU{jDWA_vky0 zL$@hqn#D19)v9he7?rJ0#pcheEi3|&M7h~F11v2Ptpa7~b%yBc0R3$pP^Wc=ZIe-_ zIBWFOsXAg(SX7Va{89#)pQrEkz!++LkaxE3I~wipGZV)$v1ED1d_i1tDPF~tuY13K zo<+)1V|9Eg?eh^+RPt5&r=MRXrYu=Xk>~>Lm(M8?)Nc?IznbdoSFcuaUG0~boDs-+ zgVII}9&%2GX!t+oPYQ9BWH9*RV3FZRn=mO=d|JeLtJ|_-iJe_E-eZ@N>egY7@tB5bJO3>4>^2vQxBA(!x*An^ROxjuA}#aoS3WG52gT|!#ryXO;a$JxgfE0# zzUZYIvC2#u2!1t1bu5EZmEFx51C$d{7oA=!ErO6 zxnRrg@1IvPqgUJg5MnFTe?jv5GsoN!Y5X7iy_}JEG5bxo6PY ziKE>YL8C&y&L>3jfy3D z2MEd;sPd|7MS>?!7=y#5nw)Z{8lDz%8U4^o(8}MSSAP1ZvjUa@=5aIQl8Efw;>X6` zaga9nU*BZZf19E^SS|xTfyM5oUjPof|5tq*2`^?pBtL=V_-|p9%kt8A+nwsmmmd~{ z-0=op^>^u--#3Tu@m{x5U%#J|_Z98hsLTZBF~STRR)#e;S)H`LZ8sLwij(`%yF{@{iOX|CDN^Q!|Vxz`0kW6WJ! zwYu4s5UI+#C3VYfD7?SuTNJzZhk{w&@7?jRL-p7uR| z74Uni%Y%r_8P;$~J4@qaQ?lX8RcwF0e2IVk+T&H8aaB!CB4d|te37B=Vqn>dITf9M zrq`1DR68BE9QrkT-n>@u_-^03C$)Z-6|#{5B|)L%#*G6OXiq%@6X_8}vc$;3;sjCk z8VyhBk*B$IL6tzd`9<_|s!N6iGd+5Qg%GYd9~6V>p%_Js`c`xX6i|47z;&o^-e76j z8AK%B+s{}iOK@j98W=b>&4h;b1V_q$i2HpEz`pTh<6gYz4rfv$`Oo{lKHsfwc{!R# z@$w7Uma8W;*8H)LGY`+b5=T6s#vEci@x8Q(wDOMOM8X8yE_?%cN%3#q=sY%+O@>po zZvFbihL(3gWTBo3BEac0M@0#N5vJ;v{y#$g!Xi{r-KLyxC(3BRXsO70hE?s5+sR%P zo(q<54ljhVz5L1~m<;vU z#^H*lTyNUnb|Xjn4Rt(3dpUsmgYQ(qPy+?n-A&bCMI8xD-7RNXDMNroK%(q|33_|R z_+65uDfy~B#pvV^v%4I`6cuG319)q6f;|;ntY3 z1?YiXMk79YyF|*wFb3z~uHd`Yzn)kSTj)XW$!Hu^_tg+eJwAp~#p;)T-?L-Nxw+$(FNnPuR%t98ANKtDk~!(A=>y0vCThMKrB$=a zV0L(wZr`!P7!S2X4+!a@)cX_l_1}eTX!zpi{e~Lo__*9`4%nxSp2(ipR0Mz-M|)qx z2E!~>OYf|jY%Uzf2K0B*5@AKoQA&ms71wY#$k#U!PYhrAui;RvbSZXhvR(r}dYm~^ zof8RnFo^+hx@5w^x$)G;HHo=WC@F1Ehq15NAmi7!)0Z!&(K04{>E8v5oNvmbmr*u$ z{~8YQWU0ovRl_-1#d>Q6vcd#H2T-_-IZ0D2be>RXAO7lcnjmkJCQK;&WxWhmOlgk} zz8d~-D94nuUqOxaxOj1mQ7~hg36_>$8*`;)WWoqzi#2onQ9W>6Z z7)}qpp~FFE8(UlT0SAA-tW!N)WF&uIp_%X|ikIr`N9$wN_h5&P9Zh6pWSq^y0ZObU zotie&q47Lx1rF9lB0@F>B-A)psSB^YG zRbyd^Dd*L>Agak0{O>k##9w_3JON{jpQrfkg=~2IZq6rCW+2UgVJh|6=vwwCJiFC> zq@to??2EY6)TLi58t_Dm_Vxp@S!o{eVOvw9&1+70<3*@zI*bgM^~eSwXsFm34oTQw zy&IQCYQ4o;rl6UhdZiGEr)F!xz!sWIkMrlBkf6>qS8y5E0n})m z`>qSd)$RLvxI`;?VM<)5w7XD_4ksojm!xyEbBF>R^2GX#asqu1EiL58=d7oQJP=By zut6u>prc+pFk=*P)X9`_x+liX@;-8^LV+ZR(As#q0LD(k88*(16sc> zuiArxz=Srd#QuMsI(NCGb9!;6gAG( z=|YX_EIq-g&UO`sTvw`RIW~Feu3cMF@H!{w0-fSfkEolSonTO3eOHoAG(JaKba|zW zfM;{)r=HKqRlFN)abq%ld!;ZZP|n_9WE4m3{e&Jw2OOrl*`C&a?D+A^OWkIT88&P` zH{xWS$y+=t{MAQg9^RlJzmTFhhd*0gg88d4G=tV#UV%<7*J^wAB|WCDSOK8o083ch zqJ<~>uj_Dd?$9X^?(svm8@N1v`BEcd=~lyu z%n9Q|DqLNefu=;XpQx-HIeY)|m0h&8vyIK0n62ub&fiKQo5LwOCfier8D~m?a|Gaa z;%iee$i3n3pHfzDwrSI-GWVbkJ^S^0Mz*+c`SQS4`CGH5+f5{)ZtAf8=g*%OAQM-;_g__%lp=TB>uuPB5&QK8 zm`QShrPj_0g?X*me0S)_9|g@#Bg?WA+XBsbnZJ7Z(im;n*lE)q#O--aVVe?D%&F

XDReRMQy?Q;~ zWo5O#VIC4|aYNLGnn{NLDKl>-az(4Or+=^|Wlv~+^e|6U+uu}I0V(Df&el9kne!UD zQ+~y^@Qv3O? zUAz8?O;YLKtZ%TwLLC8@QLxNFiC554$oL zxlNfkNy7a$E9Yb-?rpZyKF}(zwxYl=P`7?BLu=mW`{3Z-n^g>gDtC%bEOSRevlTq7 z8zCX-U-~yeze#jkYBAU0`nUHWoGXrQ%CkY1@G2|olU@Oo$~RPux@6(%=AhvgR$iW- z<nTH*BXf3@vY()xJxYV!gxr_O&>E;>2_BVIxKy;&e=CjxGEA`8MpfMLJo2$SN+N z52{E`d+{Q4e)NcW^X7?z79JY94n*(Fv@U)V9E zH)?M?7=zJF@3`0A(GC`AA01v1I|tH0*VFwkgSFmz*qypTK}97tB)A8$dsT5+*_fyW z2fNPNvYWZIV${x(WuY74%1^5(*}_?0|89{G5KgxH@vY^U&Qr`XKc7i&$3sV(|EOWc zZ@aRJ_0&<%w`LaY5JtOW@d-Rr&-_$}U|hY`?|(rGKn35j0^77{W9E3t*4ld8tiyyC zE%Omp%Jx6+6sAvZ+xD>W+SXb}yuA8r0a>Nhp!als7j1I}ccs%UjL5?lpiH7-u+w_l z@I$~InXr_yEBcoU z0EVbHR4Wf7oQ+)P=Z_v;o!_+R$e-d(`PzT6>?Q?IYbEOzMpS8Gc}-_S>!gI8&bS|s zMBn2p@B4=697?BMJ!|9Jw{OGp+{#V(@1OL&PoG}7&t2^!8oMuNf?gim0kq=6)+V(9 z-sgOL1{2G=9_CO?cWjEzli8EvCN*WnFin4Ucym`Y^Hd4F3A)BgfUbfm_vmBE1Cw)hP|N5vN z3MLi(M*j%Z`dMJ9pn_^g%b_S}?iC}Xx|+5ZAI`;(G#iKiS@7kzrp)xiVtds{Q zLZ*R`O;S`eg^IL}y6WG4>Z9kpe;ep-FHARXoMdipPJXf4waYZheVEA!N^JEN_MH7) zAM@^C?IPkPDKa|!0*x@J{CRH6X;;_f`wsPz7ngUsZEYZD=Nr1k*Bt(|yYwj@Z@xy0 z^Gfz7uC6EqbDTFY8x@AYtB}+?uxBg(}-#VgI#j*UB%Nc05DwV0&}C zWCC{`Pr)IZFVi6J*izfL4d;+saas>FAhL>s!3o&Vx+*JJ-}7r;WOaCYDwyw?I&+%K z(l7)6I%@9df!h3#-9*mi#X!oln;M+ys5-W5H_Brg(Rc0jub))5eC~dn!V!_HSNeNm zscO209@gu_KZgfF+X>rp?AM?2cnUx?AhbupgbkZEJz;o#UEcSJ7$SbIL>+J~Q}!b= z#S?`x0xB?a*I`UtORD6;h@HgN&A%kkhN}&NRlFMBFkL%OX=DEO&S-TtHMjp_*zo_4 zVRL;o+P^jKY8`8wz?9ur{!=)C(8e;nu5u+ev5%D0NUPC_a^uFi+_lX0s8fDLim9n~ z=0c6Ova+(t@*_NhVPBWO;>5EHgG90;*q7o@Hlp5D!6CJ!_jKkJvR29mVN<@3Hr9dH znHd)3#baPHX3W&o`{7omyv6_fU)uljACCF?D_|a_l*5^eF)_0`cI|p@S`U*Gp-_0L z9ptmALsb_pl(OC6u9k>fYdTAjnieORA>w(%7mv9=poU)BI$MuIF(;^7O(@_%rJ2_2 ztgQ9?U2+q&DUSB7?txe0n$NG}N*R;+glxEX=T5JhSsVzPnNx@dBh5~J7{05lfJypo zGTtKn1*hSZcBGL58^oz}s$>!E(%2tE_ zB$@fWC?9(7YSBuP8@B#9w?IoxtwX??ySEBuvO=9*ynOxq!s*+;%`z0>l@gVHMpeKR z4z8jJYcs>EC79@ zWq9KFaT6$mMxA98e+)m2ig-FpjHLQCOPiFF^P{yjCn_qQ-Sw z7P>RnP#Qk~;NbXdDHBo$gB z1z(N<|Vm9D93jQiFDoj6-2XEule@~qf3plwfHxvDtn$mnU) zE(&yD=Qtjb5#^*ta>-Y^oIu)mXTu`N8`>*hdA}7Px5awuGb*hQ#DaD(IzRmJn$}+lkrr^5ye*1;z86|UMucmR>d&FE zQFip)sT>obas!Y9E?4WB=`}SqIf4mEn%3F9dvZx9ep5MN-vanY82$$Ws(RaR)x}EM z?`um0V^8s9w#hF3@+Bqm@`tOMau?8}hCCp-oKr!BW6TLjGyD=L@FWIIJ+x{Kz>~|^ z2YNc+Gr}ULDr@y%(2et0EqmgrxzXE1btV9q4wF=cOYJK!P2KLi=PO8eSkBW%bBg-b zjwiK&L}uFkSW&7mwd}>UwiOqjvF-|;oNQ_{BAC~#*)ymg(7(S9T{KGx7e_yE7^LDFb5kKDu26=B zc>+v)4jJ>Y>4%iGv<28Pg3GmL}C9IY1qury|Z`_CmzWvDMmp{%-X3irdINetr z9iyz=R}9TLSIVxdNA+U)2gA8g5LFn&ruqE};Vd&MFp)qo!Mzy0tm_z_>oocda(-AtqD?k>w zfldb5GTOAM9XAQSau?_YiOdfKz&&48RWK!B42VqvyJF}ogq1YKrLgZ(wx1$Iq)fO@ zojMg4;6a4OFym6Tj+M!Yb%X#R^eqV$9xm|5B@((gA%jPp(n12qJsASi3fP`2tE<@2 za2UDadw@8@hXU3VvkPKSTgHvEu~UHi&|OOEFu7AWp;0f@-^$y9d}KMZK=HWRSjA`x2Nua}D7EiN2>}&SYQ8-nramIk z|C2fiB^i1*9j_H;VZzc`TA?M+;4Daus;>ieCki^(9lSH{Pk`{2bCoU^u9jg|SexZ;7So%r8OS$wPRj_kUI|=;lpwhI%IfaH}4~(he0@RHS1knEt({M&&{_k(>;0 zL@Xp+qr7Yj5ZmckcbkC)FBTbdbq_t+5r>8oCwzB*l+soz_HqQSJC=I5f_c=)fusPD#lSe zCgQ>U%*KM>r^{G2({Fw^ykhf9mTf7}o+W6b&fX)byw}4Y(m3}>7g9!(R=!;q%Jmd2 z`LvXjb%e(z)7-kN133iisnf>-lwR=kENQkS6Tab24EO)CGb}vZCZzCZCEHJz=!RTO zmo|YawN9eLY%m9O()Z-N-|^tdo`e4(w_d*2uiqvRwtwLCduhYu=XT|^XiL!7uDC=K z!dY5bs&Pz}P`7jU?moL>*q100_F2$rj55-rVuS_vPvb@U{`TK0P;1PyFE@w*k4y>45F)%Jl>6{(a~W!Y-kxl9?kUq z#`^40`BvJLM~R7vi`^Q4Nu3>*2#O*_e6j!(DVM67AM)YC%%?qj{@fI1oU^wdZ`Pw` zqdN%(?AIu+A*qZ)UTwh9KOlQW7t0n){zUQj!^e#2NFB_mykzEKJ~o|+;5=12AEmmw zLd7aLnLajz>cf;K$Ihz7@HGUjoY-4+Su8OT{(49JAG=?;(4Hw)e!6|6WvgGzo8Z1x zzikO;*%u=GAsLO{-hyq%k&#kdh!6ph(P+=FlT>~{l{dl}3pnBOL=>E{J7ovJw($F+ zE)WD_wm3}o3%b@(@U&>~u0ZG(1_*)z2e3GslX>sTfT(G8kL|t$Np_SUe zP`VK@=wrkEC&e`4Hv`X%%*@Av7K2A2wT_VdaF&D|@?wtwHZ-*4IesH^!r&M@WJn7L ztr@Rg?FWiNzvoQjeFd=_!>=*7dq=VU0l(EJ^|OH3IzU2Kcs5FlHf28j&8ahI5^Tze zv}~Z>p>(}RHpLV>-GBF_56vmaEpbd?cB7bjT3af4}^H9xmUW4 zJpV-6L>Q)Uf{$|H-t$R>zfNZ8-{$6j|JBmhpD?r%y1}nsQ*BQYn}#3|q>~ytqGtgO z+=RW~H}Rn%Rn%1!oU;#_tB~|f*efu1jxIsWdAV@ISgWT`pE@JQ!mY!`#qhRK3o#+x zA=gBweH`}H2cEW9au;0MftXK!Ref?5E=BjeH-ZJ@rQ$e{J1jNYeJW!zC*t=oLfNbP z5YCGT{@#|(h?`YOL(t5-OG_VthTO9GU0j@mr}3E$yo@K;zbhQ~m=kVnNc($6%K}G!msp#;B7? zg)!UdbLWybd*#gvk38n;x{!AJ8}}>Cbo ziNZ03FO@_*uy*mrFM~!`ZpW?hg6D`<0E(AHvI!ueWWi1vcA-+6Hf@@?1Z1Z!5-7<+ z;berHhDW&_bk#O|Vj&LmvH93E#SOL)(?JHo`}p`n6&1fn{q*|V>Mpz4;@>1a{Dguq zw_~&!U4oRgHC3trA-bPAIv#f^vghnIYcBfOuuuWb=?D$E`iqk`c7ZAK+_sU5IFvA) zV_-qHn&Umo9tlgbd30XsvuDr1drX>I>&Sy#DgaAEO)vM5ZRg{d7HQSa;@B$px7ilCH3NA_IE zAdvRpFw@gzMM$EZpdydz)j@C-87;P!hygq`$(Y*{^Y5|6Lmigb)2&+LZgG_2pFLBb z?46^>;@dbj3J}D+l524+;m^5$J$8POP&+be?WMR7#7*clIO)gF-m>O>cM*-J((Amu z{uDstUe~o^gTM(Hr4B;ug*1$U<2JY>gdr)LF822Jz}d464F?fi(wm1kL*EhGEoue~ zhlL_uI67}18@RZx3|5bxRkNez5o8gtiUXh|gNF~FuQg`EpIKnl!_#$!)qlnw-Eu@` z@F|WJr-R>A%fgolh%Dk$9qAKP0XS6Eh8sfum&$CM!msNpCI8YkFc?VP9~V`RpuWL7 zu#`d=Bctex%?|kT;-wile@ZjN(S#Q-R<5Y_j)<6yrIl%RgcibViaFFQn?adbS*pw&ks5Yo?jow!z#m~07_)?pGO*}`2@~SDMZ%bfRFpIM zw0(fI$q&d~HdC6p=0he-SP|j67KS^d2<0iwN;p1ohFHJsM9dP>2)4x@@HDUQXn)Z<82MT{vbH@*oHg6(+UNNQ?oC`My^R?u$@^vxwUehml7xED+&3aSr~A;lVFD{7Z)lS;O8Y0V&(sQIH%VGF4>q(T|i->kM%@5)@!u;3`@w|Y_5Div+10nLp)WtsqK}SQ>I8UBub*n zwQ(6VefL=OrlSIW@&FD&fpw{#I&-A&&d*49)iU$91KtMpC zK}EqW@Eox!HaaN+7arV^>C`<1oF(jxB{0-UF%r52G2ui1|H$6tCZjOiU)o zI;(Zr?aUcW>XIV+zJ;WUqQ1F&@@Lt7hYz=PzyKnxh;MsH(12s)XHg#Y7cRG(PGW`h z9)m2|hG&)%7;W`Ok5s=bBI92w9Ii& zLDxSx*Xd#Pjf%(qG)hC&`FVXZ8^x+pk;5VGxGIde`MN7;&ac!d&Af_rjHIKJU9r}9 zo$APOXCuY?yBY%}V$%fsUrw#Ir{>}CO2o=s*$0rBFvu8kzkVwKUYL1PD<>{l6$_T~ zV=LaFAd73*5C;k#$9WU3h7jz9gUN=>9{UyA5Q|tc)evycg`Gq2UxmJo=CQ)eGwVYH z^tk*~M;@M7v0~xrMO7h+qsaOYP`q~S+Y76)!q1T>K=M&WjdVC8Bcn%dqaRdSv8$BWbQ_e- zcyrTn7Z+j3BBWlD3hjM$>|h|_A{I%Ctl!F)&v^ZM0l3a7;aVhojfA6*u6_ElB})Vm zp0cjT&~^Q?!wEE*u=mtTH8M+K7A;X%KVGLSqhS2cDmnLmDKDTf(Ph9fgUF0$9-L^& z;ZI;FY@Joa=SJR?Dcepo)$t);>8I887hEC2+hkwAb}a$$L9C}wqB7FOq9yaw6CrIm zPu&}`a~f5ff01K2`b9C$4N3N8q%jtDZE25x=hNGQ1$C*M3ttW)af!C}xfVvey^Zj! zHO>uh&*lMxbXPc2Y6J97iCF@dWP5NFO*cbHwbCDkpDHTG|Cp2~X56t3`lTBGU@Ft1 z;^(=sx>sxM{(o%k)WT@*-o51rV@%0DbS9O1?bAG`xY}4-Pw3paa~mhPaxe@=+|7QJ z#beNALDoMi%L(^#R-+BS!*8wS=qpGB%oo;Vd-87^)cwCUXmlobNQ{)2XI0A-0Fnv6 z3!3erBUian$O%vc5?C+Abm6lF1M{>-%5rP#sZf1Rxw|KtH-fx`GN;`{_V8NLe^7{7 z{9)v!LM%^q*fFt5aCDjJpi$g5kl_5=)|3jtY?0OsA%&qH%&%A<*HH46d+u}Pil8Gh zfuR~qG#8@)@v|v$j(XiPje; z*m0g9YMxrs-;woJB^6ypj2I#K(2EweLs!^E@;N7bB!>Wc-}RH{!y=HnpXjgbR(+pX zjhw3oeU{lGUk4~aq6nm)p6W75K_Q-2I|H7Vl5Eezz-?ZaF11cw2eT7chf3(^*;_vj zVv5JQJ%H@$H^Rq|+Qv+OTsl5?yppGe_Tkt!h@Fj?ZFh7ku+0NY#iq+rxK&7e{QZTJ z^bzE$yl*Wz@*Tkaghor)a~+p*tBGhu4Bz4C*q@F(k>ax9q?h+FVc zgr@mB(X|W^z8CLmH_&0J3jE0>Xyvsw00J#Qn@+ECx1dH5XkhE~SLod^Hl2N7{y*Jb zH)aEJ!U?^`WieYcq6>qjPPin#lBQsT4%veh0C7}S5((EeN#u!!z5&Z9d_TiLYO3{7 zUC(q8x|C10dJ zZsT6b%sW2tip(0i^u&*}nf>V$$!#TUV3HA@5~S;D&jevfheN=&%TZLVOp01aW~-}r z6e|iS*&lZtFLr{k$KkyIFN$?z?35`nMN2z^_it!(wS+4F7ng{8b+`~Rm zekXpmZ0&K=@0ryWH0*Y0=p5?ukV+vq!}YzCl9hcyS?Qc9;rW-9Dpr zD@C_NmI*ui2yI61A05Qv)1v7sjku8NL`Toa zuk#HGasl-cT5jX{QmIt!LQN1Kko@f7l{B1=7{fkEOGEe5mI1E3)$l(gs3#jYEgsh#qSz7vgL$~6;IgsXj*y~!ytMBMmm3cg7Lu5^kyY2e_W?NH*#__P-910 zhEG{DBoby*3wVU(7lr3R63YuI9i-_Co*X^49Ai`=#ZhWzsNYX8HO!jmAHdemEAJdp zp-c<291d|MtHobX$qZ)ZfCzl|+6CtnDQ+MjbqgturK^df@dvu#(w(FLzXsdc%M(e# zT9X*SeWaI8`qm=_q@b7y~BAStvCG4}_fBZQ7zjq*&@o$0OO%eyKS1iYx zVN-P=`v;6qF*153i=?Hc2hW^&Nk-BdC6U;KZNv6E zf-yK-Sd+pdjv%V`lYDS~DrgwZm~c=%lA`7Tgk_9Vmshg;$8_Z+X#uW~!FCLc;-m>p zO=thde1?6*qXdM*88d(b1n-=Eyo*wvube3?0TO|`CARZlm;9-m>OqTaw^J4A=}t;w@~zeqcj zA47e6oKy3C#M>9MHn9XxG-PZ`|F0=Efz(?X>f0N8d=2lT5AMQ=?l z9pz7v>LMF9x~1^0z@v8L&3{!2T$tl0PaeYX9&Vmt{!X!Lhhdp-ajYvF8HK&t)%3No z4)$hEJ&mYJgshe;Lt->$Ho@6j&7erYL;{4q*i6^hkzyazZzUp%XVeZt#AjeaKV@jF zQUVn9G@yPf*F|_E%Jevj*J2CuK^%yG>vWdc756A;+(U(9kh@nX4hVHum73{yI*Ez~ zkEv5M{e^G{`N2Y_O$YbGbO{LrBvhWSl#$VmGeJ6>RH2+XWZEkai( zgW~`xWng?Y1(<5ml}k>_@lst}g+Jb-Hf>Y7KBb1AvkM^?Qg zY70+d0}}$qahARx@w#a(#)uR^Ju+wb`1-cS_D)FE9-BU*Dm9{wShQpbr6^Lp--06z zcRP+VZKKw+Jn$N`3w5@)1+Fn*+F9-D0(_PP*rV$>C?z#jmG{(IsrteF`$lA+t08*2 zZW!;IV3J)J9_j+}BUH18G)wQ%hvD6Ny!t+K8xv;R-hnSiNKt(qqN)XM|0n$}(rIwL zH3u|b+5n3RQGt!^HU(`H*JH;XQ6$sG|F3bJ9mP2ahUpTdycD1ZPeNqFa(};1@=J6v zR8q8tg)`bI1;xwc=kyBoS04sH+ZBPiv}G3lTLOmo}S$)cJ6 zaCfL4RkiRy-?TYp=Kvx1^C3^dfqA+CgGYgnZG51J}{8I4loiIt` zelpqHj+MSBaOpY|0KdSQ+cLzy9~D(Z5W`3P{YKAbxE=2yR`bKZrHRoHXYfgI{dlq` zhm9YDBBIJO@6%^S4{Tqbi4s#R5BGw`9O3xv&(wBqhmq;AjsNO8&UttU8-9XNKd)rD zUL684^qD{9Eap2c>E64|Naw4oE*dsoJf6FcI(=*Uuovha$VPsL93m~6?xQ}v`+*R_ zQWo0!qvx0OhlwPOabrkvUkUD0`bVQP&Utzsr!B2E2&&pIa5nx}iY;EXxH?=wFEy8u4eUiEAJz)e% zgB`ZDls;@Ao3&ES13@AgbBxGMI{o3}`}Zxlu?8m8N-l#Oe$4qezw{pGOJH}^Wg>`D zw4VEF_8eK5I7j@A6qe&Qt$$8kVa)J8%yG~UH%85rd|d%3<*THD7D+kl1b$c{h>1AP zP3LtTrk!kb#1vudh$ZKpV2j(;Gz>B6L}{hUV&aPaoR$vE2(M?1#BY@K>2lK4+fN7fFOk#*9@Ja%q3snUN07}!s zFV=6l5u`~-Y@7!{kfq|+sG^8J_J?B()nh&J8^<`yX!D&rcDOwlu4~PHKX{M+g(XkV zbs@Cu{_;}RUwzzmZeb!py`&o1L8|bmuxcFIy-H@Xf&w$LbsFaecjOzchg=+;X2Km* z`&g34yR^ogh%%ihqOK_%adqLcR(ct$$@P8PI zSidtw90iY0ED>%n%?FtaC&Ayw&S7Z!l#OZq=XiUIFF>j*S$%vO5dH+(g*kUOo10JK zY=}oey{lkpY1zi<7oK9WRrYRwB3jjdx|*s>6ktXe5ENUr5DOg2Y3%qaI`BDQ<@Va8 z&{onB=idjtR$iKEtCf)$M0uvBKlci&E_C>k|ET2iYTX~4O`is*+b3CG04_bIV#l!# zowoBJZPWobH06Bd4^u*fGWRH%GFMke=QahE5D~G0>RG^Kf5Ia&EaS@l!jd#cR~8;E);BvE4n6^fM%65PW3>F>!GmL894%WJfhLLK(O>krcaq6-w7} zHzNSh#JQ)#5i&L20#pMJ{)?3|L2qLq=tzBtAOBVovOy8_Ex#t!OL^6Yr`O#n8nD*6 z;5ZA8Qx1_+7a`s&N}R^V`X7MGXUEDcR__3ZmWj;cGQDibi6o-sr9F;)^mc4||7-t# zD)mqXU5oUcEszg?bFc^EfdSu>KLa3?7L`v8kJRf5;XVid1nF-M>z@H+gpoBWgTr~x zW7!y48ukyPrGb7A9La6)_+AZ79niC90x0^huillyqXCeI)H2K_}s65TW>|UBT zPuUd?`e<-}vA#-a_!t8cC7XJ{8ut0v;71|G=BG6lkHMD=6bCL+-u>>Rm!1lzr&39@ zWkCT|PREOWL`G`iLp0EfQXVHr&x_pg$vS(Jv9Yu8$-v!5z(eeh6I*?O37m^JGp~d> zy^^eV+O2XYZx&df3%ONnyAuJJ)ZbFVez{|i2%OTJt*(WHxDwq2)MUI+zB{#{Fw&*z zYAJzyen5241W{pva;VDyxu?H4FMsVG5An~aoepI@eg%g{{MW6w4a}to5q>owtTdy+ zh%>K}-mPm&dzXYl`bmI@{cs0ipP3h}3b7+naIa~=mmx|PS~F?c$Cpt|H+IzL%_Je&U)r#OR; zxohb>p@cC`8TUOlKvPb@W}WaMszs$1|K+B5#MO5?Zn$-n_U%>{9wyW33m?7*lk*{1& zb>s*LDjoo83yI(@(n_urN|)TRYwjG;Wz>7KXt% zS=u>8?FOaIH|8!*BqfjY#R89@?(ZdrHA(DZ5|+z7l-;*+n&I(1;@hyE;UqJZ4@?I^ zVzjwWte-gdqd1mey3MSqAI4zxMjZwWxYX##1&revZYRqkZ)}eTK>}5*N?&#Wt>(e| z(3Jt`93txbl=JUmlEtvJuZ#?&hZP>FjvUw|id!4kDT;~*I3uXm#u|(|ExfbwodvVo zN5?_^)EO#;zscWHWB%NK+ute|7Cz0VPub4?LRBfxspP9Ck z&@)i*Y*6YvJ~>*4GK|TygoYJ7A!to+3|U5XPgRs`$ zoxO!96A%FBKhSwu#<4fMsy=;HO2w-_U(z6WVHoBHFoCk4EKq0 z?so+(#KE!~+!IkTBWC{g^M%;T*sVto4WI5mY^Cs67F+63yA{oNjbW4E#&;jHKtNdn zN35;}*d{5lyyUF@B*7zs=W-Zekfo-=jatM6itVod#bXn_L* zZ*hjjLlvilDbMfa!@xZ^HE%87ven2)*jvRzVGv+14a@w7n5GYj9feH+fKhZ30RR^1 zY>&=61b)O85r9)07xpr8*|3@%JAc`TP9~iM-b_;$C!HXie@UM1N76O_M1^*3UzX4K zOK2P2g@t8CBzjZH)B&hYEXV^I$x`}gEndBN@!k#;L1a+Qv9G-9DHPe02@7*dt`L?5 zg`T1y4&Vyz+FFMsrp}=-aBia^*%>VA3rq>-l)81O;nQ<-M|`eq701IFZ8ci8PyhbU zA*#2|wm{v3*nO<-03Nvs>^u_)kAG%j!c*aU1a(1)zF$Cqxq|kHha84bh*h7w_y5s< z-(J222lKkD>TE!(5915_?P0zkHc{+wkmoUl^C=e(h!tF`GH6R7*_PaI9lFg-*(Yi2 z>9mQJO1nIBZRroyDj}!3GOumE6)?+1mUu7LU(kXIXq;h;*XB)|CP)O|af!cX7{b@e z;8)-t5e2FD#ce8i%ai_*STTp2zY&3(1;AH1^M$b^M=l(fvkFxfuh3fM5b`2OoHV@g$wXZ4dtVqYUfPt_``y0Vq$Um)_x#f(02e{dDMYh*@T6kT|_+hnw< z6Z>;EJo8>=z|N+f%0cB^j= ztA(^6t$Neu&F`T_xdpw2`YC+0#ms_1aU6^pfvihCcvK4d#<+S`ew`A66ssf~!?KYie@ z^h#FR{PLeaRE5>^Zn>4wO-J8L$a?wm5xG%y+3*;SirAJXAQB~mKc*{TZ;Pi+n$%OU z(#b?{6%PtuxsOjyV|LNXW328Y^JSC*{AJIoqWVhV4)TZ#tnAugJ-w1H6uZ4nG$FV> z^(7@&-Mg>t$8}&d-;aa(L8&RhWD_Xnj)~g^9KZpHPAV-cOJI^GXyD536PSmJ)gaq3 zUu#4d1(Qt`RK@qC>fiL-^S=_h-!7a9h)spO3a=#bMKKdED38F6;<9sz^vu0?+AY2= zW_rZgBA$43$pi%j1|qS67YA41%!?YeaYHtUgs|@rjCr;&#o5Gw6JDdQGfwVhL2i)7 zTC#A2mV~_QTz;=MEj1PAi|K%Log{**$$cUwI&=GWUf#-Y$I7(#^kVIY_6>c|DLf+T z#Y@j4w+g4}@dm>U*vUpIX7kRFA#w)h12Nmx&tjx1Xz8T2Hj>Y!rN-P0oYfjP-kU}@ zQY%%G`SPVR6qL`pvD(CtB&z7De%8ltfn$JR&u33x=Gi57Fad=1F3bdIzAzIOr#c?g ziLtY}lIz*$AiXE-!Ld7rZb#bDl9L)oDzHfxK80cj*<;N|xR-Vk>(7w`qdM4zixsZP z!Uq1wr*nqZss1ZQ-3DvW&C=}!tAk~m2~ht8VNp1tZe3}pNk{~u*L6rRq_JK}hihE$ zU^NaZfS`f{tYpCG4imFO_{ZLlpC86tIL$S+Eyr41JSrF}$LFB-6X05lY6XfJ5jFAU zD78Ot{dAYVwh*Vb8gM_s>na_~-|f-twWm(yThw=hfBHEeGfFt}aH!k@&9QG*ScGP8 zIw8Ber;=R6@ZByl>I0QLHl5W8ZEc%qBwHJ-={xFDWUNYKq@niPv~v0I!Un4}uM*|t zU(fTRrcV!lzq7>Q^Z&K?<_|fh;otwQu}zG%>?uZ6wn?J2q7bcQitFHe{6<&JIR0nt)y8iD$U->Fg(eYc z9<|EVk$wuVgh&=IXY~*KqHZpw_cmdmlq+wfrTG${n30fXFIv1`d)=$nF7NV!Xs0ka zVtEfXf+-BB0pq(Y16-1BF9uzog1dQO6@MQ|JmT@fWt0hwYLox;qieosHBiq|_l0SF z`u3eh3^Bue^wYe&`=k)19PvQEMs~H~LeCFD!4a7YDbtH&wQlatUh134>5RzP6a7u5 zPL+x@P5y}DjB`P=N6 zba`K>xCQ`*!Ap;^d8bo7O}TZ;FV6y;$qa~dvX!4JL8)x}_J=tnYD}9}&|2#QMz2Dr zAdMepnZuS}1wj;=cf%*2=)Lq99NQ)93brEYW}ng62%S}Ukt>yqRN9QdyAf>OC`fU; zDU5U)WvQs~Ks-zW(7;=L`}9F-|7kSwppCz&4lId5t{pT-kB%gOwd732_X~0ctQrk5 z+Xi}0*RDd$1IKZ6cKFj)621&47tQnR)%5BDLDWss^F@$f2TOG?;P9)642nC=wL?_Z zUPtG$N6k0q1Mp_;mn=zFNH#}%d{*t(>N3$X>DnhyR8Jj9A=Wie*WaTfFHhBO3Bl~( zfn&ywEumDQ()bQ`T-Wf0G*mG6dhV?qXDP6}=5ti-h5<4i0`3ABQ1_LDekmzjabv_gwt%FHeSzW&t~FI#)ZEN0NVCL3S1~61I~QR1{EL>3=7did9G(nxl}%(HDWI@m;_qS(mQ)L<)~HGNxMJ z1;DNcc}!Pu-&A`4==Mo_9Fgd&Cv-}D(8ah*>jiL;hRVtA9HK0EX0GF=Qen`AEw;n~ z3rsSwr1)w9AdB-q5u~`{)vc3fFQZKs0;|5a9r^EP9w*1@WVXEw`T&!X1JUr zvgju-ubk*}fzn+YciXItj92V{=Y*iIfBiwnQK`Oqu=duCzu=m(t2XKhMEUvEw#KfPMUZiy}ks_lQy_b** zlo4GY{IDm$QE+`-*RHVJ=2ys73wSF%Q5>j>_cQ6z_=`UZ^?iKj&Q8W*Eliv!BNos{ z=5HB8@j_)fl*~l-P+;S(k>__ADz@Kzjew?`ZP7#eAuv$5b`BbN zi)yAL$%2LkOR%8Y?QLrM3pCuG)9@2Ha29WQH!V%&bU%Tc zu!6Jub2`8D>)(IG3PpN8`nbre9S>hX8Tb~V#q@OA?a$W}=VX7a{`4uUMz4N;#r8|c zzy1TdFYo!B=7uS2#)WRHVh5&wdWZu^Q%GJw!SzZ}`C*8Q&s{9-mLii;0x?ZJ`|GP> z7+=3>)PT$y6-QaB?6oWYh#_5a;Y{Z?6dp#xFLR`WdQg*bd9=LhkWzaO1mhX&rPmpo zNSLpprVsNh4vJ*Ewr#7)MzaKQoQA`-3}JI@By_mzYJf@zbb-aiYji#7jg-E9qq0OO zlNFf{uvm0;qv9HtAyCKTC;{|AZKq?^7aRefKf`o!+}cL0oMe_;M5PV z>s*JIF_+zA5z=*r>nqTVm@vj6xqfc*8scT2@Sa9r3jTRz$2K@Lwd>!4iHOGk^sbTg zVLmq70 zg7P0)a`(5(;6oJB zG|*rkq+@?38jk_xp6+wy$>@X3SG^l*zvL#E7Uby}Do6A^i---$I zPtH*XdAg8)WLn_fy*I_^#adfVN*w3#ibY6Wk8@>D*SL-EvVpkP0lu+OrOuUSNJ@nk z6x8VH>KYY`QbMSPJ5(*Fj0!Kx>T0+1uWtNgKDU?35&`}@cfON_=h#3yLOy()5mwT_ zY|dyA8-bhAPPCsA)E#Ws3viAiw^MMT?$#`*`Qya&qp}Q#9AECXV&a@R`$|`SNqq|b z_u-4z{@uF=#QYxaD-!xg2l8o!N@Q!A)+V2OOPRWM@EEa>5|s@qlGc3p892U6Yltt0 zi%k4F&tr!dnH#Snr0k}bI19*BAF+@8BRwyQiCTqDqN3;+btD+C7%g{OkY+e9iLiI1 zPGdARA8s#>5FjD7w+xw~5aSxeXbg{4Ubi=TT_R&JTI2Tz;_Ydi3F}*;sgA1AOt(8k zE}G*46qy$~W4$(}_xRLY1*Ri36f`!ZW@e)Q-u22}jjro}c(nBO7nGdAV!fx5`bWO zUUtb!GMze%yW`f8CX9P5l1ad%AJO_%5nw-1_NsxXTJ6zka})|-P_ZY*IurIlhIb>b z$f)=cV~?KbjIv+4w3?2a$M^2-+U847Wjg-cx?v-4S6Z-0aSf*8&d0S|tv4&Z$D_Le zmDcsJA#`*ibgW}}Uh^p4Q{l7LAL?=ij{egt>*9bUg_vH3hh zLmzWlt%T(`+(5^gnwp{aD(<@p?Iex}&xWm2$FXzVDpr)!IRV3TCx>ZzEw0Gr&y%agNWt^g++kJ-5Sqewz8ToYUV@l73?_pk^yJGH;YT>CD z&}RILrbDJNj4`#$3keJ@=;`fQ?-hNS`k+-wt~SR8=cAU=T14j=fjjn_UTmzsJ<=x4 z+>8HTh*ebEKF!w`x8g>=XQLYS1*_%g*%?Oou`M0-6;Z1y0YKY6&Vt}cbV~$Z@ikH7 zT}g!klOx#9_rFSec_O;KG(C4bOc1$WsVI75a=On*^K5_h}F52Jb78ds7yIcgd2u$wa=&DLl zadZeH=X>wLjUMbif0528iarUFbLn&Gk?BnCq8vv9Wr9U8K*E>E66 zKe+9Ag;4kL~uI%VZKLIDc8{t7tgjoIW0 z;si=|DauMj#&Y=HgIS*p28x+0x5LfjxP3soZ5dIx91j$?5+{btbasxvRbq_xZtXvi z2(10C(*!p&IF(=}y3~Ucu;g72bkFX>0Jg`EEfHyJx|7L8w$`?cGpy;^o?1ZUd&JS$ z5d#XC#82igYy{`rdDqVKVvjH#SAR_2iEgv;_F8D8h8B4HEB5p}ewq5i4#bO(p1Vi@ z9(Ug)2N>|`*9sl4n%6rY`41?*{N;}sDso|a_eLhnka@vey|FA zcJ`Jcwgq2neM?lH8t^n{uT*fTrPX~jmhR~IB;`_i7f|<)e?`tXVy>_No7xRgW&=2QRlrgq7*j4s@3{ZMSq4 z!$7)!`+XmxI0)mU_i?3)MoH;YM&lSLzbDVGZ1#}X+O>Gd2_q?mR4-16dWzdGG9NM- z2hp!fm&5D(6P@W|^>sTO)9<-o?qQcJ3kRAiULJDn=+P?I0?(*!E8*mvlOJFF@Mq-< zt1w`rmZXT&Lf?4us2-3Bp3~BmTnNf1UGK#i9yh$l?Et0rNg$v>=IVrBSr^WwaR8MM zrGh$~UEe;P9D|jP8CE{k2tga?;=p|na_3XZ$xfVWWAog-kh}!5&i~iJL^`rUcL4ecDpV7QO3l+i^kB5>BTIl(#MXK{l`cq{w*toKHrBF#DDhky3B|#`KI(v!ECe7El=V<4p z^~~L@T^fVV24D9^eqTScF0Dt*I=OGso-K;!$u-l%&Ha%yzKbJVQ6feyCA-xe%m1T% zCt=cZ=LJ;6Cs)XwO=Mu|dF4y|ehM+K+NsN)U(c6%5EBfYX0MBfp*-rae0j`{qbvvo ze5Zt48{OPu!VB@;&S7R1;7cO@y`o(Zh`X^A(H^WBQrV+tH zxCz2C%&dkryKa-*cF#+1Kc+q$g_i z*Z!t26gdwtQTt1#SQ092T@*y6^&*9+Cm-#ppkOCo0hF#NT$T0!Hm~r6x%q0dPNosk zWxMsu`;85pUZ68?-aN)HUCLLDj>Vx#tIP8ePB>$D4F%E#k?j>Avi? zYYYg~PWJlz{-x9rof;2fAep;wz6H7|TBJckc~6^L^vA@eHFX+>H+7hHwBqRnizQFg z*|k>T<@6Y+)ahc%E_BkkJs0DFyFYX%Gt+v}a^wgMJil1iUD~^MuS1*7Zw{VfW9F>L zgrkPctZUG#9qgwn>b%bSt@0T?n0{ytK)rLH1Lw(w1s#wwe)P@CSFf&n(<{5l?5t?O z%>Cp@eXdQniGPR@*sI}AMc2S^{y1*l>T`!FH|`A&3mfD)vUpfO)sv%DjjF4w)!uL5 zc&-Wh>JF4y^X{)P3|768?0S_Bw4*1UF~)EA%G@H-#IxX5ky*EymstDLG=fyl>dbK} z-jDHv9TtbqVwY1AO&y~tApEeDiHnwl?-c=-E#pdHzkswQhdySlNtYd0Q zN_w}IMn@UOP1pw^n4MaXSt7dbV|! zz??tA=G*%K`L*K-8%DwvefM=H3`BjRy-o7(DZWf=@SstDmXi7kdgMpXOC3z_$3e}N zvo`gd3Q8P3-&OxPJPgYzS(TLoz|rI$*3s?0je5H6V!!9YE0x8%46Z<&nx4ya? zP8XFUOY{4tl-~04Dc~&`c754-oek=Dtx3HNCql&2LlyZHFUVJ|mef9n201f$O5>OE zQ%<&CpXmT}TYv5LO1gr&J$t7~PV<-t(UfA z#Whe1I}6o#R9oRJQQV9CCb)>zZn})<9c~|Tj(Dt^bv$RLLUtS`f|2Sx0T<#21{Fu_ zT%w8a7V;U-)D&j<`mRKHmO9Sx_XCfG1#4Klf)X#>bW80PVvH9_Q=Tm1NRKtx_|f$I zMO<=V`Pa~Svma)q;J=K9r>{c7op`^8ZO+LoM2ODW_RV<)UFyB%-$sXe+}{2~R@&vu z#38R~^imC&$G8f8x9Uin!p{A)4zJfIB+6Mgrg6xaF~KOHoYFnd#P@^Y&xoRjzZrit zU@Z6BK<;9c60(2){@5vvH^w0REt9yAn-*}Q(~f^`-u%n^^UJOCw<~|hCW1cevaH8B zv;Ct@D&&mjC3__1)$LT!Ie)FN!_Pne0VOb~AOh8AmG@drr|;;KI@9YoSEn~-Ty0*|Zo(=7 zEY~RLz-+Qgq?5CU;iSs#^PvjF-Jf}Uae83V%G?p@U#aU_4;6!VR;ceu62?g&pN{n) zYU>byEAm`1UGg~DbK~%(A?KLyx!%R)&U&FM*lloYL`=H48mC}Y;QQj2y#^mkJH~-D9P7BF77*z3}G;3maq? zZ7YJ$tE)2u-M2sxpNJZ*_%euxYMpzS)ZMY_Rk{03gFl1jhTdy;P1LQbf7_FosNJqj z8~G`-r-?O^sMuIa+KU%k@`&_}Eo@LRSx5b{cImcb#JZxUInT!CxcpVnA&lmXiqjo- z{&C}PlY=iDU0i~cU$gt4qeVJ(Yj4H}a2#C@?m4T-&fgt9U$_(n`wz)V(X57A>bu-i zhbC<~*}Hdd2WkVe{IOOK7md-TDe@Jb_k^6*rOTIVh$S?if1)2`(4pJJOEzgE>^W(f zXKoyzCzc!3NL8mvdhcGL<}=7*95bV87&da&C8;bYX3qk-$mNc)E6_B_f2mRPb%Kx% z`^cEB9ue?xp$^SG<=1xBsRiNX8`V-BUpjVey-DD=BW51on^!WQitcCZ5YcCMYF5GZ zwmFkr?`O@$(JNp5M7oe;VoJ}>OK#=Ngd>*yPY|y5>(OJd`$DoA>!BfHAGHgOcCRkl zmhq=79bd2Tn8n&6C=x2_bsBj|Zs$t1FdzpDlbPo_AZBHJFF^3uv?dg7s3)(jqCzG6 zERZ6SfxQ?>f9MZ-C_2oHx)Bib^dVilPug^|fIx!0;`AkR#dwt(3ez2mK8wYZSk@kH zE?>xMl5xZQU12uMAuoO#)SbHknvPpzo#~1p!8~uXrz^2J6^8kxgZCGWq2!gmXFhO< z>iZ316a*|VwRIcZ-Tl-oyR{y_WRyv`S%|`R!LFfQ2BJ!|?gD{qIc5S=B~+hSaOF~u zQRzX~4!0Mia;1~qjj9G}?d0_&e^PB;7=QJsg36+gSSwx~(@g+mwD-VpL zrbH?^v(|og7qGyKpB_L7{iBi59f4q=JIdYJ9XPRO^ z9KV+E8!^z{qEA;br8asaK?2=qxl-%go9<+x;yTE74Fr~)iny5Duk!GeOb_h}r%^Q^ zmtfOlds*x8_o6L5q2NpHcA|j_@1WnO3u|9ah*>i}8QnjpcVB?nH=wPv!eCc~1+M7^ zyFH}7cQDmBo>sB>#ItOr;sX(zHjUp@ggVvn>I3O1DO-dp=iD*83(iEBf+<%k|7VKzBf3L9bQX)TaZHvk1SV@KlEBrYwx z`yGsm)X5Vr>?5bCCMGWzdevI5jV2K+moq2iJC{4{E z4*VSs(qbNQ&^J`1f~k(wI?Bv@koAeQuT6gl`=d@V{311O7HG#yKCjesd=5^~dfa-i z{S*Iq=e+k2;q6)?*c|<<2vyx67khz`N}QM*N>XQaThZJ7-A2;9d{sGjK!^LK;~>7y z+-WBitteBBeEO%{aGUsh(R<$0GoF)y{KL#4#)br<6mYELayb_w7fQH=SqKO;=ow>s zOt|^NhK?OOekLpo{21C3_(s$`K3@KC;}J1rtbwVOCI0zgg-^%>bVhG*apa0SJ?e@> z>Rvygm=%6&E$|LnbTj)i*T;8=>Au6WJF7H7ZH6zm$QX(RR;d-JIX=y;LA?NMxANKL zA+FK&bX6Y|qh4-*+rMw$d-xh3&RQP*EpbDYv?x6ei&3TvnneHkySGI}k&bV%AJsgq zLGLu!1kQ1JZ=Hj{Z%A?w(6kS-Lm#G!&?A0*KeF3}=3AB>S`Eqg(VKOlp>~TFZGcm( zX1o+}D~9K;2$$1avSf*X%Zh43eMLkQ=s&!@j3_-{{qkmL(7=ZQLw*x^Jpj&K7e$fa z_}^Ir6f`S2d_5h4bxM>Y~t)aB9_lT~m$qZ|9^}+ERXZ%(th~Kj_`ak-!d#J<_Nf z{s}$JI=W(|qVQV;64M$w{?f5y&Iq}O_HTx%>$|+M4)6CBX3!J=N@UH5b?&8Ci6xf2 zsQF9AP`ps-Mi+AMny$Mreh%Hok~4tm3`+=JqB&;FYb1F*dQ9uwLoh!_kP8->oWfCi_MbNNh=psi~*AfDg^0!~3?vBbM zJ;=$cqN0=vMcBd4E@D(DMV2}A$34nh=O|!KVWrOm1<5NSBk-<}Fgc8a`S{s0yLhqR0)T${Z$0xw{P`qz#wglU3AoKhyMN7B=?zo|qLZR1dlv}|=SpX@adw@0{bpFb z<|^f(;!6c|Q%=dVH-|3!4@w7VRY^`RF2($MsppWVNo38462(p`h{4gMhyOim*qqZ! z1@kH1AA4xWGY(+~##FodQEaUOH<4X6UR5l)q;zBpkgyv`%uJ8Q=u;*=WmQFum!PWz z&r{s@0PtV{avGE^rvF~$If5ze!`$xEo?u#DMQ%D~UPxCWEP%1h3lBmsA$mAK&BAQl z0>Z!d@M?tuz1mmjwQEHIWF6{gvm7(-P@<{1Q+c^E`N3x`%JNC8pN$LJJRL9>1q%a6 zXmdJ*7F7~t2VN>I9|1Jq_f`jE#8dVV8`cVBEBmuM>h) zXG}WU;h0i;ff?bQe_yz;z~S~+FRhZ~hA%7ip>G@sn`35Tk{x~94%kW?lF7;{kNJy3 zXO!4r{DrF+cDr-=b=sjF^-8cBx7g#sI!4(X#uNk^W?p`u_4Mfhk{L^ts|M5294ndo zBCKE*trrs(_B*}?;4Y?0Pw=wnajff?RS25Tyt5MfW#j*pq`Q3DDE@OZBxs8ul ze#^xm(A9$5_w9xk5s)YYj@v%5OKTd^ieVch$hru3CUOrbr{O8JiQ9dBcj;DX@+f0d zD7PuEhBfKGXC+uiPTsnGp*@G&3{tZoVM?ZcnfJA4>rI5W&_6Af5`Q@CDS>YLir-zP z8I_OZn_fZ1Xri#-{C|`Qv$*B(RWViYX_kL;nt>757`;F9+lHZ5($-ws0ivQr*5OI8 ze&%w~(AQ~gch%u#m|Ix`!fDJ8DAAC`$0$bpq-!j2w2npct> zMiloM>_nhd30Vh(xIM{TQKu`0xNLtMzDnKYrJU(KTU+b95`jI+(~IN7=Yz-NV~Y`R zIZd`3cS=)T{Uw~8H?`x#fHF$@Im3wx`F~PZ+uhWSH-PlG-D)WN4c6t+S>AuuiRk@C8V`Xs2DkJtMR{V3#X&(IWb!tPH2$Sx z)AGypY9r(z_>xoSh(@wW?-N_rc!W4>syc&%L@u;z5vp!a`4v{?LY>d-# z%!^#_-Z9mcRC*%7?XB2UQ;t|J(`%=WcBnbcIkhy7hAZAqP2HMIJ#fW?W4{29M{5oq zH*Pk0-Kd`AaV-I7BDw=)3^({h0_L1DL4* z)?>_7sXy|q=E@rI2P>GDF_^&|x<$Fe`zpcL2ci8+PtXLhSRXV=6{VHQU;TOHQ|VM{ z)9YCy6@^Z1+O?ZOw@bKz_rdC~8iznqT*~fmLD|~^KJ(&b%jOvFe$#pBF`()PxVAx+ z5d;a&u&onLZBsIbor~mm@kafXh{tb1g?kz#oWbxZ!xc(q5M@d^S4DMwz~F3{-q5CP z+dxJTo%i-;+#2nv_wdPOWB_uCil^!?5b8XD%`2)fMK4|`jZ20Z%VAZ82|BU%G1={X z09$2+Pc!iP){KXBXR1ZqsdY|H5p)n)63w6U>>fqwGY3O_iTvo`sdJ}KAI6!?z>TP~#h`wd;ncOw zM}cQghrY2K7PK{^5Nx-MNC%f*h60Bitj-Uf;^)K~%K#aqS-GGn48%D?d^)?j3d?Lt z1vi2aLap(WQ<%{e82jS1Q9WGndn!FhMjedne+R};joBmDRSS(4YDL!S<;dK$WecZZ3`{vc9s4|?K&omE+gCt zOvU4gIf&`ZtJ!Y#PZTYxMic+;c!X>uw&DV)r#RTM9Xk%fbjDW9Q(%APP%A;qa!&Fo z&`T-)*AmyFqM#5NM~1~5B_FrsyVtL8roG9Clzi{*-Qy{-I1}{u>re`8WCk)2N$q4mC6M?YCz3^X zhvw@1eYlE2m3F9#j3#UvKI!Pf*5eOjEboh7Eh$I3Aci1$G1P01wXdL%%k}IT@-6`? zu`mODXi!H~s$0s-roE}up*dc^X8)4M8_%X1hxf#|TG*$mj~dlEL{t zzbp*oxj&$VwC1f;8b?S!9g7=HxCsL)a!YCaP<8d)s9TFdR|G+d$yc;%4ikgSFf^2q zU74NgaCl!RjaySSmS(1%DYfp%xmiIJ^Px2RPgcc<3aj+f?!dqafYZmwI=1&GYqscv z91qG@^X{M7ein}^82+L?!lvK?^yr5STG~Hm)l?)Ez^@|u>6m-o-4{ylwD^p}P(F+5 zYyg*5JU%@@?5GuwPMWadLlAJxu2j`{02Z-K|B#74h zS&D56{PeQ4bP94`2w06=0Vub-!o!^t>!46}lRhFL^)6rb$+z^I-g*{iG+c8(fB)e4 z&g4$jA3q)w1_!3oy=ToXeeqTqL$Pf>zlE>m(@9a^6xb+I5UCM1F&eoW*8q*u+!`1{ z==38%X^Dps0=0{&=trcDpNGy`w0C2}li&>x2lM#Es<0a@Mg|XMykivJ{sFgNO1r-t zp+;pd9{TY)X9kLgj+}@&?sVwrJ@bUC<@rCr|CEt}yY=uuC`Gh)JUq4V5C(Vx_iHWE znH{r)Fi|{;b$Mh>;o44F+w8sr`cE2dGVk9@FK#zOvR5xi0tjjDm03GlRv-eAR?%`&!2Z4I&^4O@a48* zdr0o}_-<7KLd)=QY`9;APs0fa4+pqRU^~P7KJc;?31$ommtwsJ7W6(64RP-Vl5yj>Ki?zJ0r3I5X9D z2KGIgOxGqnp3-c*9!B6Pg!Wd=xij8NB7ToLOH zI~yCno0JD2;cs~Mlr@$*Zna%3^f@@mlPFq7K~pb{Kdd{1&XJ2ty4cOLwXHu0#wH$k>w0q&Tq$#NDzuZ zu9%t7;xX_j{qa6&IXUsyUTu;V@&V3(iEP(n1SnH2EQS!raT@kj=WTZC(6soqy_@UW zk{9QKckMDnTHy#@aRwEYJcV#mGqV_CT5+eS+bfB%mMqObqRl-69#zg&Z|^*+(WPft zw_^ZQrAlf(n}2ODga6(R!C(S>_NMFf^}V-Y?rMybY1o2Ek2rT)S3@r#CFCqhy>DRns>Z_Jg+%zHa+zZPSC4 zNWN{BF>HC+WoPJeY83IrWZ8BkgN7X9oblHDbk`w51%^g;Mh0Pfe+DI*?q{S(CutM% z&d+07qEB8*f71|A7Df1h?r$NoE<>qloUfoGR6Ei90Kr8n7z1{bclI&H{rvZ?h>JFC%TB_D{_4(%meMoAIpKu^;bDCI zsW}*yNOraq@c8wdF#y8*X^bdc2YeQRO^^5tc3{{RtDS?Cu59PdJ@w85w#U;{JW5?X zd;DVlN_-tw{qJgQgmz`qu8yN1BdnzJFWmgD@u(1SoJ3GL!rg()qZGkHH0_T5cTau) zdp318NgLF8I_9-P*6jhcWfX>{w6h|EHC#Y|1?c&JG{QIlY*#H@-*Z2eMdvQPn=ePQ ztV91R?V4Zv=<*v=r&lecqPm=?sM5fl?`oy-06vAXd}HFpi?%!tLhK4wly>9B#HQ;L@8om-`<9kS9OEH6 z66ozKT}Qs=Ol_YOHMeE6fc@Nqd9CaoM&N@~)m|K?^v~#)t1;~P-xGOqlELPa{QIf8 z&!-rsI%v>eqA|3KJil60fgP{9hf`gesov~_HGA`;1$CDc;s z;zZea8fub8Rm2lMrs727$-3IsPd182@KLU@2`&IIn9$5?5*Kw;l5h7*z(%QD4v2K_ZnEbjtzAbghq{q zkfvkeQ_mo$QJ>`_5v-5AR}PvK4phzOyqM2-NM;n#EIh>1nU?KB=xzExFGnNm9k zSZ{HIYEmwRZx-$B6k!_Z~jDy@n4%m=T;~+|LgEFyQQS*{pf<- zipcsDDpP&lRYJsyAU#{IdMT^3#sl$Iz?9NdhGZS&oSPFP-)k}whyAfhqA}Je002Nr zk~|$8rFq|o_fKo3(8M3-blX$bTuuof9tBh^PVTaWRLK@QIG7q45pX`3wBeBQ(qke$ zMw-hgAa;J@DDs&dAfzr$$3I$VQ?j=S_(}}pf4SqUD*+4JWI(}}2H{Iw1WY9v(k`;fJW3K-2;i02Z^9M@-HGeD=e>buimJ3`U}(r)Ky;ZJfS5hfhmGi<9x*t z%@GVt#`AQg=W<(r9hilpKN+nG1*7JW600_`l~VHuEgM9NC>#(S%>!K;yPsqHfiQW3 z5aS>5r-;B<5&_LiQ_sUgX@H@D2Y%49F=)UMo(}8E9iv~AhhQM?zO?C%#V6crA*k~* z9Sl?ea1lVQ(R#=5w7AW|EY+hw78@Et1vF+Mr33_InM4=_FC8FPwLHAZWPJ(CvNu!R zQ*n2IcT-B;SEZ=MDyqDC|F~tVOsS^mxGN+iBrnAqaEh;GK!_?0LnV}Qj-X~+% z=`n`Nym=7Sc?q;ly^5$qUQ*m>`ER2>qf)a&B-hloyEM59m`P@Y4nuzWsXmd5G&G07 zAjKwc>rW%OG1BPbH2fE>N}Ym?p*c8g5Wf(QGs$=@B0!=11RgQCrEE1u*b zGVk-`e?IllzrLf|g;wVkkeQLznDtH_s6wu5*YRN5P1{LqEpdEk7xU{go1P7E7RlV+ zs0ib236K2(iY(h{GzIf!@))yzC;yMT(AcHZbQ5ggHHZZjF+Jk==K$Yj7)X_d2kJ|Y zac>6&Klsw;Qy}DmC)MO}OEuW+c+eaVLuZI zwgYBj&ggmpKxf<0*i;I(L|%02-!Sj+>E8nXeKZ!};sR93E|igxv8<1pNM}=&u#8|Y zMmsh5Q2gROI%u8cL~!T(Pv&S!r6wufP~D^;*-{aqHhujYDQR<=3eOUqCf91I8vl7% zsD@gx0aeG0nU$jj@GZ6qCrtBUjK*1t8s zUc86=31Cp#0k^So5&}4vetx5I0XhPrY>K$;ZG9MMt1NppZZg}vnG4XV)1=vx_;bCp zUfrZi2XC@tm#dql}?xpiMoNp)AqS>tKJybN6r1{`YSRY(#UuDOP-sb$u?A5oKj% z@Biz83G*f_^C>ne-M(t`+(qz(8dxXR}i2vR%#? zV44~Rt(Z?CQN#yAlO#f9U50+ZpI8-nvJIQs$7G?R-6NU~v}T_vmd{T{cU1f4b(~6o zB;DTV>nlbhyfXNO{lPfI2o-v)tg8;i#Hhy3J@+^Ab$+i5_yaw%YJt2Fegbopl6p2d z7V%a-x_|uqyLf@kk?qi7&*(V3wT*vKO*Lyu1b?9P6FSM^!mEmsTJs||L(F-%(ED-^ z1Lk_ius3k%|6xXy|1~31>DdUp1$B7#?cE;w)WoNOpmnpY&t)txA2+cnH#lgM?4kXQ zo)c**L4fekB!?FN8aqR)e`704%<}$Hb*dzykf>lZBOVWQk6cS=+z7w-@glU7Z1JQ? z#^B^d+-T1+G&~M^bdP9q=<>HznW(5Oyxo=mFTM<|wkZ2FzcvKNo?g2Td~G*t)=8>* z>7c&nRPtG8I9XPO_4W0oyvMHuxy`O-zld0IHQV>it$i#od0HU<$5WX3-%}vPm8Q~- zUak}@r019Xgutv# zaKB!}JegtI8hF4i?1Yscp0PHC2;A;~p0C|WyJ(l}h}Mz@L^sx_(2Cxlq2{q zt=q0|D?_y`}YOlTmHd} zDL=40lsoCw-jf~i^ePy6>}7Ut#+(`=i%L7viK}~2^v}! z(&F&UER>mbBi#|Zvjk#CHGY@~uB*>5^C+nN* z*A*?}>){=&vye$U^ZP%WOJUJ$VL^lFsDFL&{q+uF=!tOwh*y&lUVY;CtFL@j$o%pBo+mJetRyE5=X!SlF*VSR}Z(`KxOP}?vH*H)!@RmDCyC>6;-1HGgEmdy1 zw6Gls`G&(kT_)-~nV0Nrk!Bl-EWw8dj%r8c}hle!38ccZ5m zpS14b%-JdQTKA6%bDY|DSZhgM29aeUonj-)K5p(X!k6;hBofWrNdiHAVIgD4w+1V4 znE6h3G_#RLd~<;799uySZQb>EkUXYF3_a*koj!+wC<_i%lAPslDBQX3f!SDNxC&2y zA0W9G{M@}fwwK0IQ(}?JrB8vdZ&KnaO#3z9WYY%lF=$$r$0t~Ui#2z3L>V|Xx%b%B z^OM*$%pD4m9r5)Ogs1Lw>iL5b-U5@jlv}d3WAAR_bTSDYZ z$PfdFOm2}l6v8XWFRz)b;9@=BtvE<5C!+^`7f^-Mw5j7)qYMuKG zyuIp4i8o&9t-i8kba^G3r#) z&S-3Uj4J8v6g|3NBJHt)(uZU1!`4lj@A7b_I#0;Yd)R^_mcC@>x=h^dCv5OArU~$q zGr5;RXKsNe+d*z%d}x8+YVJ=Fwow4Q=9?4(7vBG-_bI|D-)ej5Zdlu~&uA4?@_JDb5)&*Ri2C--+NTIltTn`H7<3QN}zk_!(+ zs7%IwDf4PP0TgI8Z(d*261H_1nRL47eHV$=Z_F~$6gxa{b-Q2s$N?S(5O{?&pZMp^ zAAEx0*}{!6DdMJ1Wm0!V&sr;NyXT>IF>!JJH0t$2S0?Atqg!+B!{v#=pWAPg_;$f3+jx5iWk#y=Po&zYKv1+5)0$W=JVaqhKbkE7$=B*_*lSLM6 zct9*4HFGgWL-d_9cJ|h14$&)u!0kB1w{AGT$#@Ruiu}5frvxlP(i%Z{kWFonY1*d( zp8X{8tA?bXN{TtP!6Zctf%)V5U(MT6#lN|^$>+}ufI4~mL!RqtZiD^hp%?RhGxdMfI{ahXlm?KecY3s(Iwb8a4Kead$#++(4y zTIPk0%Ne?-7%ep;R5(P*-dh)%n>E&6qqA`K{Pjq(u!8&UwI-=*67r~*n?JTep_P*OMM=AOqPPtROifGn#v$90>@1lt zuE?^#j3M8Medgf59P^#B^ppz>YVS>4S9UZccwJY1VpwM_FT3S>a({7o5=rqR2Bx06 z^3jHvE5x~g6BvEs#CAORsF5OuQt8}EiEqtcgNlA_3E=s+(tuV<&HtPK4jR<_K*ay> z`Kz^$_}=ujYgh9#ZTd&ICd1eK1H%b2hRv_|@02Ou(GdRebJK=y{@ITYX?aFJ9#_kQ z__4cM9>kAx^8G>lFe@!j;)fM(c@RJRNy~%y;eJ~l#E(FtXekWy>Hk}w_Tv-2FRtYO>Z<=(hac { + + const editor = useRef(); + const cm = useRef(); + + useEffect(() => { + const syntax = syntaxConfig[lang] ?? syntaxConfig.default; + + const myCompletions = context => { + let before = context.matchBefore(/\w+/); + if (!context.explicit && !before) { + return null; + } + + return { + from: before ? before.from : context.pos, + options: syntax.hint, + validFor: /^\w*$/, + }; + }; + + const myHighlightStyle = HighlightStyle.define([ + {tag: tags.keyword, color: '#fc6eee'}, + {tag: tags.function, color: '#ff0'}, + ]); + + cm.current = new EditorView({ + extensions: [ + basicSetup, + autocompletion({override: [myCompletions]}), + syntaxHighlighting(myHighlightStyle), + EditorView.updateListener.of(e => { + onChange && onChange(e.state.doc.toString()); + }), + EditorView.theme( + { + '&': { + color: '#000', + }, + '&.cm-focused': { + outline: '0', + }, + '.cm-activeLine': { + 'background-color': 'transparent', + }, + } + ), + cmplaceholder(placeholder ?? '请输入查询语句'), + ], + parent: editor.current, + }); + + // onChange && EditorView.updateListener.of(e => onChange(e.state.doc.toString())); + + return () => { + cm.current.destroy(); + }; + }, [lang, onChange, placeholder]); + + useEffect(() => { + if (value !== null && cm.current.state.doc && value !== cm.current.state.doc.toString()) { + cm.current.dispatch({ + changes: {from: 0, to: cm.current.state.doc.length, insert: value}, + }); + } + }, [value]); + + return ( +

+ ); +}; + +export default CodeEditor; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/cypher.js b/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/cypher.js new file mode 100644 index 000000000..ee217b2ea --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/cypher.js @@ -0,0 +1,113 @@ +const hint = [ + // constant/type/class/function + // Clauses + {label: 'CALL', type: 'method'}, + {label: 'CREATE', type: 'method'}, + {label: 'DELETE', type: 'method'}, + {label: 'DETACH', type: 'method'}, + {label: 'FOREACH', type: 'method'}, + {label: 'LOAD', type: 'method'}, + {label: 'MATCH', type: 'method'}, + {label: 'MERGE', type: 'method'}, + {label: 'OPTIONAL MATCH', type: 'method'}, + {label: 'REMOVE', type: 'method'}, + {label: 'RETURN', type: 'method'}, + {label: 'SET', type: 'method'}, + {label: 'START', type: 'method'}, + {label: 'UNION', type: 'method'}, + {label: 'UNWIND', type: 'method'}, + {label: 'WITH', type: 'method'}, + + // Subclauses + {label: 'LIMIT', type: 'constant'}, + {label: 'ORDER BY', type: 'constant'}, + {label: 'SKIP', type: 'constant'}, + {label: 'WHERE', type: 'constant'}, + {label: 'YIELD', type: 'constant'}, + + // Modifiers + {label: 'ASC', type: 'keyword'}, + {label: 'ASCENDING', type: 'keyword'}, + {label: 'ASSERT', type: 'keyword'}, + {label: 'BY', type: 'keyword'}, + {label: 'CSV', type: 'keyword'}, + {label: 'DESC', type: 'keyword'}, + {label: 'DESCENDING', type: 'keyword'}, + {label: 'ON', type: 'keyword'}, + + // Expressions + {label: 'ALL', type: 'keyword'}, + {label: 'CASE', type: 'keyword'}, + {label: 'COUNT', type: 'keyword'}, + {label: 'ELSE', type: 'keyword'}, + {label: 'END', type: 'keyword'}, + {label: 'EXISTS', type: 'keyword'}, + {label: 'THEN', type: 'keyword'}, + {label: 'WHEN', type: 'keyword'}, + + // Operators + {label: 'AND', type: 'keyword'}, + {label: 'AS', type: 'keyword'}, + {label: 'CONTAINS', type: 'keyword'}, + {label: 'DISTINCT', type: 'keyword'}, + {label: 'ENDS', type: 'keyword'}, + {label: 'IN', type: 'keyword'}, + {label: 'IS', type: 'keyword'}, + {label: 'NOT', type: 'keyword'}, + {label: 'OR', type: 'keyword'}, + {label: 'STARTS', type: 'keyword'}, + {label: 'XOR', type: 'keyword'}, + + // Schema + {label: 'CONSTRAINT', type: 'keyword'}, + {label: 'CREATE', type: 'keyword'}, + {label: 'DROP', type: 'keyword'}, + {label: 'EXISTS', type: 'keyword'}, + {label: 'INDEX', type: 'keyword'}, + {label: 'NODE', type: 'keyword'}, + {label: 'KEY', type: 'keyword'}, + {label: 'UNIQUE', type: 'keyword'}, + + // Hints + {label: 'INDEX', type: 'keyword'}, + {label: 'JOIN', type: 'keyword'}, + {label: 'SCAN', type: 'keyword'}, + {label: 'USING', type: 'keyword'}, + + // Literals + {label: 'false', type: 'keyword'}, + {label: 'null', type: 'keyword'}, + {label: 'true', type: 'keyword'}, + + // Reserved for future use + {label: 'ADD', type: 'keyword'}, + {label: 'DO', type: 'keyword'}, + {label: 'FOR', type: 'keyword'}, + {label: 'MANDATORY', type: 'keyword'}, + {label: 'OF', type: 'keyword'}, + {label: 'REQUIRE', type: 'keyword'}, + {label: 'SCALAR', type: 'keyword'}, +]; + +const highlight = [ + {tag: 'CALL', color: '#fc6'}, + {tag: 'CREATE', color: '#fc6'}, + {tag: 'DELETE', color: '#fc6'}, + {tag: 'DETACH', color: '#fc6'}, + {tag: 'FOREACH', color: '#fc6'}, + {tag: 'LOAD', color: '#fc6'}, + {tag: 'MATCH', color: '#fc6'}, + {tag: 'MERGE', color: '#fc6'}, + {tag: 'OPTIONAL MATCH', color: '#fc6'}, + {tag: 'REMOVE', color: '#fc6'}, + {tag: 'RETURN', color: '#fc6'}, + {tag: 'SET', color: '#fc6'}, + {tag: 'START', color: '#fc6'}, + {tag: 'UNION', color: '#fc6'}, + {tag: 'UNWIND', color: '#fc6'}, + {tag: 'WITH', color: '#fc6'}, + // {tag: '', color: '#fc6'}, + // {tag: tags.comment, color: "#f5d", fontStyle: "italic"} +]; + +export {highlight, hint}; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/gremlin.js b/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/gremlin.js new file mode 100644 index 000000000..485a1afcc --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/gremlin.js @@ -0,0 +1,158 @@ +// const hint = [ +// 'g', +// 'graph', +// 'out', 'int', 'both', 'outE', 'inE', 'bothE', 'outV', 'inV', 'bothV', 'otherV', +// 'hasNext', 'next', 'tryNext', 'toList', 'toSet', 'toBulkSet', 'fill', 'iterate', +// 'addV', 'addE', 'aggregate', 'and', 'as', +// 'barrier', 'branch', 'by', +// 'call', 'cap', 'choose', 'coalesce', 'coin', 'connectedComponent', 'constant', 'count', 'cyclicPath', +// 'dedup', 'drop', +// 'E', 'element', 'elementMap', 'emit', 'explain', +// 'fail', 'filter', 'flatMap', 'fold', 'from', +// 'group', 'groupCount', +// 'has', 'hasLabel', 'hasId', 'hasKey', 'hasValue', 'hasNot', +// 'id', 'identity', 'index', 'inject', 'io', 'is', +// 'key', +// 'label', 'limit', 'local', 'loops', +// 'map', 'match', 'math', 'max', 'mean', 'mergeE', 'mergeV', 'min', +// 'none', 'not', +// 'option', 'optional', 'or', 'order', +// 'pageRank', 'path', 'peerPressure', 'profile', 'project', 'program', 'properties', 'property', +// 'propertiesMap', +// 'range', 'read', 'repeat', +// 'sack', 'sample', 'select', 'shortestPath', 'sideEffect', 'simplePath', 'skip', 'subgraph', 'sum', +// 'tail', 'timeLimit', 'to', 'tree', +// 'unfold', 'union', 'until', +// 'V', 'value', 'valueMap', 'values', +// 'where', 'with', 'write', +// ]; + +// const highlight = []; + +// export {hint, highlight}; + + +const hint = [ + {label: 'g', type: 'constant'}, + {label: 'graph', type: 'constant'}, + {label: 'out', type: 'function'}, + {label: 'int', type: 'function'}, + {label: 'both', type: 'function'}, + {label: 'outE', type: 'function'}, + {label: 'inE', type: 'function'}, + {label: 'bothE', type: 'function'}, + {label: 'outV', type: 'function'}, + {label: 'inV', type: 'function'}, + {label: 'bothV', type: 'function'}, + {label: 'otherV', type: 'function'}, + {label: 'hasNext', type: 'function'}, + {label: 'next', type: 'function'}, + {label: 'tryNext', type: 'function'}, + {label: 'toList', type: 'function'}, + {label: 'toSet', type: 'function'}, + {label: 'toBulkSet', type: 'function'}, + {label: 'fill', type: 'function'}, + {label: 'iterate', type: 'function'}, + {label: 'addV', type: 'function'}, + {label: 'addE', type: 'function'}, + {label: 'aggregate', type: 'function'}, + {label: 'and', type: 'function'}, + {label: 'as', type: 'function'}, + {label: 'barrier', type: 'function'}, + {label: 'branch', type: 'function'}, + {label: 'by', type: 'function'}, + {label: 'call', type: 'function'}, + {label: 'cap', type: 'function'}, + {label: 'choose', type: 'function'}, + {label: 'coalesce', type: 'function'}, + {label: 'coin', type: 'function'}, + {label: 'connectedComponent', type: 'function'}, + {label: 'constant', type: 'function'}, + {label: 'count', type: 'function'}, + {label: 'cyclicPath', type: 'function'}, + {label: 'dedup', type: 'function'}, + {label: 'drop', type: 'function'}, + {label: 'E', type: 'function'}, + {label: 'element', type: 'function'}, + {label: 'elementMap', type: 'function'}, + {label: 'emit', type: 'function'}, + {label: 'explain', type: 'function'}, + {label: 'fail', type: 'function'}, + {label: 'filter', type: 'function'}, + {label: 'flatMap', type: 'function'}, + {label: 'fold', type: 'function'}, + {label: 'from', type: 'function'}, + {label: 'group', type: 'function'}, + {label: 'groupCount', type: 'function'}, + {label: 'has', type: 'function'}, + {label: 'hasLabel', type: 'function'}, + {label: 'hasId', type: 'function'}, + {label: 'hasKey', type: 'function'}, + {label: 'hasValue', type: 'function'}, + {label: 'hasNot', type: 'function'}, + {label: 'id', type: 'function'}, + {label: 'identity', type: 'function'}, + {label: 'index', type: 'function'}, + {label: 'inject', type: 'function'}, + {label: 'io', type: 'function'}, + {label: 'is', type: 'function'}, + {label: 'key', type: 'function'}, + {label: 'label', type: 'function'}, + {label: 'limit', type: 'function'}, + {label: 'local', type: 'function'}, + {label: 'loops', type: 'function'}, + {label: 'map', type: 'function'}, + {label: 'match', type: 'function'}, + {label: 'math', type: 'function'}, + {label: 'max', type: 'function'}, + {label: 'mean', type: 'function'}, + {label: 'mergeE', type: 'function'}, + {label: 'mergeV', type: 'function'}, + {label: 'min', type: 'function'}, + {label: 'none', type: 'function'}, + {label: 'not', type: 'function'}, + {label: 'option', type: 'function'}, + {label: 'optional', type: 'function'}, + {label: 'or', type: 'function'}, + {label: 'order', type: 'function'}, + {label: 'pageRank', type: 'function'}, + {label: 'path', type: 'function'}, + {label: 'peerPressure', type: 'function'}, + {label: 'profile', type: 'function'}, + {label: 'project', type: 'function'}, + {label: 'program', type: 'function'}, + {label: 'properties', type: 'function'}, + {label: 'property', type: 'function'}, + {label: 'propertiesMap', type: 'function'}, + {label: 'range', type: 'function'}, + {label: 'read', type: 'function'}, + {label: 'repeat', type: 'function'}, + {label: 'sack', type: 'function'}, + {label: 'sample', type: 'function'}, + {label: 'select', type: 'function'}, + {label: 'shortestPath', type: 'function'}, + {label: 'sideEffect', type: 'function'}, + {label: 'simplePath', type: 'function'}, + {label: 'skip', type: 'function'}, + {label: 'subgraph', type: 'function'}, + {label: 'sum', type: 'function'}, + {label: 'tail', type: 'function'}, + {label: 'timeLimit', type: 'function'}, + {label: 'to', type: 'function'}, + {label: 'tree', type: 'function'}, + {label: 'unfold', type: 'function'}, + {label: 'union', type: 'function'}, + {label: 'until', type: 'function'}, + {label: 'V', type: 'function'}, + {label: 'value', type: 'function'}, + {label: 'valueMap', type: 'function'}, + {label: 'values', type: 'function'}, + {label: 'where', type: 'function'}, + {label: 'with', type: 'function'}, + {label: 'write', type: 'function'}, +]; + +const highlight = []; + +export {hint, highlight}; + diff --git a/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/index.js b/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/index.js new file mode 100644 index 000000000..d67b64a7b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/CodeEditor/syntax/index.js @@ -0,0 +1,4 @@ +import * as gremlin from './gremlin'; +import * as cypher from './cypher'; + +export default {gremlin, cypher, default: {hint: [], highlight: []}}; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.js b/hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.js new file mode 100644 index 000000000..692e65fce --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.js @@ -0,0 +1,63 @@ + +import {useCallback, useEffect, useState} from 'react'; +import {ChromePicker} from 'react-color'; +import styles from './index.module.scss'; + +const InputColorSelect = ({value, onChange, disable}) => { + const [visible, setVisible] = useState(false); + const [color, setColor] = useState('#5c73e6'); + + const showPicker = useCallback(() => { + if (disable) { + return; + } + + setVisible(true); + }, [disable]); + + const hidePicker = useCallback(() => { + if (disable) { + return; + } + + setVisible(false); + }, [disable]); + + const handleClick = useCallback(color => { + if (disable) { + return; + } + + setColor(color.hex); + + onChange?.(color.hex); + }, [onChange, disable]); + + useEffect(() => { + if (value) { + setColor(value); + } + }, [value]); + + return ( +
+ {disable ?
: null} +
+
+
+ {visible ? ( +
+
+ +
+ ) : null} +
+ ); +}; + +export {InputColorSelect}; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.module.scss new file mode 100644 index 000000000..357a20ef3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ColorSelect/index.module.scss @@ -0,0 +1,47 @@ +.wrap { + line-height: 0; + position: relative; +} + +.disable { + // border-top: 1px solid #FF0000; + width: 60px; + // transform: rotate(27deg); + position: absolute; + z-index: 2; + height: 32px; + top: 0; + // top: 17px; + // left: -2px; + // display: inline-block; + background: linear-gradient(28deg, transparent 49%, deeppink 49%, deeppink 50.5%, transparent 50.5%); +} + +.color { + width: 46px; + height: 18px; + border-radius: 2px; +} + +.swatch { + padding: 6px; + background: #fff; + border-radius: 2px; + // box-shadow: 0 0 0 1px rgba(0, 0, 0, .1); + border: 1px solid #d9d9d9; + display: inline-block; + cursor: pointer; +} + +.popover { + position: absolute; + z-index: 2; +} + +.cover { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0, +} diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/EditLayer.js b/hugegraph-hubble/hubble-fe-new/src/components/ERView/EditLayer.js new file mode 100644 index 000000000..5b9ed1d39 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/EditLayer.js @@ -0,0 +1,71 @@ +import {Form, Modal, Select} from 'antd'; +import vertexData from './data/vertex.json'; +import edgeData from './data/edge.json'; +import {useCallback} from 'react'; + +const EditVertexLayer = ({open, onCancle, onChange}) => { + const [form] = Form.useForm(); + + const setVertex = useCallback((_, item) => { + form.setFieldValue('vertex', item.info); + }, [form]); + + const onFinish = useCallback(() => { + console.log(form.getFieldsValue()); + onChange(form.getFieldValue('vertex')); + onCancle(); + }, [form, onChange, onCancle]); + + return ( + +
+ + ({label: item.name, value: item.name, info: item}))} + onChange={setEdge} + /> + + + +
+ ); +}; + +export {EditVertexLayer, EditEdgeLayer}; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/config.js b/hugegraph-hubble/hubble-fe-new/src/components/ERView/config.js new file mode 100644 index 000000000..e929a2a1d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/config.js @@ -0,0 +1,289 @@ +const LINE_HEIGHT = 24; +const NODE_WIDTH = 150; + +const erRectConfig = { + inherit: 'rect', + markup: [ + { + tagName: 'rect', + selector: 'body', + }, + { + tagName: 'text', + selector: 'label', + }, + // { + // tagName: 'g', + // attrs: { + // class: 'btn add', + // }, + // children: [ + // { + // tagName: 'circle', + // attrs: { + // class: 'add', + // }, + // }, + // { + // tagName: 'text', + // attrs: { + // class: 'add', + // }, + // }, + // ], + // }, + ], + tools: [ + { + name: 'button', + args: { + x: 10, + y: 10, + markup: [ + // { + // tagName: 'circle', + // attrs: { + // stroke: '#fff', + // fill: 'transparent', + // cursor: 'pointer', + // 'stroke-width': 1, + // r: 8, + // }, + // }, + { + tagName: 'text', + textContent: '∅', + attrs: { + fontSize: 16, + fontWeight: 800, + x: -4, + y: 6, + fill: '#fff', + fontFamily: 'Times New Roman', + cursor: 'pointer', + }, + }, + ], + }, + }, + { + name: 'button-remove', + args: { + x: '100%', + y: 0, + offset: {x: 0, y: 0}, + }, + }, + ], + attrs: { + rect: { + strokeWidth: 1, + stroke: '#5F95FF', + fill: '#5F95FF', + }, + label: { + fontWeight: 'bold', + fill: '#ffffff', + fontSize: 12, + }, + '.btn.add': { + 'refDx': -16, + 'refY': 12, + 'event': 'node:add', + }, + '.btn.del': { + 'refDx': -44, + 'refY': 16, + 'event': 'node:delete', + }, + '.btn > circle': { + 'r': 8, + 'fill': 'transparent', + 'stroke': '#fff', + 'strokeWidth': 1, + }, + '.btn.add > text': { + 'fontSize': 16, + 'fontWeight': 800, + 'fill': '#fff', + 'x': -75, + 'y': -12, + 'fontFamily': 'Times New Roman', + 'text': '+', + }, + '.btn.del > text': { + 'fontSize': 28, + 'fontWeight': 500, + 'fill': '#fff', + 'x': -4.5, + 'y': 6, + 'fontFamily': 'Times New Roman', + 'text': '-', + }, + }, + ports: { + groups: { + list: { + markup: [ + { + tagName: 'rect', + selector: 'portBody', + }, + { + tagName: 'text', + selector: 'portNameLabel', + }, + { + tagName: 'text', + selector: 'portTypeLabel', + }, + ], + attrs: { + portBody: { + width: NODE_WIDTH, + height: LINE_HEIGHT, + strokeWidth: 1, + stroke: '#5F95FF', + fill: '#EFF4FF', + magnet: true, + }, + portNameLabel: { + ref: 'portBody', + refX: 6, + refY: 6, + fontSize: 10, + }, + portTypeLabel: { + ref: 'portBody', + refX: 95, + refY: 6, + fontSize: 10, + }, + }, + position: 'erPortPosition', + }, + title: { + markup: [ + { + tagName: 'rect', + selector: 'portBody', + }, + { + tagName: 'text', + selector: 'portNameLabel', + }, + { + tagName: 'text', + selector: 'portTypeLabel', + }, + ], + attrs: { + portBody: { + width: NODE_WIDTH, + height: LINE_HEIGHT, + strokeWidth: 1, + stroke: '#5F95FF', + fill: '#FFFF00', + magnet: true, + }, + portNameLabel: { + ref: 'portBody', + refX: 6, + refY: 6, + fontSize: 10, + }, + portTypeLabel: { + ref: 'portBody', + refX: 95, + refY: 6, + fontSize: 10, + }, + }, + position: 'erPortPosition', + }, + }, + }, +}; + +const erRectHeadConfig = { + inherit: 'rect', + markup: [ + { + tagName: 'rect', + selector: 'body', + }, + { + tagName: 'text', + selector: 'label', + }, + ], + attrs: { + rect: { + strokeWidth: 1, + stroke: '#5F95FF', + fill: '#5F95FF', + }, + label: { + fontWeight: 'bold', + fill: '#ffffff', + fontSize: 12, + }, + }, + ports: { + groups: { + list: { + markup: [ + { + tagName: 'rect', + selector: 'portBody', + }, + { + tagName: 'text', + selector: 'portNameLabel', + }, + { + tagName: 'text', + selector: 'portTypeLabel', + }, + ], + attrs: { + portBody: { + width: NODE_WIDTH, + height: LINE_HEIGHT, + strokeWidth: 1, + stroke: '#5F95FF', + fill: '#EFF4FF', + magnet: true, + }, + portNameLabel: { + ref: 'portBody', + refX: 6, + refY: 6, + fontSize: 10, + }, + portTypeLabel: { + ref: 'portBody', + refX: 95, + refY: 6, + fontSize: 10, + }, + }, + position: 'erPortPosition', + }, + }, + }, +}; + +const erPortPosition = portsPositionArgs => { + return portsPositionArgs.map((a, index) => { + return { + position: { + x: 0, + y: (index + 1) * LINE_HEIGHT, + }, + angle: 0, + }; + }); +}; + +export {erRectConfig, erRectHeadConfig, erPortPosition}; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/edge.json b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/edge.json new file mode 100644 index 000000000..e18787291 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/edge.json @@ -0,0 +1,232 @@ +[ + { + "name": "父子", + "source_label": "男人", + "target_label": "男人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "父女", + "source_label": "男人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "母子", + "source_label": "女人", + "target_label": "男人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "母女", + "source_label": "女人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "妻", + "source_label": "男人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "妾", + "source_label": "男人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "相恋", + "source_label": "男人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "朋友", + "source_label": "男人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "姐妹", + "source_label": "女人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "丫环", + "source_label": "男人", + "target_label": "女人", + "link_multi_times": false, + "properties": [], + "sort_keys": [], + "property_indexes": [], + "open_label_index": true, + "style": { + "color": "#5C73E6", + "with_arrow": true, + "line_type": "SOLID", + "thickness": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + } +] diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/group.json b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/group.json new file mode 100644 index 000000000..91cbce270 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/group.json @@ -0,0 +1,95 @@ +{ + "markup": [ + { + "tagName": "rect", + "selector": "portBody" + }, + { + "tagName": "text", + "selector": "portNameLabel" + }, + { + "tagName": "text", + "selector": "portTypeLabel" + }, + { + "tagName": "g", + "attrs": { + "class": "btn add" + }, + "children": [ + { + "tagName": "circle", + "attrs": { + "class": "add" + } + }, + { + "tagName": "text", + "attrs": { + "class": "add" + } + } + ] + } + ], + "attrs": { + "portBody": { + "width": 150, + "height": 24, + "strokeWidth": 1, + "stroke": "#5F95FF", + "fill": "#EFF4FF", + "magnet": true + }, + "portNameLabel": { + "refX": 6, + "refY": 6, + "fontSize": 10, + "text": "ID" + }, + "portTypeLabel": { + "refX": 95, + "refY": 6, + "fontSize": 10, + "text": "" + }, + "rect": { + "fill": "#FAFAFA" + }, + ".btn.add": { + "refDx": -16, + "refY": 16, + "event": "node:add" + }, + ".btn.del": { + "refDx": -44, + "refY": 16, + "event": "node:delete" + }, + ".btn > circle": { + "r": 10, + "fill": "transparent", + "stroke": "#fff", + "strokeWidth": 1 + }, + ".btn.add > text": { + "fontSize": 20, + "fontWeight": 800, + "fill": "#fff", + "x": -5.5, + "y": 7, + "fontFamily": "Times New Roman", + "text": "+" + }, + ".btn.del > text": { + "fontSize": 28, + "fontWeight": 500, + "fill": "#fff", + "x": -4.5, + "y": 6, + "fontFamily": "Times New Roman", + "text": "-" + } + } +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/property.json b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/property.json new file mode 100644 index 000000000..02c9b987f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/property.json @@ -0,0 +1,32 @@ +[ + { + "name": "姓名", + "data_type": "TEXT", + "cardinality": "SINGLE", + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "性别", + "data_type": "TEXT", + "cardinality": "SINGLE", + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "年龄", + "data_type": "INT", + "cardinality": "SINGLE", + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "特点", + "data_type": "TEXT", + "cardinality": "SINGLE", + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "亲疏", + "data_type": "TEXT", + "cardinality": "SINGLE", + "create_time": "1970-01-01 08:00:00" + } +] \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/test.json b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/test.json new file mode 100644 index 000000000..4e18a159b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/test.json @@ -0,0 +1,295 @@ +[ + { + "id": "1", + "shape": "er-rect", + "label": "男人", + "width": 150, + "height": 24, + "position": { + "x": 24, + "y": 150 + }, + "ports": [ + { + "id": "1", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "ID" + }, + "portTypeLabel": { + "text": "" + }, + "rect": { + "fill": "#FAFAFA" + } + } + }, + { + "id": "1-1", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "ID" + }, + "portTypeLabel": { + "text": "" + } + } + }, + { + "id": "1-2", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Property" + }, + "portTypeLabel": { + "text": "特点" + } + } + }, + { + "id": "1-3", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Property" + }, + "portTypeLabel": { + "text": "亲疏" + } + } + }, + { + "id": "1-4", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Property" + }, + "portTypeLabel": { + "text": "性别" + } + } + }, + { + "id": "1-5", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Property" + }, + "portTypeLabel": { + "text": "年龄" + } + } + }, + { + "id": "1-6", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Value" + }, + "portTypeLabel": { + "text": "aa->bb" + } + } + }, + { + "id": "1-7", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Value" + }, + "portTypeLabel": { + "text": "aa1->bb1" + } + }, + "tools": [{ + "name": "node-editor" + }] + }, + { + "id": "1-8", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Value" + }, + "portTypeLabel": { + "text": "aa2->bb2" + } + } + } + ] + }, + { + "id": "2", + "shape": "er-head-rect", + "label": "head", + "width": 150, + "height": 24, + "position": { + "x": 250, + "y": 210 + }, + "ports": [ + { + "id": "2-1", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Col-1" + }, + "portTypeLabel": { + "text": "STRING" + } + } + }, + { + "id": "2-2", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Col-2" + }, + "portTypeLabel": { + "text": "STRING" + } + } + }, + { + "id": "2-3", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Col-3" + }, + "portTypeLabel": { + "text": "STRING" + } + } + }, + { + "id": "2-4", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Col-4" + }, + "portTypeLabel": { + "text": "STRING" + } + } + }, + { + "id": "2-5", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Col-5" + }, + "portTypeLabel": { + "text": "STRING" + } + } + } + ] + }, + { + "id": "3", + "shape": "er-rect", + "label": "父子", + "width": 150, + "height": 24, + "position": { + "x": 480, + "y": 350 + }, + "ports": [ + { + "id": "3-1", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "起点ID" + } + } + }, + { + "id": "3-2", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "终点ID" + } + } + }, + { + "id": "3-3", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Property" + }, + "portTypeLabel": { + "text": "年龄" + } + } + }, + { + "id": "3-4", + "group": "list", + "attrs": { + "portNameLabel": { + "text": "Value" + }, + "portTypeLabel": { + "text": "ede1->nn1" + } + } + } + ] + }, + { + "id": "4", + "shape": "edge", + "source": { + "cell": "1", + "port": "1-1" + }, + "target": { + "cell": "2", + "port": "2-3" + }, + "attrs": { + "line": { + "stroke": "#A2B1C3", + "strokeWidth": 2 + } + }, + "zIndex": 0 + }, + { + "id": "5", + "shape": "edge", + "source": { + "cell": "3", + "port": "3-1" + }, + "target": { + "cell": "2", + "port": "2-4" + }, + "attrs": { + "line": { + "stroke": "#A2B1C3", + "strokeWidth": 2 + } + }, + "zIndex": 0 + } +] \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/vertex.json b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/vertex.json new file mode 100644 index 000000000..cf9d0cb9d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/data/vertex.json @@ -0,0 +1,123 @@ +[ + { + "name": "男人", + "id_strategy": "PRIMARY_KEY", + "properties": [ + { + "name": "特点", + "nullable": false + }, + { + "name": "亲疏", + "nullable": false + }, + { + "name": "性别", + "nullable": false + }, + { + "name": "姓名", + "nullable": false + }, + { + "name": "年龄", + "nullable": false + } + ], + "primary_keys": [ + "姓名" + ], + "property_indexes": [], + "open_label_index": true, + "style": { + "icon": "", + "color": "#5C73E6", + "size": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "女人", + "id_strategy": "PRIMARY_KEY", + "properties": [ + { + "name": "特点", + "nullable": false + }, + { + "name": "亲疏", + "nullable": false + }, + { + "name": "性别", + "nullable": false + }, + { + "name": "姓名", + "nullable": false + }, + { + "name": "年龄", + "nullable": false + } + ], + "primary_keys": [ + "姓名" + ], + "property_indexes": [], + "open_label_index": true, + "style": { + "icon": "", + "color": "#5C73E6", + "size": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + }, + { + "name": "机构", + "id_strategy": "PRIMARY_KEY", + "properties": [ + { + "name": "特点", + "nullable": false + }, + { + "name": "亲疏", + "nullable": false + }, + { + "name": "姓名", + "nullable": false + } + ], + "primary_keys": [ + "姓名" + ], + "property_indexes": [], + "open_label_index": true, + "style": { + "icon": "", + "color": "#5C73E6", + "size": "NORMAL", + "display_fields": [ + "~id" + ], + "join_symbols": [ + "-" + ] + }, + "create_time": "1970-01-01 08:00:00" + } +] diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/index.js b/hugegraph-hubble/hubble-fe-new/src/components/ERView/index.js new file mode 100644 index 000000000..4b715ee2c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/index.js @@ -0,0 +1,341 @@ +import {Graph, Cell, Shape, Color} from '@antv/x6'; +import {ReactShape} from '@antv/x6-react-shape'; +import {Menu, Toolbar, Dropdown} from '@antv/x6-react-components'; +import {memo, useCallback, useEffect, useRef, useState} from 'react'; +import { + ZoomInOutlined, + ZoomOutOutlined, + RedoOutlined, + UndoOutlined, + DeleteOutlined, +} from '@ant-design/icons'; +import style from './index.module.scss'; +import testData from './data/test.json'; +import vertexData from './data/vertex.json'; +import edgeData from './data/edge.json'; +import propertyData from './data/property.json'; +import {erRectConfig, erRectHeadConfig, erPortPosition} from './config'; +import '@antv/x6-react-components/es/menu/style/index.css'; +import '@antv/x6-react-components/es/toolbar/style/index.css'; +import {EditVertexLayer, EditEdgeLayer} from './EditLayer'; +import {setCell} from './utils'; + +Graph.registerPortLayout('erPortPosition', erPortPosition); +Graph.registerNode('er-rect', erRectConfig, true); +Graph.registerNode('er-head-rect', erRectHeadConfig, true); + +const ERShapce = memo( + ({node, text}) => { + const color = Color.randomHex(); + + return ( +
+ {text} +
+ ); + }, + (prev, next) => { + return Boolean(next.node?.hasChanged('data')); + } +); + +const ERView = () => { + const container = useRef(null); + const graph = useRef(null); + const [vertexVisible, setVertexVisible] = useState(false); + const [edgeVisible, setEdgeVisible] = useState(false); + const [data, setData] = useState([]); + + useEffect(() => { + graph.current = new Graph({ + container: container.current, + grid: true, + history: true, + // selecting: true, + connecting: { + allowMulti: 'withPort', + allowBlank: false, + allowLoop: false, + allowNode: false, + allowEdge: false, + snap: true, + router: { + name: 'er', + args: { + offset: 25, + direction: 'H', + }, + }, + createEdge() { + return new Shape.Edge({ + // tools: [ + // { + // name: 'button-remove', + // args: { + // distance: -40, + // }, + // }, + // ], + attrs: { + line: { + stroke: '#A2B1C3', + strokeWidth: 2, + }, + }, + }); + }, + }, + }); + + const cells = []; + testData.forEach(item => { + if (item.shape === 'edge') { + cells.push(graph.current.createEdge(item)); + } + else { + cells.push(graph.current.createNode(item)); + } + }); + graph.current.resetCells(cells); + graph.current.zoomToFit({padding: 10, maxScale: 1}); + + graph.current.on('node:add', ({e, node}) => { + e.stopPropagation(); + console.log('add', node); + // const member = createNode( + // 'Employee', + // 'New Employee', + // Math.random() < 0.5 ? male : female, + // ); + // graph.freeze(); + // graph.addCell([member, createEdge(node, member)]) + // layout(); + }); + + graph.current.on('node:delete', ({e, node}) => { + e.stopPropagation(); + console.log('delete', node); + // graph.freeze(); + // graph.removeCell(node); + // layout(); + }); + + graph.current.on('edge:mouseenter', ({cell}) => { + cell.addTools([ + { + name: 'target-arrowhead', + args: { + attrs: { + fill: 'red', + }, + }, + }, + { + name: 'button-remove', + args: { + distance: 0.7, + }, + }, + { + name: 'button', + args: { + distance: 0.5, + onClick: ({cell}) => { + console.log(cell); + }, + markup: [ + { + tagName: 'circle', + selector: 'button', + attrs: { + r: 10, + stroke: '#A2B1C3', + strokeWidth: 1, + fill: 'white', + cursor: 'pointer', + }, + }, + { + tagName: 'g', + attrs: { + transform: 'translate(-8, -9)', + cursor: 'pointer', + }, + children: [ + { + tagName: 'svg', + attrs: { + width: 16, + height: 16, + viewBox: '0 0 1024 1024', + }, + children: [ + { + tagName: 'path', + attrs: { + // eslint-disable-next-line max-len + d: 'M257.7 752c2 0 4-0.2 6-0.5L431.9 722c2-0.4 3.9-1.3 5.3-2.8l423.9-423.9c3.9-3.9 3.9-10.2 0-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2c-1.9 11.1 1.5 21.9 9.4 29.8 6.6 6.4 14.9 9.9 23.8 9.9z m67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z', + fill: '#A2B1C3', + }, + }, + ], + }, + ], + }, + // { + // tagName: 'text', + // textContent: , + // selector: 'icon', + // attrs: { + // fill: '#fe854f', + // fontSize: 10, + // textAnchor: 'middle', + // pointerEvents: 'none', + // y: '0.3em', + // }, + // }, + ], + }, + }, + ]); + }); + + graph.current.on('edge:mouseleave', ({cell}) => { + cell.removeTools(); + }); + }, []); + + const [vertexList, setVertexList] = useState([]); + const [edgeList, setEdgeList] = useState([]); + + const addVertex = useCallback(vertex => { + graph.current.addNode(graph.current.createNode(setCell(vertex))); + }, []); + + const addEdge = useCallback(edge => { + graph.current.addNode(graph.current.createNode(setCell(edge, 'edge'))); + }, []); + + const addValueMap = () => { + + }; + + const showVertex = useCallback(() => { + setVertexVisible(true); + }, []); + + const hideVertex = useCallback(() => { + setVertexVisible(false); + }, []); + + const showEdge = useCallback(() => { + setEdgeVisible(true); + }, []); + + const hideEdge = useCallback(() => { + setEdgeVisible(false); + }, []); + + const handleZoomIn = useCallback(() => { + graph.current?.zoom(0.5); + }, []); + + const handleZoomOut = useCallback(() => { + graph.current?.zoom(-0.5); + }, []); + + const handleUndo = useCallback(() => { + graph.current?.history.undo(); + }, []); + + const handleRedo = useCallback(() => { + graph.current?.history.redo(); + }, []); + + const Item = Toolbar.Item; + const Group = Toolbar.Group; + const vertexMenu = ( + + 新增顶点 + + 顶点1 + 顶点2 + + ); + + const edgeMenu = ( + + 新增边 + + 边1 + 边2 + + ); + + return ( +
+ console.log(graph.current.toJSON())}>Save}> + + } + onClick={handleZoomIn} + /> + } + onClick={handleZoomOut} + /> + + + } + onClick={handleUndo} + /> + } + onClick={handleRedo} + /> + + + } disabled tooltip="Delete (Delete)" /> + + + + + + + + + +
+ + +
+ ); +}; + +export default ERView; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/ERView/index.module.scss new file mode 100644 index 000000000..1f1c58245 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/index.module.scss @@ -0,0 +1,13 @@ +.content { + flex: 1; + height: 540px; + margin-left: 8px; + margin-right: 8px; + box-shadow: 0 0 10px 1px #e9e9e9; +} + +.main { + text-align: center; + margin-top: 20px; + border: 1px solid #e9e9e9; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ERView/utils.js b/hugegraph-hubble/hubble-fe-new/src/components/ERView/utils.js new file mode 100644 index 000000000..af4a750b1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ERView/utils.js @@ -0,0 +1,99 @@ +const setPropertyRow = item => { + return {...item, attr: {...item.attr, rect: {fill: '#FAFAFA'}}}; +}; + +const setValueRow = item => { + return {...item, attr: {...item.attr, rect: {fill: '#ACACAC'}}}; +}; + +const setCell = (cell, type) => { + const idList = []; + + if (type === 'edge') { + idList.push( + { + id: `${cell.name}-source`, + group: 'list', + attrs: { + portNameLabel: { + text: '起点ID', + }, + portTypeLabel: { + text: '', + }, + rect: { + fill: '#FAFAFA', + }, + }, + } + ); + + idList.push( + { + id: `${cell.name}-target`, + group: 'list', + attrs: { + portNameLabel: { + text: '终点ID', + }, + portTypeLabel: { + text: '', + }, + rect: { + fill: '#FAFAFA', + }, + }, + } + ); + } + else { + idList.push( + { + id: `${cell.name}-ID`, + group: 'list', + attrs: { + portNameLabel: { + text: 'ID', + }, + portTypeLabel: { + text: '', + }, + rect: { + fill: '#FAFAFA', + }, + }, + } + ); + } + + const propertyList = cell.properties.map(item => ({ + id: `${cell.name}-${item.name}`, + group: 'list', + attrs: { + portNameLabel: { + text: 'Property', + }, + portTypeLabel: { + text: item.name, + }, + }, + })); + + return { + id: cell.name, + shape: 'er-rect', + label: cell.name, + width: 150, + height: 24, + position: { + x: 4, + y: 150, + }, + ports: [ + ...idList, + ...propertyList, + ], + }; +}; + +export {setPropertyRow, setValueRow, setCell}; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.js b/hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.js new file mode 100644 index 000000000..240ed7ec3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.js @@ -0,0 +1,52 @@ +/** + * @file 折叠组件 + * @author + */ + +import React, {useState, useCallback} from 'react'; +import Highlighter from 'react-highlight-words'; + +import {UpOutlined, DownOutlined} from '@ant-design/icons'; +import c from './index.module.scss'; + +const ExecutionContent = ({content, highlightText}) => { + + const [isExpand, switchExpand] = useState(false); + + const onToggleCollapse = useCallback(() => { + switchExpand(prev => !prev); + }, []); + + const icon = isExpand ? : ; + const contentElement = isExpand ? ( + <> + + + ) : ( + <> + + + ); + + return ( +
+ {icon} + {contentElement} +
+ ); +}; + +export default ExecutionContent; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.module.scss new file mode 100644 index 000000000..3dd2ae678 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ExecutionContent/index.module.scss @@ -0,0 +1,4 @@ +.highlight { + color: #1890ff; + background-color: #fff; +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/GraphinView/index.js b/hugegraph-hubble/hubble-fe-new/src/components/GraphinView/index.js new file mode 100644 index 000000000..4bad3c87d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/GraphinView/index.js @@ -0,0 +1,49 @@ +import {useCallback} from 'react'; +import Graphin, {Behaviors} from '@antv/graphin'; + +const GraphView = ({data, width, height, layout, style, onClick, config, behaviors}) => { + // const [graphData, setGraphData] = useState([]); + + const {DragCanvas, ZoomCanvas, DragNode, ClickSelect, Hoverable} = Behaviors; + const graphinLayout = { + type: 'graphin-force', + animation: false, + ...layout, + // type: 'preset', + }; + + const handleClickSelect = useCallback(evt => { + const {item} = evt; + const {id, type} = item._cfg; + const model = item.getModel(); + + typeof onClick === 'function' && onClick(id, type, model.data, model, item, evt); + }, [onClick]); + + return ( +
+ + + + + + + + {/* */} + +
+ ); +}; + +export default GraphView; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.js b/hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.js new file mode 100644 index 000000000..284d2c42d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.js @@ -0,0 +1,88 @@ +import React, {useEffect, useMemo, useState} from 'react'; +import * as AntIcon from '@ant-design/icons'; +import {Popover, Input} from 'antd'; +import classnames from 'classnames'; + +import {iconsMap} from '../../utils/constants'; + +import c from './index.module.scss'; + +const DEFAULT_ICON = 'UserOutlined'; + +const IconSelect = props => { + const { + value, + onChange, + disabled, + } = props; + + const [icon, setIcon] = useState(); + + useEffect( + () => { + value && setIcon(value); + }, + [value] + ); + + const handleClickIconCallbacks = useMemo( + () => { + const icons = Object.keys(iconsMap); + const callbacks = {}; + for (const item of icons) { + callbacks[item] = () => { + setIcon(item); + onChange(item); + }; + } + return callbacks; + }, + [onChange] + ); + + const renderIcons = () => { + const icons = Object.keys(iconsMap); + return icons.map(item => { + const Icon = AntIcon[item]; + const iconClassName = classnames( + c.icon, + {[c.iconSelected]: item === icon} + ); + return ( +
+ +
+ ); + }); + }; + + if (disabled) { + return ( + + ); + } + + const CurrentIcon = AntIcon[icon || DEFAULT_ICON]; + return ( + {renderIcons()}
} + > + } + /> + + ); +}; + +export default IconSelect; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.module.scss new file mode 100644 index 000000000..cb13296da --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/IconSelect/index.module.scss @@ -0,0 +1,29 @@ +.iconsWrapper { + width: 252px; + display: flex; + flex-wrap: wrap; + margin-right: -14px; + margin-bottom: -14px; + + .icon { + width: 28px; + height: 28px; + margin: 0 14px 14px 0; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + transition: all .3s; + border: 1px solid #999999; + + &:hover { + transform: scale(1.2); + } + } + + .iconSelected { + border: 1px solid #999999; + box-shadow: 0 0 5px 0 #999999; + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/components/ListButton/index.js b/hugegraph-hubble/hubble-fe-new/src/components/ListButton/index.js new file mode 100644 index 000000000..5e686a8bd --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/ListButton/index.js @@ -0,0 +1,21 @@ +import {useCallback} from 'react'; +import {Button} from 'antd'; + +const GraphspaceButton = ({data, current, onClick, children}) => { + const handleClick = useCallback(() => { + onClick(data); + }, [onClick, data]); + + return ( + + ); +}; + +export default GraphspaceButton; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js b/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js new file mode 100644 index 000000000..4a39e86f9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js @@ -0,0 +1,123 @@ +import {useState, useCallback, useEffect} from 'react'; +import {Select, List, Avatar} from 'antd'; +import * as api from '../../api'; +import {debounce} from 'lodash'; + +const UserAvatar = ({name, type, ...props}) => { + + return ( + + ); +}; + +const SelectUser = props => { + const [userList, setUserList] = useState([]); + + const handleAdmins = useCallback(val => { + if (val === '') { + setUserList([]); + return; + } + + api.auth.getUUapList({username: val}).then(res => { + if (res.status === 200) { + setUserList(res.data); + } + else { + setUserList([]); + } + }); + }, []); + + // const handleChange = useCallback(list => { + // console.log(list); + // props?.onChange(list.map(item => { + // console.log(item); + // const arr = item.split('##'); + + // return {name: arr[0], nickname: arr[1]}; + // })); + // }, [props]); + + return ( + + ); +}; + +const SelectStaffUser = props => { + const [userList, setUserList] = useState([]); + + const handleAdmins = useCallback(debounce(val => { + // _.debounce(fetchUserList.bind(val, val), 30); + if (val === '') { + setUserList([]); + return; + } + + api.auth.getUUapList({username: val}).then(res => { + if (res.status === 200) { + setUserList(res.data); + } + else { + setUserList([]); + } + }); + }, 200), []); + + return ( + + ); +}; + +export {UserAvatar, SelectStaffUser}; +export default SelectUser; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js b/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js new file mode 100644 index 000000000..df16d1319 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js @@ -0,0 +1,106 @@ +import React, {useState} from 'react'; +import {Layout, Menu} from 'antd'; +import { + HomeOutlined, + DatabaseOutlined, + AlertOutlined, + FundViewOutlined, + MenuUnfoldOutlined, + MenuFoldOutlined, +} from '@ant-design/icons'; +import {Link, useLocation} from 'react-router-dom'; +import * as user from '../../utils/user'; + +const items = () => { + const userInfo = user.getUser(); + const MY = {label: 个人中心, key: 'my'}; + const ACCOUNT = {label: 账号管理, key: 'account'}; + const RESOURCE = {label: 资源管理, key: 'resource'}; + const ROLE = {label: 角色管理, key: 'role'}; + + let systemList = [MY]; + if (userInfo.is_superadmin) { + systemList = [MY, ACCOUNT, RESOURCE, ROLE]; + } + else if (userInfo.resSpaces && userInfo.resSpaces.length > 0) { + systemList = [MY, RESOURCE, ROLE]; + } + + const menu = [ + { + label: 导航, + key: 'navigation', + icon: , + }, + { + label: '数据管理', + key: 'manage', + icon: , + children: [ + {label: 图管理, key: 'graphspace'}, + {label: 数据源管理, key: 'source'}, // TODO X fix import + {label: 数据导入, key: 'task'}, + ], + }, + { + label: '业务分析', + key: 'analysis', + icon: , + children: [ + {label: 图语言分析, key: 'gremlin'}, + {label: 图算法, key: 'algorithms'}, + {label: 任务管理, key: 'asyncTasks'}, + ], + }, + { + label: '系统管理', + key: 'system', + icon: , + children: [...systemList], + }, + ]; + + // if (userInfo.is_superadmin) { + // menu.push({ + // label: '系统管理', + // key: 'system', + // icon: , + // children: [ + // {label: 超管管理, key: 'super'}, + // {label: 账号管理, key: 'account'}, + // {label: 资源管理, key: 'resource'}, + // {label: 角色管理, key: 'role'}, + // ], + // }); + // } + + return menu; +}; + +const Sidebar = () => { + const [collapsed, setCollapsed] = useState(false); + const href = useLocation(); + const menuKey = href.pathname.split('/')[1] || 'navigation'; + + return ( + setCollapsed(value)} + theme='light' + trigger={ + collapsed ? : + } + > +
+ + ); +}; + +export default Sidebar; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.module.scss new file mode 100644 index 000000000..37156a323 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.module.scss @@ -0,0 +1,3 @@ +.trigger { + text-align: right; +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.js b/hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.js new file mode 100644 index 000000000..a384c7817 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.js @@ -0,0 +1,27 @@ +/** + * @file 图分析组件 slide组件 + * @author + */ + +import React from 'react'; +import {Slider} from 'antd'; +import c from './index.module.scss'; + +const SliderComponent = props => { + const {min, max, step, value, onChange} = props; + + return ( +
+ + {value || 0} +
+ ); +}; + +export default SliderComponent; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.module.scss new file mode 100644 index 000000000..db24ababc --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/SlideComponent/index.module.scss @@ -0,0 +1,22 @@ +.layoutSlider { + display: flex; + align-items: center; + + :global(.ant-slider-horizontal) { + width: 90%; + } + + :global(.ant-slider-handle) { + border: solid 2px #1990ff; + }; + + :global(.ant-slider-track) { + background-color: #1990ff; + + &:hover { + border: solid 2px #1990ff; + } + } +} + + diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js b/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js new file mode 100644 index 000000000..340b9f9a9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js @@ -0,0 +1,49 @@ +import {useCallback} from 'react'; +import style from './index.module.scss'; + +const StatusField = ({status}) => { + const lower = status ? status.toLowerCase() : 'undefined'; + const config = { + new: '新建', + running: '执行中', + success: '完成', + cancelling: '停止', + cancelled: '停止', + failed: '失败', + undefined: '未知', + }; + + return ( + + {config[lower] ? config[lower] : status} + + ); +}; + +const StatusA = ({onClick, disable, children}) => { + + return ( +
+ {children} + + ); +}; + +const StatusText = ({onClick, data, disable, children}) => { + const handleClick = useCallback(() => { + onClick(data); + }, [onClick, data]); + + return ( + disable ? ( + {children} + ) : ( + {children} + ) + ); +}; + +export {StatusField, StatusA, StatusText}; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Status/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/Status/index.module.scss new file mode 100644 index 000000000..aca124787 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/Status/index.module.scss @@ -0,0 +1,26 @@ +.state { + border-radius: 10px; + padding: 2px 10px; + color: #2f54eb; + background-color: #d6e4ff; + font-size: 10px; + + &.new, &.cancelling, &.cancelled { + color: #ad6800; + background-color: #fff1b8; + } + + &.failed { + color: #cf1322; + background-color: #ffccc7; + } + + &.success { + color: #3f6600; + background-color: #d9f7be; + } +} + +.disable, a.disable:hover { + color: #8c8c8c; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.js b/hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.js new file mode 100644 index 000000000..6278e9fdb --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.js @@ -0,0 +1,11 @@ +import style from './index.module.scss'; + +const TableHeader = ({children}) => { + return ( +
+ {children} +
+ ); +}; + +export default TableHeader; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.module.scss new file mode 100644 index 000000000..2711d1487 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/TableHeader/index.module.scss @@ -0,0 +1,3 @@ +.header { + margin: 6px 0 16px; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js new file mode 100644 index 000000000..68d9ae884 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js @@ -0,0 +1,53 @@ +import {Layout, Space, Avatar, Dropdown, Menu, message, Modal} from 'antd'; +import {UserOutlined} from '@ant-design/icons'; +import style from './index.module.scss'; +import Logo from '../../assets/logo.png'; +import {useNavigate, useLocation} from 'react-router-dom'; +import * as api from '../../api/index'; +import * as user from '../../utils/user'; + +const Topbar = () => { + const userInfo = user.getUser(); + const navigate = useNavigate(); + const location = useLocation(); + + if (!userInfo || !userInfo.id) { + sessionStorage.setItem('redirect', `${location.pathname}${location.search}`); + window.location.href = '/login'; + } + + const logout = () => { + + api.auth.logout().then(res => { + if (res.status === 200) { + sessionStorage.removeItem('redirect'); + user.clearUser(); + message.success('退出成功'); + navigate('/login'); + } + }); + }; + + const confirm = () => { + Modal.confirm({ + title: '确定退出吗?', + okText: '确定', + cancelText: '取消', + onOk: logout, + }); + }; + + return ( + +
+ 退出登录}]} />}> + + } /> + {userInfo?.user_nickname ?? ''} + + +
+ ); +}; + +export default Topbar; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss new file mode 100644 index 000000000..f7baa8914 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss @@ -0,0 +1,27 @@ +div.nav { + background-color: #121212; + :global(.one-ui-pro-nav-profile) { + span, svg { + color: #fff; + } + + &:hover { + span, svg { + color: #0066ff; + } + } + } +} + +.logo { + float: left; + width: 120px; + height: 31px; +} + +.right { + display: flex; + float: right; + color: #fff; + cursor: pointer; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomEdge.js b/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomEdge.js new file mode 100644 index 000000000..795adff59 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomEdge.js @@ -0,0 +1,50 @@ +/** + * @file 自定义边 + * @author + */ + +import G6 from '@antv/g6'; +import {useEffect} from 'react'; + +const options = { + afterDraw(cfg, group) { + const shape = group.get('children')[0]; + const startPoint = shape.getPoint(0); + const circle = group.addShape('circle', { + attrs: { + x: startPoint.x, + y: startPoint.y, + fill: cfg.style.stroke, + r: 3, + }, + name: 'circle-shape', + }); + circle.animate( + ratio => { + const tmpPoint = shape.getPoint(ratio); + return { + x: tmpPoint.x, + y: tmpPoint.y, + }; + }, + { + repeat: true, // Whether executes the animation repeatly + duration: 3000, // the duration for executing once + } + ); + }, + update: undefined, +}; + +const useCustomEdge = () => { + useEffect( + () => { + G6.registerEdge('runningLine', options, 'line'); + G6.registerEdge('runningQuadratic', options, 'quadratic'); + G6.registerEdge('runningLoop', options, 'loop'); + }, + [] + ); +}; + +export default useCustomEdge; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomGrid.js b/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomGrid.js new file mode 100644 index 000000000..1b596f70e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomGrid.js @@ -0,0 +1,285 @@ +/** + * @file 自定义网格布局 + * @author + */ + +import _ from 'lodash'; +import G6 from '@antv/g6'; +import {useEffect} from 'react'; + +const options = { + small(val) { + const self = this; + let res; + const rows = self.rows; + const cols = self.cols; + if (val == null) { + res = Math.min(rows, cols); + } + else { + const min = Math.min(rows, cols); + if (min === self.rows) { + self.rows = val; + } + else { + self.cols = val; + } + } + return res; + }, + + large(val) { + const self = this; + let res; + const rows = self.rows; + const cols = self.cols; + if (val == null) { + res = Math.max(rows, cols); + } + else { + const max = Math.max(rows, cols); + if (max === self.rows) { + self.rows = val; + } + else { + self.cols = val; + } + } + return res; + }, + + used(row, col) { + const self = this; + return self.cellUsed[`c-${row}-${col}`] || false; + }, + + use(row, col) { + const self = this; + self.cellUsed[`c-${row}-${col}`] = true; + }, + + // 依次排完一行后,再往下排 ,固定列数 + moveToNextCell() { + const self = this; + + const cols = self.cols || 5; + self.col++; + if (self.col >= cols) { + self.col = 0; + self.row++; + } + + }, + + // 依次排完一列后,再往右排,固定行数 + moveToNextRow() { + const self = this; + const rows = self.rows || 5; + self.row++; + if (self.row >= rows) { + self.row = 0; + self.col++; + } + }, + + getPos(node) { + const self = this; + const begin = [0, 0]; + const cellWidth = self.cellWidth; + const cellHeight = self.cellHeight; + let x; + let y; + + const rcPos = self.id2manPos[node.id]; + if (rcPos) { + x = rcPos.col * cellWidth + cellWidth / 2 + begin[0]; + y = rcPos.row * cellHeight + cellHeight / 2 + begin[1]; + } + else { + + while (self.used(self.row, self.col)) { + if (self.cols > self.rows) { + self.moveToNextCell(); + } + else { + self.moveToNextRow(); + } + } + + x = self.col * cellWidth + cellWidth / 2 + begin[0]; + y = self.row * cellHeight + cellHeight / 2 + begin[1]; + self.use(self.row, self.col); + if (self.cols > self.rows) { + self.moveToNextCell(); + } + else { + self.moveToNextRow(); + } + } + node.x = x; + node.y = y; + }, + + /** + * 执行布局 + */ + execute() { + const self = this; + + const nodes = self.nodes; + const n = nodes.length; + const center = self.center; + const preventOverlap = true; + if (n === 0) { + return; + } + if (n === 1) { + nodes[0].x = center[0]; + nodes[0].y = center[1]; + return; + } + + const edges = self.edges; + const layoutNodes = []; + nodes.forEach(node => { + layoutNodes.push(node); + }); + const nodeIdxMap = {}; + layoutNodes.forEach((node, i) => { + nodeIdxMap[node.id] = i; + }); + // .......其他排序 + // 排序 + layoutNodes.sort((n1, n2) => n2 - n1); + + if (!self.width && typeof window !== 'undefined') { + self.width = window.innerWidth; + } + if (!self.height && typeof window !== 'undefined') { + self.height = window.innerHeight; + } + + const oRows = self.rows; + const oCols = self.cols != null ? self.cols : self.columns; + self.cells = n; + + // if rows or columns were set in self, use those values + if (oRows != null && oCols != null) { + self.rows = oRows; + self.cols = oCols; + } + else if (oRows != null && oCols == null) { + self.rows = oRows; + self.cols = Math.ceil(self.cells / self.rows); + } + else if (oRows == null && oCols != null) { + self.cols = oCols; + self.rows = Math.ceil(self.cells / self.cols); + } + else { + self.splits = Math.sqrt((self.cells * self.height) / self.width); + self.rows = Math.round(self.splits); + self.cols = Math.round((self.width / self.height) * self.splits); + } + + self.cellWidth = self.width / self.cols; + self.cellHeight = self.height / self.rows; + + if (self.condense) { + self.cellWidth = 0; + self.cellHeight = 0; + } + + if (preventOverlap) { + layoutNodes.forEach(node => { + if (!node.x || !node.y) { + node.x = 0; + node.y = 0; + } + + let nodew; + let nodeh; + if (_.isArray(node.size)) { + nodew = node.size[0]; + nodeh = node.size[1]; + } + else if (_.isNumber(node.size)) { + nodew = node.size; + nodeh = node.size; + } + if (nodew === undefined || nodeh === undefined) { + if (_.isArray(self.nodeSize)) { + nodew = self.nodeSize[0]; + nodeh = self.nodeSize[1]; + } + else if (_.isNumber(self.nodeSize)) { + nodew = self.nodeSize; + nodeh = self.nodeSize; + } + else { + nodew = 30; + nodeh = 30; + } + } + + const p = 30; + + const w = nodew + p; + const h = nodeh + p; + + self.cellWidth = Math.max(self.cellWidth, w); + self.cellHeight = Math.max(self.cellHeight, h); + }); + } + + self.cellUsed = {}; // e.g. 'c-0-2' => true + + self.row = 0; + self.col = 0; + + self.id2manPos = {}; + for (let i = 0; i < layoutNodes.length; i++) { + const node = layoutNodes[i]; + let rcPos; + if (self.position) { + rcPos = self.position(node); + } + + if (rcPos && (rcPos.row !== undefined || rcPos.col !== undefined)) { + const pos = { + row: rcPos.row, + col: rcPos.col, + }; + + if (pos.col === undefined) { + pos.col = 0; + while (self.used(pos.row, pos.col)) { + pos.col++; + } + } + else if (pos.row === undefined) { + pos.row = 0; + + while (self.used(pos.row, pos.col)) { + pos.row++; + } + } + + self.id2manPos[node.id] = pos; + self.use(pos.row, pos.col); + } + self.getPos(node); + } + }, +}; + +const useCustomGrid = () => { + useEffect( + () => { + G6.registerLayout('customGrid', options); + }, + [] + ); +}; + +export default useCustomGrid; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomNode.js b/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomNode.js new file mode 100644 index 000000000..71c057f95 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/customHook/useCustomNode.js @@ -0,0 +1,159 @@ +/** + * @file 自定义节点 + * @author + */ + +import icons from '../utils/graph'; +import G6 from '@antv/g6'; +import {useEffect} from 'react'; + +const getBadgePosition = (size, type) => { + let badgeX = 0; + let badgeY = 0; + if (type === 'circle') { + const r = size / 2; + badgeX = r * Math.cos((Math.PI * 7) / 4); + badgeY = -r * Math.sin((Math.PI * 7) / 4); + } + else if (type === 'diamond') { + const r = size / 2; + badgeX = r / 2; + badgeY = r / 2; + } + else if (type === 'triangle') { + const r = size; + badgeX = r * Math.cos((Math.PI) / 6); + badgeY = r - 5; + } + else if (type === 'star') { + const r = size / 2; + badgeX = r; + badgeY = 1.39 * r; + } + else if (type === 'ellipse') { + badgeX = size[0] / 4; + badgeY = size[1] / 3; + } + return { + x: badgeX, + y: badgeY, + }; +}; + +const drawBadge = (group, size, type) => { + const [width, height] = [10, 10]; + const {x: badgeX, y: badgeY} = getBadgePosition(size, type); + if (width === height) { + const shape = { + attrs: { + r: 5, + fill: 'grey', + x: badgeX, + y: badgeY, + }, + name: 'badges-circle', + id: 'badges-circle', + }; + group.addShape('circle', shape); + } + group.addShape('text', { + attrs: { + x: badgeX, + y: badgeY, + fontFamily: 'graphin', + text: icons.pushpin, + textAlign: 'center', + textBaseline: 'middle', + fontSize: 8, + color: '#fff', + fill: '#fff', + }, + capture: false, + name: 'badges-text', + id: 'badges-text', + }); +}; + +const removeBadge = group => { + const a = group.findById('badges-circle'); + group.removeChild(a); + const b = group.findById('badges-text'); + group.removeChild(b); +}; + +const options = { + setState(name, value, item) { + if (!name) { + return; + } + const group = item.getContainer(); + const groupChildren = group?.get('children'); + if (groupChildren) { + const shape = group?.get('children')[0]; + const model = item.getModel(); + const {stateStyles = {}, size, type} = model; + const currentStateStyle = stateStyles[name] || ''; + const status = item._cfg?.states || []; + if (value) { + Object.entries(currentStateStyle).forEach( + item => { + shape.attr(item[0], item[1]); + } + ); + // 固定节点增加样式 + if (name === 'customFixed') { + // 如果有icon就不添加 + const badgeGroup = group.findById('badges-circle'); + if (badgeGroup == null) { + drawBadge(group, size, type); + } + } + } + else { + if (name === 'customFixed') { + removeBadge(group); + } + Object.entries(currentStateStyle).forEach( + item => { + const [key] = item; + shape.attr(key, model.style[key]); + } + ); + // 如果有其他状态 设置过去; + if (status.length > 0) { + status.forEach(key => { + const currentStateStyle = stateStyles[key] || {}; + Object.entries(currentStateStyle).forEach( + item => { + shape.attr(item[0], item[1]); + } + ); + if (name === 'customFixed') { + // 如果有icon就不添加 + const badgeGroup = group.findById('badges-circle'); + if (badgeGroup == null) { + drawBadge(group, size, type); + } + } + } + ); + } + } + } + }, +}; + +const useCustomNode = () => { + useEffect( + () => { + G6.registerNode('circle', options, 'circle'); + G6.registerNode('diamond', options, 'diamond'); + G6.registerNode('triangle', options, 'triangle'); + G6.registerNode('star', options, 'star'); + G6.registerNode('ellipse', options, 'ellipse'); + }, + [] + ); +}; + +export default useCustomNode; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/customHook/useDownloadJson.js b/hugegraph-hubble/hubble-fe-new/src/customHook/useDownloadJson.js new file mode 100644 index 000000000..48a14e787 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/customHook/useDownloadJson.js @@ -0,0 +1,24 @@ +/** + * @file 下载Json数据 + * @author + */ + +const useDownloadJson = () => { + + const downloadJsonHandler = (fileName, data) => { + const formatedFileName = fileName.split('.').join(''); + let element = document.createElement('a'); + const processedData = JSON.stringify(data); + element.setAttribute('href', + `data:application/json;charset=utf-8,\ufeff${encodeURIComponent(processedData)}`); + element.setAttribute('download', formatedFileName); + element.style.display = 'none'; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + }; + + return {downloadJsonHandler}; +}; + +export default useDownloadJson; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/index.css b/hugegraph-hubble/hubble-fe-new/src/index.css new file mode 100644 index 000000000..f60b11d80 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/index.css @@ -0,0 +1,18 @@ +body { + margin: 0; + font-family: + PingFangSC-Regular, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + 'Roboto', + 'Oxygen', + 'Ubuntu', + 'Cantarell', + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/index.js b/hugegraph-hubble/hubble-fe-new/src/index.js new file mode 100644 index 000000000..fe912af55 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/index.js @@ -0,0 +1,24 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import {BrowserRouter} from 'react-router-dom'; +import {ConfigProvider} from 'antd'; +import 'moment/locale/zh-cn'; +import locale from 'antd/lib/locale/zh_CN'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +const root = ReactDOM.createRoot(document.getElementById('root')); + +root.render( + + + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/hugegraph-hubble/hubble-fe-new/src/layout.ant.js b/hugegraph-hubble/hubble-fe-new/src/layout.ant.js new file mode 100644 index 000000000..9f961f16f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/layout.ant.js @@ -0,0 +1,23 @@ +import {Layout} from 'antd'; +import Sidebar from './components/Sidebar/index.ant'; +import Topbar from './components/Topbar/index.ant'; +import {Outlet} from 'react-router-dom'; +import 'antd/dist/antd.css'; + +const LayoutAnt = () => { + return ( + + + + + + + + + + + + ); +}; + +export default LayoutAnt; diff --git a/hugegraph-hubble/hubble-fe-new/src/logo.svg b/hugegraph-hubble/hubble-fe-new/src/logo.svg new file mode 100644 index 000000000..9dfc1c058 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/Context/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/Context/index.js new file mode 100644 index 000000000..f8247a47b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/Context/index.js @@ -0,0 +1,19 @@ +/** + * @file 图分析部分Context + * @author gouzixing@ + */ + + +import React from 'react'; + +const defaultContext = { + graphSpace: null, + graph: null, + graphLoadTime: null, + graphStatus: null, + isVermeer: false, +}; + +const GraphAnalysisContext = React.createContext(defaultContext); + +export default GraphAnalysisContext; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/GraphAnalysis/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/GraphAnalysis/index.js new file mode 100644 index 000000000..7e4e2d65b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/GraphAnalysis/index.js @@ -0,0 +1,131 @@ +import React, {useState, useCallback, useEffect} from 'react'; +import {PageHeader, message} from 'antd'; +import AnalysisHome from '../analysis/Home'; +import AlgorithmHome from '../algorithm/Home'; +import AsyncTaskHome from '../asyncTasks/Home'; +import GraphAnalysisContext from '../Context'; +import TopBar from '../component/TopBar'; +import {GRAPH_ANALYSIS_MODULE} from '../../utils/constants'; +import _ from 'lodash'; +import * as api from '../../api'; + +const {GREMLIN, ALGORITHMS, ASYNCTASKS} = GRAPH_ANALYSIS_MODULE; + +const pageHeaderName = { + [GREMLIN]: '图语言分析', + [ALGORITHMS]: '图算法', + [ASYNCTASKS]: '任务管理', +}; + +const GraphAnalysisHome = props => { + const {moduleName} = props; + + const [currentOlapMode, setCurrentOlapMode] = useState(false); + const [isOlapModeLoading, setOlapModeLoading] = useState(false); + const [context, setContext] = useState( + { + graphSpace: null, + graph: null, + graphLoadTime: null, + graphStatus: null, + isVermeer: false, + } + ); + + const renderModule = () => { + switch (moduleName) { + case GREMLIN: + return ; + case ALGORITHMS: + return ; + case ASYNCTASKS: + return ; + default: + break; + } + }; + + const onOlapModeChange = useCallback( + async open => { + const {graphSpace, graph} = context; + setOlapModeLoading(true); + const response = await api.analysis.switchOlapMode(graphSpace, graph, open ? 0 : 1); + if (response.status === 200) { + setCurrentOlapMode(open); + } + setOlapModeLoading(false); + }, + [context] + ); + + const getCurrentOlapMode = useCallback( + async (graphSpace, graph) => { + setOlapModeLoading(true); + const response = await api.analysis.getOlapMode(graphSpace, graph); + const {status, data} = response; + if (status === 200) { + const {status: currentOlapStatus} = data; + setCurrentOlapMode(currentOlapStatus === '0'); + } + setOlapModeLoading(false); + }, + [] + ); + + const onGraphInfoChange = useCallback( + (graphSpace, graph) => { + const {name: currentGraph, last_load_time, status} = graph; + if (graphSpace && !_.isEmpty(graph)) { + getCurrentOlapMode(graphSpace, currentGraph); + } + setContext(context => ({ + ...context, + graphSpace, + graph: currentGraph, + graphLoadTime: last_load_time, + graphStatus: status, + })); + }, + [getCurrentOlapMode] + ); + + useEffect( + () => { + (async () => { + const response = await api.auth.getVermeer(); + const {status, data, message: errMsg} = response || {}; + const {enable} = data || {}; + if (status === 200) { + setContext(context => ( + { + ...context, + isVermeer: enable || false, + } + )); + } + else { + !errMsg && message.error('获取vermeer状态失败'); + } + })(); + }, + [] + ); + + return ( + + + + + {renderModule()} + + ); +}; + +export default GraphAnalysisHome; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js new file mode 100644 index 000000000..1a4a89d62 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js @@ -0,0 +1,36 @@ +/** + * @file 图算法 搜索 + * @author + */ + +import React, {useMemo} from 'react'; +import {Input} from 'antd'; +import _ from 'lodash'; +import c from './index.module.scss'; + +const AlgorithmSearch = props => { + + const {onSearch} = props; + + const deboucedOnChange = useMemo( + () => { + return _.debounce(e => { + const {value} = e.target; + onSearch(value); + }, 200); + }, + [onSearch] + ); + + return ( +
+ +
+ ); +}; + +export default AlgorithmSearch; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.module.scss new file mode 100644 index 000000000..e4949ebe5 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.module.scss @@ -0,0 +1,9 @@ +.algorithmSearch{ + :global(.ant-input-affix-wrapper){ + width: 250px; + height: 40px; + border: 1px solid #E7E8E9; + margin: -1px 0 0 -1px; + padding: 4px 10px; + } +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphMenuBar/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphMenuBar/index.js new file mode 100644 index 000000000..4d7035272 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphMenuBar/index.js @@ -0,0 +1,170 @@ +/** + * @file GraphMenuBar(图算法) + * @author + */ + +import React, {useCallback} from 'react'; +import MenuBar from '../../../component/MenuBar'; +import ImportData from '../../../component/ImportData'; +import ExportData from '../../../component/ExportData'; +import StyleConfig from '../../../component/styleConfig/Home'; +import FilterHome from '../../../component/filter/Home'; +import LayoutConfig from '../../../component/LayoutConfig'; +import SettingConfig from '../../../component/SettingConfig'; +import NewConfig from '../../../component/NewConfig'; +import Statistics from '../../../component/Statistics'; +import RenderModeSwitcher from '../../../component/GraphRenderModeSwitcher'; +import {PANEL_TYPE, GRAPH_RENDER_MODE, MENUBAR_TOOLTIPS_2D, MENUBAR_TOOLTIPS_3D} from '../../../../utils/constants'; +import {formatToDownloadData} from '../../../../utils/formatGraphResultData'; +import useDownloadJson from '../../../../customHook/useDownloadJson'; + +const {LAYOUT, SETTING, STATISTICS} = PANEL_TYPE; +const {CANVAS2D} = GRAPH_RENDER_MODE; + +const GraphMenuBar = props => { + const { + styleConfigData, + graphData, + handleImportData, + handleExportPng, + handleGraphStyleChange, + handleFilterChange, + handleTogglePanel, + handleClickNewAddNode, + handleClickNewAddEdge, + handleSwitchRenderMode, + refreshExcuteCount, + showCanvasInfo, + graphRenderMode, + } = props; + + const {downloadJsonHandler} = useDownloadJson(); + + const isCanvas2D = graphRenderMode === CANVAS2D; + const buttonEnableForCanvas2D = showCanvasInfo && isCanvas2D; + const buttonEnableForImport = !showCanvasInfo && isCanvas2D; + + const handleExportJson = useCallback( + fileName => { + downloadJsonHandler(fileName, formatToDownloadData(graphData)); + }, + [downloadJsonHandler, graphData] + ); + + const menubarContent = [ + { + key: 1, + content: ( + + ), + }, + { + key: 2, + content: ( + ), + }, + { + key: 3, + content: ( + ), + }, + { + key: 4, + content: ( + + ), + }, + { + key: 5, + content: ( + { + handleTogglePanel(LAYOUT); + }} + tooltip={isCanvas2D ? MENUBAR_TOOLTIPS_2D.LAYOUT : MENUBAR_TOOLTIPS_3D.LAYOUT} + />), + }, + { + key: 6, + content: ( + { + handleTogglePanel(SETTING); + }} + tooltip={isCanvas2D ? MENUBAR_TOOLTIPS_2D.SETTING : MENUBAR_TOOLTIPS_3D.SETTING} + />), + }, + { + key: '7', + content: ( + ), + }, + { + key: 8, + content: ( + { + handleTogglePanel(STATISTICS); + }} + tooltip={isCanvas2D ? MENUBAR_TOOLTIPS_2D.STATISTICS : MENUBAR_TOOLTIPS_3D.STATISTICS} + />), + }, + // { + // key: 8, + // content: ( + // { + // handleTogglePanel(STATISTICS); + // }} + // tooltip={isCanvas2D ? MENUBAR_TOOLTIPS_2D.STATISTICS : MENUBAR_TOOLTIPS_3D.STATISTICS} + // />), + // }, + ]; + + const menubarExtras = [{ + key: 1, + content: ( + + ), + }]; + + return ( + + ); +}; + +export default GraphMenuBar; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphToolBar/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphToolBar/index.js new file mode 100644 index 000000000..dc11e391c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/GraphToolBar/index.js @@ -0,0 +1,54 @@ +/** + * @file GraphToolBar + * @author + */ + +import React, {useState, useCallback} from 'react'; +import ToolBar from '../../../component/ToolBar'; +import ZeroDegreeNodeSearch from '../../../component/ZeroDegreeNode'; +import RedoUndo from '../../../component/RedoUndo'; +import FitCenter from '../../../component/FitCenter'; +import ZoomGraph from '../../../component/ZoomGraph'; +import ClearGraph from '../../../component/ClearGraph'; +import FullScreen from '../../../component/FullScreen'; +import RefreshGraph from '../../../component/RefreshGraph'; +import FixNode from '../../../component/FixNode'; +import {PANEL_TYPE} from '../../../../utils/constants'; + +const {CLOSED} = PANEL_TYPE; + +const GraphToolBar = props => { + const { + handleRedoUndoChange, + handleClearGraph, + panelType, + updatePanelType, + } = props; + + const [isFullScreen, setFullScreen] = useState(false); + + const handleChangeFullScreen = useCallback( + () => { + setFullScreen(pre => !pre); + updatePanelType(CLOSED); + }, + [updatePanelType] + ); + + const toolBarExtras = [ + {key: '1', content: ()}, + {key: '2', content: ()}, + {key: '3', content: ()}, + {key: '45', content: ()}, + {key: '6', content: ()}, + {key: '7', content: ()}, + {key: '89', content: ()}, + {key: '10', content: ()}, + ]; + + return ( + + ); +}; + +export default GraphToolBar; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.js new file mode 100644 index 000000000..a46c24793 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.js @@ -0,0 +1,521 @@ +/** + * @file 图分析画布 Home + * @author + */ +import React, {useCallback, useEffect, useState, useContext, useMemo, useRef} from 'react'; +import GraphAnalysisContext from '../../../Context'; +import Graph from '../../../component/Graph'; +import Legend from '../../../component/Legend'; +import MiniMap from '../../../component/MiniMap'; +import GraphMenuBar from '../GraphMenuBar'; +import Tooltip from '../../../component/Tooltip'; +import GraphToolBar from '../GraphToolBar'; +import Menu from '../../../component/Menu'; +import NumberCard from '../../../component/NumberCard'; +import EditElement from '../../../component/EditElement'; +import Search from '../../../component/Search'; +import SettingConfigPanel from '../../../component/SettingConfigPanel'; +import LayoutConfigPanel from '../../../component/layoutConfigPanel/Home'; +import PanelControlButton from '../../../component/ClosePanelButton'; +import DynamicAddNode from '../../../component/DynamicAddNode'; +import DynamicAddEdge from '../../../component/DynamicAddEdge'; +import NeighborRankApiView from '../NeighborRankView'; +import StatisticPanel from '../../../component/StatisticsPanel/Home'; +import RankApiView from '../RankApiView'; +import JaccView from '../JaccView'; +import GraphStatusView from '../../../component/GraphStatusView'; +import TaskNavigateView from '../../../component/TaskNavigateView'; +import Canvas3D from '../../../component/Canvas3D'; +import {filterData} from '../../../../utils/filter'; +import {formatToGraphData, formatToOptionedGraphData, formatToStyleData, + formatToDownloadData, updateGraphDataStyle, formatToLegendData} from '../../../../utils/formatGraphResultData'; +import {fetchExpandInfo, handleAddGraphNode, handleAddGraphEdge, handleExpandGraph} from '../utils'; +import {mapLayoutNameToLayoutDetails} from '../../../../utils/graph'; +import {GRAPH_STATUS, ALGORITHM_NAME, PANEL_TYPE, + Algorithm_Layout, GRAPH_RENDER_MODE} from '../../../../utils/constants'; +import c from './index.module.scss'; +import _ from 'lodash'; + +const {STANDBY, LOADING, SUCCESS, FAILED, UPLOAD_FAILED} = GRAPH_STATUS; +const {JACCARD_SIMILARITY, JACCARD_SIMILARITY_POST, RANK_API, + NEIGHBOR_RANK_API, ADAMIC_ADAR, RESOURCE_ALLOCATION} = ALGORITHM_NAME; +const noneGraphAlgorithm = [JACCARD_SIMILARITY, JACCARD_SIMILARITY_POST, RANK_API, + NEIGHBOR_RANK_API, ADAMIC_ADAR, RESOURCE_ALLOCATION]; +const {CLOSED, LAYOUT, SETTING, STATISTICS} = PANEL_TYPE; +const {CANVAS2D} = GRAPH_RENDER_MODE; + +const GraphResult = props => { + const { + data = {vertexs: [], edges: []}, + metaData, + options, + asyncTaskId, + queryStatus, + queryMessage, + isQueryMode, + algorithm: algorithmName, + resetGraphStatus, + panelType, + updatePanelType, + graphNums, + propertyKeysRecords, + graphRenderMode, + onGraphRenderModeChange, + } = props; + + const graphSpaceInfo = useContext(GraphAnalysisContext); + const {edgeMeta, vertexMeta} = metaData || {}; + const [graphData, setGraphData] = useState({nodes: [], edges: []}); + const [styleConfigData, setStyleConfigData] = useState({nodes: {}, edges: {}}); + const [showAddNodeDrawer, setShowAddNodeDrawer] = useState(false); + const [showAddEdgeDrawer, setShowAddEdgeDrawer] = useState(false); + const [isClickNew, setIsClickNew] = useState(false); + const [searchVisible, setSearchVisible] = useState(false); + const [searchVertex, setSearchVertex] = useState({}); + const [addEdgeDrawerInfo, setAddEdgeDrawerInfo] = useState({}); + const [isOutEdge, setOutEdge] = useState(false); + const [showEditElement, setShowEditElement] = useState(false); + const [editElementInfo, setEditElementInfo] = useState(); + const [graph, setGraph] = useState(); + const [graphAllInfo, setGraphAllInfo] = useState(); + const excuteStyleChangeCount = useRef(0); + const {jaccardsimilarity, rankObj, rankArray} = options || {}; + const showCanvasInfo = (_.size(data.vertices) !== 0 || _.size(data.edges) !== 0) && queryStatus === SUCCESS; + const layoutInfo = useMemo( + () => mapLayoutNameToLayoutDetails({layout: Algorithm_Layout[algorithmName], startId: options?.startId}), + [algorithmName, options?.startId] + ); + + const onGraphRender = useCallback(graph => { + setGraph(graph); + }, []); + + useEffect(() => { + setGraphAllInfo(graphNums); + }, [graphNums]); + + useEffect( + () => { + const rawGraphData = formatToGraphData(data, metaData, {}); + const finalGraphData = formatToOptionedGraphData(rawGraphData, options, algorithmName); + const styleConfigData = formatToStyleData(rawGraphData); + setGraphData(finalGraphData); + setStyleConfigData(styleConfigData); + }, + [algorithmName, data, metaData, options] + ); + + const handleUpdateStatus = useCallback( + (status, message, result) => { + resetGraphStatus && resetGraphStatus(status, message, result); + }, + [resetGraphStatus] + ); + + const handleExportPng = useCallback( + fileName => { + graph.downloadFullImage(fileName, 'image/png', {backgroundColor: '#FFF', padding: 30}); + }, + [graph] + ); + + const handleGraphStyleChange = useCallback( + styleConfigData => { + try { + const styledData = updateGraphDataStyle(graphData, styleConfigData); + const newGraphData = formatToOptionedGraphData(styledData, options, algorithmName); + graph.changeData(_.cloneDeep(newGraphData), true); + graph.getNodes().forEach(item => { + graph.refreshItem(item); + if (item.hasLocked()) { + graph.setItemState(item, 'customFixed', true); + } + }); + setGraphData({...styledData}); + setStyleConfigData(styleConfigData); + } + catch (err) { + if (excuteStyleChangeCount.current > 2) { + throw new Error(err); + } + else { + excuteStyleChangeCount.current++; + handleGraphStyleChange(styleConfigData); + } + } + }, + [algorithmName, graph, graphData, options] + ); + + const handleRefreshExcuteCount = useCallback(() => { + excuteStyleChangeCount.current = 0; + }, []); + + const handleFilterChange = useCallback( + values => { + const {filter} = values; + const newData = filterData(props.data, filter.rules, filter.logic); + const newRawGraphData = formatToGraphData(newData || {}, metaData, styleConfigData); + const newGraphData = formatToOptionedGraphData(newRawGraphData, options, algorithmName); + graph.changeData(newGraphData, true); + graph.refresh(); + setGraphData(newGraphData); + setStyleConfigData(formatToStyleData(newRawGraphData)); + }, + [algorithmName, graph, metaData, options, props.data, styleConfigData] + ); + + const handleTogglePanel = useCallback( + type => { + if (panelType === type) { + updatePanelType(CLOSED); + } + else { + updatePanelType(type); + } + }, [panelType, updatePanelType] + ); + + const handleLayoutChange = useCallback( + layout => { + graph.destroyLayout(); + graph.updateLayout(layout, 'center', undefined, false); + }, + [graph] + ); + + const handleSettingChange = useCallback( + changedData => { + graph.changeData(_.cloneDeep(changedData), false); + graph.refresh(); + setGraphData({...changedData}); + }, [graph] + ); + + const handleClickNewAddNode = useCallback( + () => { + setShowAddNodeDrawer(true); + }, []); + + const handleClickNewAddEdge = useCallback( + isOut => { + setIsClickNew(true); + setShowAddEdgeDrawer(true); + setOutEdge(isOut); + }, []); + + const handleClickGraphNode = useCallback( + value => { + setShowEditElement(true); + setEditElementInfo(value.getModel()); + }, []); + + const handleExpand = useCallback( + (newData, graphInstance) => { + const newGraphData = handleExpandGraph(newData, metaData, + styleConfigData, options, algorithmName, graphInstance); + setGraphData(newGraphData); + setStyleConfigData(formatToStyleData(newGraphData)); + }, [algorithmName, metaData, options, styleConfigData]); + + const getExpandInfo = useCallback( + async (params, graphInstance) => { + const searchResultRaw = await fetchExpandInfo(params, graphInstance, graphSpaceInfo); + handleExpand(searchResultRaw, graphInstance); + }, [graphSpaceInfo, handleExpand]); + + const handleClickGraphEdge = useCallback( + value => { + const drawerInfo = value.getModel(); + setShowEditElement(true); + setEditElementInfo(drawerInfo); + }, [] + ); + + const handledbClickNode = useCallback( + (node, graphInstance) => { + const model = node.getModel(); + const params = {vertex_id: model.id, vertex_label: model.itemType}; + getExpandInfo(params, graphInstance); + }, + [getExpandInfo] + ); + + const handleAddNode = useCallback( + data => { + const newItem = handleAddGraphNode(data, metaData, styleConfigData, graph); + const {nodes, edges} = graphData; + setGraphData({edges, nodes: [...nodes, newItem]}); + setGraphAllInfo({...graphAllInfo, vertexCount: Number(graphAllInfo.vertexCount) + 1}); + }, + [graph, graphAllInfo, graphData, metaData, styleConfigData] + ); + + const handleAddEdge = useCallback( + data => { + const newGraphData = handleAddGraphEdge(data, metaData, graphData, styleConfigData, graph); + setGraphData(newGraphData); + setGraphAllInfo({...graphAllInfo, edgeCount: Number(graphAllInfo.edgeCount) + 1}); + }, + [graph, graphAllInfo, graphData, metaData, styleConfigData] + ); + + const toggleAddNodeDrawer = useCallback( + () => { + setShowAddNodeDrawer(pre => !pre); + }, [] + ); + + const toggleAddEdgeDrawer = useCallback( + () => { + setShowAddEdgeDrawer(pre => !pre); + }, [] + ); + + const handleClosePanel = useCallback( + () => { + updatePanelType(CLOSED); + }, + [updatePanelType] + ); + + const handleRedoUndoChange = useCallback( + (type, values) => { + let changedData; + if (type === 'changedata') { + changedData = values; + } + else { + changedData = graph.cfg.data; + } + setGraphData({...changedData}); + }, + [graph] + ); + + const handleClearGraph = useCallback( + () => { + resetGraphStatus && resetGraphStatus(STANDBY, undefined, {}); + updatePanelType(CLOSED); + }, + [resetGraphStatus, updatePanelType] + ); + + const handleClickAddNode = useCallback(() => { + setShowAddNodeDrawer(true); + }, []); + + const handleClickAddEdge = useCallback( + (info, isOutEdge) => { + setIsClickNew(false); + setShowAddEdgeDrawer(true); + setAddEdgeDrawerInfo(info); + setOutEdge(isOutEdge); + }, + [] + ); + + const handleClickMenuExpand = useCallback( + params => { + getExpandInfo(params, graph); + }, + [getExpandInfo, graph] + ); + + const handleSearch = useCallback( + vertex => { + setSearchVisible(true); + setSearchVertex(vertex); + }, + [] + ); + + const onCloseEditElement = useCallback( + () => { + setShowEditElement(false); + }, + [] + ); + + const onEditElementChange = useCallback( + (type, item, itemData) => { + const {id} = item.getModel(); + const updatedInfo = graphData[type].map( + item => { + if (item.id === id) { + return {...item, ...itemData}; + } + return item; + } + ); + const updatedGraphData = {...graphData, [type]: updatedInfo}; + setGraphData(updatedGraphData); + }, + [graphData] + ); + + const handleCloseSearch = useCallback( + () => { + setSearchVisible(false); + }, + [] + ); + + const handleChangeSearch = useCallback( + params => { + getExpandInfo(params, graph); + handleCloseSearch(); + }, + [getExpandInfo, graph, handleCloseSearch] + ); + const renderCanvas2D = () => ( + + + + + + + + + + + + + + + + ); + + const renderCanvas3D = () => (); + + const statusMessage = useMemo(() => ({ + [STANDBY]: '暂无数据结果', + [LOADING]: '程序运行中,请稍候...', + [FAILED]: queryMessage || '运行失败', + [UPLOAD_FAILED]: queryMessage || '导入失败', + }), [queryMessage]); + + const renderMainContent = () => { + if (queryStatus === SUCCESS) { + if (!isQueryMode) { + return ( + + ); + } + if (!showCanvasInfo && !noneGraphAlgorithm.includes(algorithmName)) { + return ; + } + switch (algorithmName) { + case JACCARD_SIMILARITY: + case ADAMIC_ADAR: + case RESOURCE_ALLOCATION: + return ; + case JACCARD_SIMILARITY_POST: + case RANK_API: + return ; + case NEIGHBOR_RANK_API: + return ; + }; + return graphRenderMode === CANVAS2D ? renderCanvas2D() : renderCanvas3D(); + } + return ; + }; + + const handleSwitchRenderMode = useCallback( + value => { + onGraphRenderModeChange(value); + updatePanelType(CLOSED); + }, + [onGraphRenderModeChange, updatePanelType] + ); + + return ( +
+ + {renderMainContent()} + +
+ ); +}; + +export default GraphResult; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.module.scss new file mode 100644 index 000000000..b7d58aaf5 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/Home/index.module.scss @@ -0,0 +1,11 @@ +.graphResult { + position: relative; + width: calc(100% - 250px); + background-color: #fff; + + .graphContainer { + display: flex; + justify-content: flex-start; + flex: 1 1 0; + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.js new file mode 100644 index 000000000..dfa60dba9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.js @@ -0,0 +1,23 @@ +/** + * @file JACCARD_SIMILARITY等算法展示 + * @author + */ + +import React from 'react'; +import JaccRankView from '../../../component/JaccRankView'; +import c from './index.module.scss'; + +const JaccView = props => { + const {jaccardsimilarity} = props; + return ( +
+ +
+ ); + +}; + +export default JaccView; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.module.scss new file mode 100644 index 000000000..0324c09aa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/JaccView/index.module.scss @@ -0,0 +1,13 @@ +.noneGraphContent{ + display: flex; + padding-top: 10%; + padding-bottom: 100px; + align-items: center; + flex-direction: column; + width: 100%; + height: calc(100vh - 40px); + border: 1px solid #E7E8E9; + margin-left: -1px; + word-break: break-all; + overflow-y: auto; +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.js new file mode 100644 index 000000000..db1ac03a0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.js @@ -0,0 +1,45 @@ +/** + * @file NeighborRankApi算法展示 + * @author + */ + +import React from 'react'; +import {colors} from '../../../../utils/constants'; +import JaccRankView from '../../../component/JaccRankView'; +import _ from 'lodash'; +import c from './index.module.scss'; + +const NeighborRankApiView = props => { + const {rankArray} = props; + const colorsNum = colors.length; + return ( +
+ {rankArray.map((item, index) => { + return ( +
+
分类{index + 1}
+ {_.isEmpty(item) ? ( +
本场景下没有第{index + 1}度邻居
+ ) : (Object.entries(item)?.map(item2 => { + const [key, value] = item2; + return ( + + ); + }) + )} +
+ ); + })} +
+ ); +}; + +export default NeighborRankApiView; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.module.scss new file mode 100644 index 000000000..53a6e7d46 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/NeighborRankView/index.module.scss @@ -0,0 +1,25 @@ +.noneGraphContent{ + display: flex; + padding-top: 10%; + padding-bottom: 100px; + align-items: center; + flex-direction: column; + width: 100%; + height: calc(100vh - 40px); + border: 1px solid #E7E8E9; + margin-left: -1px; + word-break: break-all; + overflow-y: auto; + + .noneGraphContentTitle{ + font-weight: bold; + margin-top: 20px; + } + + .emptyDesc { + display: flex; + align-items: center; + margin-top: 20px; + width: 380px + } +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.js new file mode 100644 index 000000000..2236974ec --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.js @@ -0,0 +1,45 @@ +/** + * @file RankApi算法展示 + * @author + */ + +import React from 'react'; +import {GRAPH_STATUS} from '../../../../utils/constants'; +import JaccRankView from '../../../component/JaccRankView'; +import GraphStatusView from '../../../component/GraphStatusView'; +import _ from 'lodash'; +import c from './index.module.scss'; + +const RankApiView = props => { + const {rankObj} = props; + if (_.isEmpty(rankObj)) { + return ( + + ); + } + return ( +
+ { + Object.entries(rankObj)?.map( + item => { + const [key, value] = item; + return ( + + ); + } + ) + } +
+ ); + +}; + +export default RankApiView; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.module.scss new file mode 100644 index 000000000..0324c09aa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/RankApiView/index.module.scss @@ -0,0 +1,13 @@ +.noneGraphContent{ + display: flex; + padding-top: 10%; + padding-bottom: 100px; + align-items: center; + flex-direction: column; + width: 100%; + height: calc(100vh - 40px); + border: 1px solid #E7E8E9; + margin-left: -1px; + word-break: break-all; + overflow-y: auto; +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/utils/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/utils/index.js new file mode 100644 index 000000000..e00d9a994 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/GraphResult/utils/index.js @@ -0,0 +1,116 @@ +import * as api from '../../../../api/index'; +import {message} from 'antd'; +import {formatToDownloadData, formatToGraphData, + formatToOptionedGraphData} from '../../../../utils/formatGraphResultData'; +import {processParallelEdges} from '../../../../utils/graph'; +import {clearSelectedStates} from '../../../../utils/handleGraphState'; +import _ from 'lodash'; + +const fetchExpandInfo = async (params, graphInstance, graphSpaceInfo) => { + const {graphSpace, graph} = graphSpaceInfo; + const response = await api.analysis.putExecutionQuery(graphSpace, graph, params); + if (response.status !== 200) { + message.error('展开失败'); + return; + } + const {vertices, edges} = response.data.graph_view; + if (vertices.length === 0) { + message.warning('不存在更多邻接点'); + return; + } + const tmp = {vertices: [], edges: []}; + const rawGraphData = formatToDownloadData(graphInstance.save()); + const verticesIds = rawGraphData.vertices.map(item => item.id); + const edgesIds = rawGraphData.edges.map(item => item.id); + for (let item of vertices) { + if (!verticesIds.includes(item.id)) { + tmp.vertices.push(item); + } + } + for (let item of edges) { + if (!edgesIds.includes(item.id)) { + tmp.edges.push(item); + } + } + if (tmp.vertices.length === 0) { + message.warning('不存在更多邻接点'); + return; + } + const searchResultRaw = tmp; + return searchResultRaw; +}; + +const handleAddGraphNode = (data, metaData, styleConfigData, graph) => { + const addItem = data.vertices; + const {id} = addItem[0]; + const newStyledData = formatToGraphData(data, metaData, styleConfigData); + const styledItem = newStyledData.nodes[0]; + graph.addItem('node', styledItem, false); + const {layout} = graph.cfg; + if (layout) { + graph.destroyLayout(); + graph.updateLayout(layout); + graph.refresh(); + } + clearSelectedStates(graph); + const instance = graph.findById(id); + graph.setItemState(instance, 'addActive', true); + return styledItem; +}; + +const handleAddGraphEdge = (data, metaData, graphData, styleConfigData, graph) => { + const addItem = data.edges; + const {id} = addItem[0]; + const {nodes, edges} = graphData; + const newStyledData = formatToGraphData(data, metaData, styleConfigData); + const processedEdges = processParallelEdges([...edges, newStyledData.edges[0]]); + const styledItem = _.find(processedEdges, {id: id}); + graph.addItem('edge', styledItem, false); + const newGraphData = {edges: processedEdges, nodes}; + clearSelectedStates(graph); + const instance = graph.findById(id); + graph.setItemState(instance, 'addActive', true); + return newGraphData; +}; + +const handleExpandGraph = (newData, metaData, styleConfigData, options, algorithmName, graphInstance) => { + const newRawGraphData = formatToGraphData(newData, metaData, styleConfigData); + const newGraphData = formatToOptionedGraphData(newRawGraphData, options, algorithmName); + const saveData = graphInstance.save(); + const nodes = []; + const edges = []; + const saveNodeIds = saveData.nodes.map(item => { + const {id, icon, label, labelCfg, itemType, metaConfig, properties, size, style, comboId} = item; + nodes.push({id, icon, label, labelCfg, + itemType, metaConfig, properties, size, style, legendType: itemType, comboId}); + return id; + }); + const saveEdgesIds = saveData.edges.map(item => { + const {id, label, labelCfg, itemType, loopCfg, metaConfig, properties, + source, stateStyles, style, target, type} = item; + edges.push({id, label, labelCfg, itemType, loopCfg, metaConfig, properties, + source, stateStyles, style, target, type, legendType: itemType}); + return id; + }); + newGraphData.nodes.map(item => { + if (!saveNodeIds.includes(saveData)) { + nodes.push(item); + } + }); + newGraphData.edges.map(item => { + if (!saveEdgesIds.includes(saveData)) { + edges.push(item); + } + }); + graphInstance.changeData({nodes, edges, combos: saveData?.combos}, true); + graphInstance.refresh(); + return {nodes, edges, combos: saveData?.combos}; +}; + + +export { + fetchExpandInfo, + handleAddGraphNode, + handleAddGraphEdge, + handleExpandGraph, +}; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.js new file mode 100644 index 000000000..c54de7103 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.js @@ -0,0 +1,297 @@ +/** + * @file 图算法 Home + * @author + */ + +import React, {useCallback, useState, useEffect, useContext} from 'react'; +import AlgorithmFormHome from '../algorithmsForm/Home'; +import GraphResult from '../GraphResult/Home'; +import LogsDetail from '../LogsDetail/Home'; +import GraphAnalysisContext from '../../Context'; +import {GRAPH_STATUS, PANEL_TYPE, ALGORITHM_MODE, GRAPH_RENDER_MODE} from '../../../utils/constants'; +import * as api from '../../../api'; +import _ from 'lodash'; +import c from './index.module.scss'; + +const {STANDBY} = GRAPH_STATUS; +const {CLOSED} = PANEL_TYPE; +const {OLTP, OLAP} = ALGORITHM_MODE; +const {CANVAS2D} = GRAPH_RENDER_MODE; +const defaultPageParams = {page: 1, pageSize: 10}; +const TYPE = {GREMLIN: '0', ALGORITHM: '1', CYPHER: '2'}; + +const AlgorithmHome = () => { + const {graphSpace, graph} = useContext(GraphAnalysisContext); + + const [metaData, setMetaData] = useState(); + const [propertyKeysRecords, setPropertyKeysRecords] = useState(); + const [graphNums, setGraphNums] = useState({vertexCount: -1, edgeCount: -1}); + const [algorithmMode, setAlgorithmMode] = useState(); + const [queryStatus, setQueryStatus] = useState(STANDBY); + const [queryMessage, setQueryMessage] = useState(); + const [queryResult, setQueryResult] = useState(); + const [asyncTaskResult, setAsyncTaskResult] = useState(); + const [graphOptions, setGraphOptions] = useState(); + const [panelType, setPanelType] = useState(CLOSED); + const [algorithmOnCanvas, setAlgorithmOnCanvas] = useState(); + const [pageExecute, setExecutePage] = useState(defaultPageParams.page); + const [pageFavorite, setFavoritePage] = useState(defaultPageParams.page); + const [pageSize, setPageSize] = useState(defaultPageParams.pageSize); + const [isLoading, setLoading] = useState(false); + const [favorSearch, setFavorSearch] = useState(); + const [sortMode, setSortMode] = useState(); + const [favoriteQueriesData, setFavoriteQueriesData] = useState({}); + const [executionLogsData, setExecutionLogsData] = useState({}); + const [graphRenderMode, setGraphRenderMode] = useState(CANVAS2D); + + const initQueryResult = useCallback( + () => { + setQueryStatus(STANDBY); + setQueryMessage(); + setQueryResult({}); + setPanelType(CLOSED); + }, + [] + ); + + const getMetaData = useCallback( + async () => { + let edgeMeta; + let vertexMeta; + const edgeMetaResponse = await api.manage.getMetaEdgeList(graphSpace, graph, {page_size: -1}); + if (edgeMetaResponse.status === 200) { + edgeMeta = edgeMetaResponse.data.records; + } + const vertexMetaResponse = await api.manage.getMetaVertexList(graphSpace, graph, {page_size: -1}); + if (vertexMetaResponse.status === 200) { + vertexMeta = vertexMetaResponse.data.records; + } + setMetaData({edgeMeta, vertexMeta}); + }, + [graph, graphSpace] + ); + + const getPropertykeys = useCallback( + async () => { + const response = await api.manage.getMetaPropertyList(graphSpace, graph, {page_size: -1}); + if (response.status === 200) { + setPropertyKeysRecords(response?.data?.records ?? []); + } + }, + [graph, graphSpace] + ); + + const getGraphNumsInfo = useCallback( + async () => { + const response = await api.analysis.getGraphData(graphSpace, graph); + const {status, data} = response || {}; + if (status === 200) { + const {vertexcount, edgecount} = data || {}; + setGraphNums({vertexCount: vertexcount, edgeCount: edgecount}); + } + }, + [graph, graphSpace] + ); + + const getFavoriteQueriesList = useCallback( + async () => { + const params = { + 'page_size': pageSize, + 'page_no': pageFavorite, + 'content': favorSearch, + 'time_order': sortMode, + 'type': 'ALGORITHM', + }; + setLoading(true); + const response = await api.analysis.fetchFavoriteQueries(graphSpace, graph, params); + setLoading(false); + const {status, message, data} = response || {}; + if (status !== 200 && !message) { + message.error('获取收藏记录失败'); + } + else { + setFavoriteQueriesData({records: data.records, total: data.total}); + } + }, + [favorSearch, graph, graphSpace, pageFavorite, pageSize, sortMode] + ); + + const getExecutionLogsList = useCallback( + async () => { + const params = {'page_size': pageSize, 'page_no': pageExecute, 'type': TYPE.ALGORITHM}; + setLoading(true); + const response = await api.analysis.getExecutionLogs(graphSpace, graph, params); + setLoading(false); + const {status, message, data} = response || {}; + if (status !== 200 && !message) { + message.error('获取图算法的执行记录失败'); + } + else { + setExecutionLogsData({records: data.records, total: data.total}); + } + }, + [graph, graphSpace, pageExecute, pageSize] + ); + + const onFavoriteRefresh = useCallback(() => { + getFavoriteQueriesList(); + }, [getFavoriteQueriesList]); + + useEffect( + () => { + getExecutionLogsList(); + getFavoriteQueriesList(); + }, + [getExecutionLogsList, getFavoriteQueriesList] + ); + + useEffect( + () => { + if (pageFavorite > 1 && _.isEmpty(setFavoriteQueriesData.records)) { + setFavoritePage(pageFavorite - 1); + } + }, + [favoriteQueriesData, pageFavorite, pageSize] + ); + + const resetGraphInfo = useCallback( + () => { + getMetaData(); + getPropertykeys(); + getGraphNumsInfo(); + }, + [getGraphNumsInfo, getMetaData, getPropertykeys] + ); + + const onResetPage = useCallback( + () => { + setExecutePage(defaultPageParams.page); + setFavoritePage(defaultPageParams.page); + }, [] + ); + + useEffect(() => { + if (graphSpace && graph) { + resetGraphInfo(); + } + initQueryResult(); + onResetPage(); + }, [graph, graphSpace, initQueryResult, onResetPage, resetGraphInfo]); + + + const handleUpdateCurrentAlgorithm = useCallback(value => { + setAlgorithmOnCanvas(value); + }, []); + + const handleOltpFormSubmit = useCallback( + (status, data, message, options) => { + setPanelType(CLOSED); + setGraphRenderMode(CANVAS2D); + setAlgorithmMode(OLTP); + setAsyncTaskResult(); + setQueryStatus(status); + setQueryResult(data); + setQueryMessage(message); + options && setGraphOptions(options); + getExecutionLogsList(); + }, + [getExecutionLogsList] + ); + + const handleOlapFormSubmit = useCallback( + (status, data, message) => { + setPanelType(CLOSED); + setAlgorithmMode(OLAP); + setQueryResult({}); + setQueryStatus(status); + setAsyncTaskResult(data); + setQueryMessage(message || ''); + }, + [] + ); + + const resetGraphStatus = useCallback( + (status, message, data) => { + setPanelType(CLOSED); + setAlgorithmMode(OLTP); + setAlgorithmOnCanvas(); + setGraphOptions(); + status && setQueryStatus(status); + message && setQueryMessage(message); + data && setQueryResult(data); + }, []); + + const updatePanelType = useCallback(type => { + setPanelType(type); + }, []); + + const onExecutePageChange = useCallback((page, pageSize) => { + setExecutePage(page); + setPageSize(pageSize); + }, []); + + const onFavoritePageChange = useCallback((page, pageSize) => { + setFavoritePage(page); + setPageSize(pageSize); + }, []); + + const onChangeFavorSearch = useCallback(values => { + setFavorSearch(values); + }, []); + + const onSortChange = useCallback((pagination, filters, sort) => { + setSortMode(sort.order === 'ascend' ? 'asc' : 'desc'); + }, []); + + const onGraphRenderModeChange = useCallback( + value => { + setGraphRenderMode(value); + }, + [] + ); + + return ( + <> +
+ + +
+ + + ); +}; + +export default AlgorithmHome; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.module.scss new file mode 100644 index 000000000..b1fb9c8cc --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/Home/index.module.scss @@ -0,0 +1,6 @@ +.algorithmContent { + display: flex; + flex-direction: row; + margin-top: 10px; + height: calc(100vh - 1px); +} \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.js new file mode 100644 index 000000000..74cd22a1f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.js @@ -0,0 +1,167 @@ +/** + * @file 图算法 执行记录 + * @author + */ + +import React, {useState, useCallback} from 'react'; +import {Table, Space, Tag, Input, Popconfirm} from 'antd'; +import ExecutionContent from '../../../../components/ExecutionContent'; +import c from './index.module.scss'; + +const ExecuteLog = props => { + const { + isLoading, + pageExecute, + pageSize, + onExecutePageChange, + onAddCollection, + executionLogsDataRecords, + executionLogsDataTotal, + } = props; + + const [favoriteName, setFavoriteName] = useState(); + const [disabledFavorite, setDisabledFavorite] = useState(true); + + const onFavoraiteName = useCallback( + e => { + setFavoriteName(e.target.value); + e.target.value ? setDisabledFavorite(false) : setDisabledFavorite(true); + }, []); + + const onFavoriteCard = useCallback(() => { + setFavoriteName(''); + setDisabledFavorite(true); + }, []); + + const updateAddCollection = useCallback( + content => { + onAddCollection(content, favoriteName); + }, + [favoriteName, onAddCollection] + ); + + const onAddFavorite = useCallback( + content => { + updateAddCollection(content); + }, [updateAddCollection]); + + const favoriteContent = rowData => ( + <> +
收藏语句
+ + + ); + + const typeDesc = { + GREMLIN: 'GREMLIN查询', + GREMLIN_ASYNC: 'GREMLIN任务', + ALGORITHM: '算法任务', + CYPHER: 'CYPHER查询', + }; + + const statusDesc = { + SUCCESS: '成功', + ASYNC_TASK_SUCCESS: '提交成功', + ASYNC_TASK_RUNNING: '提交运行中', + RUNNING: '运行中', + FAILED: '失败', + ASYNC_TASK_FAILED: '提交失败', + }; + + const statusColor = { + SUCCESS: 'green', + ASYNC_TASK_SUCCESS: 'green', + RUNNING: 'geekblue', + FAILED: 'volcano', + ASYNC_TASK_FAILED: 'volcano', + }; + + const executeLogColumns = [ + { + title: '时间', + dataIndex: 'create_time', + width: '20%', + }, + { + title: '执行类型', + dataIndex: 'type', + width: '15%', + render: type => typeDesc[type] || type, + }, + { + title: '执行内容', + dataIndex: 'content', + width: '30%', + render: (text, rowData, index) => { + return text.split('\n')[1] ? + :
{text}
; + }, + }, + { + title: '状态', + dataIndex: 'status', + width: '10%', + render: status => { + return ( + + + {statusDesc[status] || status} + + + ); + }, + }, + { + title: '耗时', + dataIndex: 'duration', + width: '10%', + }, + { + title: '操作', + dataIndex: 'manipulation', + width: '15%', + render: (text, rowData, index) => { + return ( +
+ onAddFavorite(rowData.content)} + okButtonProps={{disabled: disabledFavorite}} + okText="收藏" + cancelText="取消" + > + 收藏 + +
+ ); + }, + }, + ]; + + return ( + item.id} + pagination={{ + onChange: onExecutePageChange, + position: ['bottomRight'], + total: executionLogsDataTotal, + showSizeChanger: executionLogsDataTotal > 10, + current: pageExecute, + pageSize: pageSize, + }} + loading={isLoading} + /> + ); +}; + +export default ExecuteLog; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.module.scss new file mode 100644 index 000000000..37f5820a8 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/ExecuteLog/index.module.scss @@ -0,0 +1,6 @@ + +.breakWord { + cursor: pointer; + word-wrap: break-word; + word-break: break-word; +} diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.js new file mode 100644 index 000000000..0f3744a8c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.js @@ -0,0 +1,208 @@ +/** + * @file 图算法 收藏 + * @author + */ + +import React, {useState, useCallback} from 'react'; +import Highlighter from 'react-highlight-words'; +import {Table, Input, Popconfirm, Modal} from 'antd'; +import ExecutionContent from '../../../../components/ExecutionContent'; +import c from './index.module.scss'; + +const Favorite = props => { + const { + isLoading, + pageFavorite, + pageSize, + onFavoritePageChange, + onChangeFavorSearch, + onSortChange, + onEditCollection, + onDel, + favoriteQueriesDataRecords, + favoriteQueriesDataTotal, + } = props; + + const [favoriteName, setFavoriteName] = useState(); + const [searchCache, setSearchCache] = useState(''); + const [search, setSearch] = useState(''); + const [isDisabledName, setDisabledName] = useState(false); + + const changeCollection = useCallback( + rowData => { + onEditCollection(rowData, favoriteName); + }, + [favoriteName, onEditCollection] + ); + + const onSaveEditFavorite = useCallback( + rowData => { + setFavoriteName(''); + changeCollection(rowData); + }, [changeCollection]); + + const onEditFavorite = useCallback( + rowData => { + const {name} = rowData; + setFavoriteName(name); + }, []); + + const onChangeFavoraiteName = useCallback( + e => { + setFavoriteName(e.target.value); + e.target.value ? setDisabledName(false) : setDisabledName(true); + }, []); + + const onConfirm = id => { + Modal.confirm({ + title: '确认删除', + content: '是否确认删除该条收藏语句?', + okText: '确定', + cancelText: '取消', + onOk: () => onDel(id), + }); + }; + + const editFavoriteForm = ( + <> +
修改名称
+ + + ); + + const queryFavoriteColumns = [ + { + title: '时间', + dataIndex: 'create_time', + width: '25%', + sorter: true, + }, + { + title: '名称', + dataIndex: 'name', + width: '15%', + sorter: true, + render: text => { + return ( + + ); + }, + }, + { + title: '收藏语句', + dataIndex: 'content', + width: '40%', + render(text, rowData) { + return text.split('\n')[1] ? ( + + ) : ( +
+ +
+ ); + }, + }, + { + title: '操作', + dataIndex: 'manipulation', + width: '20%', + render(_, rowData, index) { + return ( +
+ onSaveEditFavorite(rowData)} + okText="保存" + okButtonProps={{disabled: isDisabledName}} + cancelText="取消" + > + onEditFavorite(rowData)} + > + 修改名称 + + + onConfirm(rowData.id)}>删除 +
+ ); + }, + }, + ]; + + const onSearchChange = useCallback( + e => { + const value = e.target.value; + setSearchCache(value); + if (!value) { + setSearch(value); + } + onChangeFavorSearch(value); + }, + [onChangeFavorSearch] + ); + + const onSearch = useCallback( + () => { + if (searchCache !== search) { + setSearch(searchCache); + } + onChangeFavorSearch(searchCache); + }, + [search, searchCache, onChangeFavorSearch] + ); + + return ( + <> +
+ +
+
item.id} + onChange={onSortChange} + pagination={{ + onChange: onFavoritePageChange, + position: ['bottomRight'], + total: favoriteQueriesDataTotal, + showSizeChanger: favoriteQueriesDataTotal > 10, + current: pageFavorite, + pageSize: pageSize, + }} + loading={isLoading} + /> + + ); +}; + +export default Favorite; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.module.scss new file mode 100644 index 000000000..bbe3d71e1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Favorite/index.module.scss @@ -0,0 +1,22 @@ + +.searchFavorite { + float: right; + margin:16px 20px; +} + +.breakWord { + cursor: pointer; + word-wrap: break-word; + word-break: break-word; +} + +.highlight { + color: #1890ff; + background-color: #fff; +} + +.searchBar { + margin-bottom: 16px; + text-align: right; +} + diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.js new file mode 100644 index 000000000..8904924a3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.js @@ -0,0 +1,159 @@ +/** + * @file 图算法表格 Home + * @author + */ + +import React, {useCallback, useContext} from 'react'; +import GraphAnalysisContext from '../../../Context'; +import {Tabs, message} from 'antd'; +import ExecuteLog from '../ExecuteLog'; +import Favorite from '../Favorite'; +import * as api from '../../../../api/index'; +import c from './index.module.scss'; + +const LogsDetail = props => { + const { + isLoading, + pageExecute, + pageFavorite, + pageSize, + onExecutePageChange, + onFavoritePageChange, + onChangeFavorSearch, + onSortChange, + onRefresh, + favoriteQueriesData, + executionLogsData, + } = props; + + const {graphSpace: currentGraphSpace, graph: currentGraph} = useContext(GraphAnalysisContext); + const {records: favoriteQueriesDataRecords, total: favoriteQueriesDataTotal} = favoriteQueriesData; + const {records: executionLogsDataRecords, total: executionLogsDataTotal} = executionLogsData; + + const addItemByName = useCallback( + (content, favoriteName) => { + const params = { + 'content': content, + 'name': favoriteName, + 'type': 'ALGORITHM', + }; + api.analysis.addFavoriate(currentGraphSpace, currentGraph, params) + .then(res => { + const {status, message: errMsg} = res; + if (status === 200) { + message.success('收藏成功'); + onRefresh(); + } + else { + !errMsg && message.error('收藏失败'); + } + }).catch(err => { + console.error(err); + }); + }, [currentGraph, currentGraphSpace, onRefresh]); + + const onAddHandler = useCallback( + (content, favoriteName) => { + addItemByName(content, favoriteName); + }, + [addItemByName] + ); + + const delItemByRowId = useCallback( + favoriteId => { + api.analysis.deleteQueryCollection(currentGraphSpace, currentGraph, favoriteId) + .then(res => { + const {status, message: errMsg} = res; + if (status === 200) { + message.success('删除成功'); + onRefresh(); + } + else { + !errMsg && message.error('删除失败'); + } + }).catch(err => { + console.error(err); + }); + }, [currentGraph, currentGraphSpace, onRefresh]); + + const onDelHandler = useCallback( + id => { + delItemByRowId(id); + }, + [delItemByRowId] + ); + + const editItemByRow = useCallback( + (rowData, favoriteName) => { + const params = { + id: rowData.id, + content: rowData.content, + name: favoriteName, + 'type': 'ALGORITHM', + }; + api.analysis.editQueryCollection(currentGraphSpace, currentGraph, params) + .then(res => { + const {status, message: errMsg} = res; + if (status === 200) { + message.success('修改成功'); + onRefresh(); + } + else { + !errMsg && message.error('修改失败'); + } + }).catch(err => { + console.error(err); + }); + }, [currentGraph, currentGraphSpace, onRefresh]); + + const onEditHandler = useCallback( + (rowData, favoriteName) => { + editItemByRow(rowData, favoriteName); + }, + [editItemByRow] + ); + + const tabItems = [ + { + label: '执行记录', + key: 'excutes', + children: ( + + ), + }, + { + label: '收藏', + key: 'favorites', + children: ( + + ), + }, + ]; + + return ( +
+ +
+ ); +}; + +export default LogsDetail; \ No newline at end of file diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.module.scss new file mode 100644 index 000000000..23e6fe8b0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/LogsDetail/Home/index.module.scss @@ -0,0 +1,28 @@ +.footerTabs { + background-color: #fff; + margin-top: 10px; + + :global { + .ant-table-wrapper { + word-break: break-all; + } + + .ant-tabs-nav { + background-color: #f0f2f5; + } + + .ant-tabs-card .ant-tabs-nav .ant-tabs-tab { + background: #f0f2f5; + border: 0; + } + + .ant-tabs-card .ant-tabs-nav .ant-tabs-tab-active { + background: #fff; + } + + .ant-tabs-content-holder{ + padding: 16px; + } + } +} + diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/AlgorithmNameHeader/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/AlgorithmNameHeader/index.js new file mode 100644 index 000000000..1001b6a09 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/AlgorithmNameHeader/index.js @@ -0,0 +1,136 @@ +/** + * @file 图分析组件 算法标题 + * @author + */ + +import React from 'react'; +import Highlighter from 'react-highlight-words'; +import {Typography, Tooltip, Button} from 'antd'; +import c from './index.module.scss'; +import classnames from 'classnames'; + +const {Text} = Typography; + +import { + QuestionCircleOutlined, + CaretRightOutlined, +} from '@ant-design/icons'; + +const AlgorithmNameHeader = props => { + const { + icon, + name, + searchValue, + description, + isRunning, + isDisabled, + handleRunning, + highlightName, + } = props; + + const iconClassName = classnames( + c.panelHeaderIcon, + {[c.panelHeaderIconHighlight]: highlightName} + + ); + + const renderAlgorithmName = name => { + let res; + if (name.includes(searchValue)) { + res = ( + + + + ); + } + else { + res = ( + + {name} + + ); + } + if (highlightName) { + res = ( + + + + ); + } + return res; + }; + + const renderRunningButton = () => { + if (!isDisabled) { + return ( + 运行} + color={'#fff'} + > + - - ) : ( - - - - )} - - - )} - - ); -}); - -export const AlgorithmQuery: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - const { algorithmAnalyzerStore } = dataAnalyzeStore; - const { t } = useTranslation(); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateShortestPathParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.shortestPathAlgorithmParams.source !== '' && - algorithmAnalyzerStore.shortestPathAlgorithmParams.target !== '' && - algorithmAnalyzerStore.shortestPathAlgorithmParams.max_depth !== ''; - - const handleChangeAlgorithm = (algorithm: string) => () => { - algorithmAnalyzerStore.changeCurrentAlgorithm(algorithm); - }; - - const handleExpandClick = () => { - algorithmAnalyzerStore.switchCollapse(!algorithmAnalyzerStore.isCollapse); - }; - - const renderForms = () => { - switch (algorithmAnalyzerStore.currentAlgorithm) { - case Algorithm.loopDetection: - return ; - case Algorithm.focusDetection: - return ; - case Algorithm.shortestPath: - return ; - case Algorithm.shortestPathAll: - return ; - case Algorithm.allPath: - return ; - case Algorithm.modelSimilarity: - return ; - case Algorithm.neighborRank: - return ; - case Algorithm.kStepNeighbor: - return ; - case Algorithm.kHop: - return ; - case Algorithm.customPath: - return ; - case Algorithm.radiographicInspection: - return ; - case Algorithm.sameNeighbor: - return ; - case Algorithm.weightedShortestPath: - return ; - case Algorithm.singleSourceWeightedShortestPath: - return ; - case Algorithm.jaccard: - return ; - case Algorithm.personalRankRecommendation: - return ; - } - }; - - useEffect(() => { - return () => { - algorithmAnalyzerStore.dispose(); - }; - }, []); - - return ( -
-
- {algorithmAnalyzerStore.currentAlgorithm === '' ? ( - {t('data-analyze.algorithm-list.title')} - ) : ( -
- go-back { - algorithmAnalyzerStore.switchCollapse(false); - algorithmAnalyzerStore.changeCurrentAlgorithm(''); - }} - /> - - {t( - `data-analyze.algorithm-list.${algorithmAnalyzerStore.currentAlgorithm}` - )} - -
- )} -
- expand-collpase -
- {algorithmAnalyzerStore.isCollapse ? null : algorithmAnalyzerStore.currentAlgorithm === - '' ? ( - <> -
- {[ - Algorithm.loopDetection, - Algorithm.focusDetection, - Algorithm.shortestPath, - Algorithm.shortestPathAll, - Algorithm.allPath - ].map((algorithm) => ( - - {t(`data-analyze.algorithm-list.${algorithm}`)} - - ))} -
-
- {[ - Algorithm.modelSimilarity, - Algorithm.neighborRank, - Algorithm.kStepNeighbor, - Algorithm.kHop, - Algorithm.customPath - ].map((algorithm) => ( - - {t(`data-analyze.algorithm-list.${algorithm}`)} - - ))} -
-
- {[ - Algorithm.radiographicInspection, - Algorithm.sameNeighbor, - Algorithm.weightedShortestPath, - Algorithm.singleSourceWeightedShortestPath, - Algorithm.jaccard - ].map((algorithm) => ( - - {t(`data-analyze.algorithm-list.${algorithm}`)} - - ))} -
-
- {[Algorithm.personalRankRecommendation].map((algorithm) => ( - - {t(`data-analyze.algorithm-list.${algorithm}`)} - - ))} -
- - ) : ( - renderForms() - )} -
- ); -}); - -export default QueryAndAlgorithmLibrary; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/AllPath.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/AllPath.tsx deleted file mode 100644 index 8695bb8cf..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/AllPath.tsx +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { GraphManagementStoreContext } from '../../../../stores'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; - -const AllPath = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateAllPathParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.allPathParams.source !== '' && - algorithmAnalyzerStore.allPathParams.target !== '' && - algorithmAnalyzerStore.allPathParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.all-path.options.source')} - -
- { - algorithmAnalyzerStore.mutateAllPathParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateAllPathParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateAllPathParams('source'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.all-path.options.label')} - -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.all-path.options.target')} - -
- { - algorithmAnalyzerStore.mutateAllPathParams( - 'target', - e.value as string - ); - - algorithmAnalyzerStore.validateAllPathParams('target'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateAllPathParams('target'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.all-path.options.max_degree')} - - -
- { - algorithmAnalyzerStore.mutateAllPathParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateAllPathParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateAllPathParams('max_degree'); - } - }} - /> -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.all-path.options.direction')} - -
- ) => { - algorithmAnalyzerStore.mutateAllPathParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t('data-analyze.algorithm-forms.all-path.options.capacity')} - -
- { - algorithmAnalyzerStore.mutateAllPathParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateAllPathParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateAllPathParams('capacity'); - } - }} - /> -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.all-path.options.max_depth')} - - -
- { - algorithmAnalyzerStore.mutateAllPathParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateAllPathParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateAllPathParams('max_depth'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.all-path.options.limit')} - -
- { - algorithmAnalyzerStore.mutateAllPathParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateAllPathParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateAllPathParams('limit'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default AllPath; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx deleted file mode 100644 index e57b2ed59..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx +++ /dev/null @@ -1,1115 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { - size, - flatten, - flattenDeep, - uniq, - isEmpty, - cloneDeep, - fromPairs -} from 'lodash-es'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { isDataTypeNumeric, calcAlgorithmFormWidth } from '../../../../utils'; - -const CustomPath = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { t } = useTranslation(); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 390 - ); - - const formWidthInStep = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 310, - 380 - ); - - const formSmallWidthInStep = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 150, - 160 - ); - - const sourceType = algorithmAnalyzerStore.customPathParams.method; - - const allowAddNewProperty = !flatten( - algorithmAnalyzerStore.customPathParams.vertexProperty - ).some((value) => value === ''); - - const addNewPropertyClassName = - allowAddNewProperty && - dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' - ? 'query-tab-content-internal-expand-manipulation-enable' - : 'query-tab-content-internal-expand-manipulation-disabled'; - - const allowAddNewRuleProperty = !flattenDeep( - algorithmAnalyzerStore.customPathParams.steps.map( - ({ properties }) => properties - ) - ).some((value) => value === ''); - - const addNewRulePropertyClassName = - allowAddNewRuleProperty && - dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' - ? 'query-tab-content-internal-expand-manipulation-enable' - : 'query-tab-content-internal-expand-manipulation-disabled'; - - const isValidSourceId = - algorithmAnalyzerStore.customPathParams.method === 'id' && - algorithmAnalyzerStore.customPathParams.source !== ''; - - const isValidProperty = - algorithmAnalyzerStore.customPathParams.method === 'property' && - !( - isEmpty(algorithmAnalyzerStore.customPathParams.vertexType) && - flatten( - algorithmAnalyzerStore.customPathParams.vertexProperty - ).every((value) => isEmpty(value)) - ) && - algorithmAnalyzerStore.customPathParams.vertexProperty.every( - ([key, value]) => (!isEmpty(key) ? !isEmpty(value) : true) - ); - - const isValidateRuleProperties = algorithmAnalyzerStore.customPathParams.steps.every( - ({ properties }) => { - if (size(properties) === 1) { - return ( - (isEmpty(properties[0][0]) && isEmpty(properties[0][1])) || - (!isEmpty(properties[0][0]) && !isEmpty(properties[0][1])) - ); - } else { - return properties.every(([, value]) => !isEmpty(value)); - } - } - ); - - const isValidRuleWeight = algorithmAnalyzerStore.customPathParams.steps.every( - ({ weight_by, default_weight }) => - algorithmAnalyzerStore.customPathParams.sort_by === 'NONE' || - (weight_by === '__CUSTOM_WEIGHT__' && default_weight !== '') || - (weight_by !== '__CUSTOM_WEIGHT__' && !isEmpty(weight_by)) - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateCustomPathParmasErrorMessage - ).every((value) => Array.isArray(value) || value === '') && - algorithmAnalyzerStore.validateCustomPathParmasErrorMessage.steps.every( - (step) => Object.values(step).every((value) => value === '') - ) && - (algorithmAnalyzerStore.customPathParams.method === 'id' - ? algorithmAnalyzerStore.customPathParams.source !== '' - : true) && - (isValidSourceId || isValidProperty) && - isValidateRuleProperties && - isValidRuleWeight; - - const isValidAddRule = algorithmAnalyzerStore.validateCustomPathParmasErrorMessage.steps.every( - (step) => Object.values(step).every((value) => value === '') - ); - - return ( -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.custom-path.options.method')} - -
- ) => { - algorithmAnalyzerStore.switchCustomPathMethod(e.target.value); - }} - > - - {t( - 'data-analyze.algorithm-forms.custom-path.radio-value.specific-id' - )} - - - {t( - 'data-analyze.algorithm-forms.custom-path.radio-value.filtered-type-property' - )} - - -
-
- - {sourceType === 'id' && ( -
-
-
- * - - {t('data-analyze.algorithm-forms.custom-path.options.source')} - -
- - { - algorithmAnalyzerStore.mutateCustomPathParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateCustomPathParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathParams('source'); - } - }} - /> -
-
- )} - - {sourceType !== 'id' && ( - <> -
-
-
- - {t( - 'data-analyze.algorithm-forms.custom-path.options.vertex-type' - )} - -
- -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.custom-path.options.vertex-property' - )} - -
- -
- {algorithmAnalyzerStore.customPathParams.vertexProperty.map( - ([key, value], propertyIndex) => { - const currentVertexType = dataAnalyzeStore.vertexTypes.find( - ({ name }) => - name === - algorithmAnalyzerStore.customPathParams.vertexType - ); - - return ( -
- -
- { - const vertexProperty = cloneDeep( - algorithmAnalyzerStore.customPathParams - .vertexProperty - ); - - vertexProperty[propertyIndex][1] = e.value; - - algorithmAnalyzerStore.mutateCustomPathParams( - 'vertexProperty', - vertexProperty - ); - - algorithmAnalyzerStore.validateCustomPathParams( - 'vertexProperty' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathParams( - 'vertexProperty' - ); - } - }} - /> -
- {size( - algorithmAnalyzerStore.customPathParams - .vertexProperty - ) > 1 && ( -
{ - algorithmAnalyzerStore.removeCustomPathVertexProperty( - propertyIndex - ); - }} - > - {t( - 'data-analyze.algorithm-forms.custom-path.delete' - )} -
- )} -
- ); - } - )} -
-
-
- {algorithmAnalyzerStore.customPathParams.vertexType === '' && - !allowAddNewProperty && - size(algorithmAnalyzerStore.customPathParams.vertexProperty) === - 1 ? ( -
- - {t( - 'data-analyze.algorithm-forms.custom-path.hint.vertex_type_or_property' - )} - -
- ) : ( -
- { - if ( - allowAddNewProperty && - dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' - ) { - algorithmAnalyzerStore.addCustomPathVertexProperty(); - } - }} - > - {t('data-analyze.algorithm-forms.custom-path.add')} - -
- )} - - )} - -
-
-
- * - - {t('data-analyze.algorithm-forms.custom-path.options.sort_by')} - -
- ) => { - algorithmAnalyzerStore.mutateCustomPathParams( - 'sort_by', - e.target.value - ); - - if (e.target.value === 'NONE') { - algorithmAnalyzerStore.customPathParams.steps.forEach( - (_, ruleIndex) => { - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'weight_by', - '', - ruleIndex - ); - - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'default_weight', - '', - ruleIndex - ); - } - ); - } - }} - > - - {t('data-analyze.algorithm-forms.custom-path.radio-value.none')} - - - {t( - 'data-analyze.algorithm-forms.custom-path.radio-value.ascend' - )} - - - {t( - 'data-analyze.algorithm-forms.custom-path.radio-value.descend' - )} - - -
-
-
-
-
- - {t('data-analyze.algorithm-forms.custom-path.options.capacity')} - -
- { - algorithmAnalyzerStore.mutateCustomPathParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateCustomPathParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathParams('capacity'); - } - }} - /> -
-
-
-
-
- - {t('data-analyze.algorithm-forms.custom-path.options.limit')} - -
- { - algorithmAnalyzerStore.mutateCustomPathParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateCustomPathParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathParams('limit'); - } - }} - /> -
-
-
- - -
-
- -
- {algorithmAnalyzerStore.customPathParams.steps.map( - ( - { - uuid, - direction, - labels, - degree, - sample, - properties, - weight_by, - default_weight - }, - ruleIndex - ) => { - return ( -
-
-
- * - - {t( - 'data-analyze.algorithm-forms.custom-path.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'direction', - e.target.value, - ruleIndex - ); - }} - > - both - out - in - - {size(algorithmAnalyzerStore.customPathParams.steps) > 1 && ( -
{ - algorithmAnalyzerStore.removeCustomPathRule(ruleIndex); - }} - > - 删除 -
- )} -
-
-
- - {t( - 'data-analyze.algorithm-forms.custom-path.options.labels' - )} - -
- -
- -
-
- - {t( - 'data-analyze.algorithm-forms.custom-path.options.properties' - )} - -
-
- <> - {properties.map(([key, value], propertyIndex) => { - return ( -
-
- -
- -
- { - const clonedRuleProperties = cloneDeep( - properties - ); - - clonedRuleProperties[propertyIndex][1] = - e.value; - - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'properties', - clonedRuleProperties, - ruleIndex - ); - }} - /> -
- - {size(properties) > 1 && ( -
{ - algorithmAnalyzerStore.removeCustomPathRuleProperty( - ruleIndex, - propertyIndex - ); - }} - > - {t( - 'data-analyze.algorithm-forms.custom-path.delete' - )} -
- )} -
- ); - })} - -
- { - if ( - allowAddNewRuleProperty && - dataAnalyzeStore.requestStatus.fetchGraphs !== - 'pending' - ) { - algorithmAnalyzerStore.addCustomPathRuleProperty( - ruleIndex - ); - } - }} - > - {t('data-analyze.algorithm-forms.custom-path.add')} - -
- -
-
- - {algorithmAnalyzerStore.customPathParams.sort_by !== 'NONE' && ( -
-
- * - - {t( - 'data-analyze.algorithm-forms.custom-path.options.weight_by' - )} - -
- -
- )} - {algorithmAnalyzerStore.customPathParams.steps[ruleIndex] - .weight_by === '__CUSTOM_WEIGHT__' && ( -
-
- -
- { - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'default_weight', - e.value as string, - ruleIndex - ); - - algorithmAnalyzerStore.validateCustomPathRules( - 'default_weight', - ruleIndex - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathRules( - 'default_weight', - ruleIndex - ); - } - }} - /> -
- )} -
-
- - {t( - 'data-analyze.algorithm-forms.custom-path.options.degree' - )} - -
- { - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'degree', - e.value as string, - ruleIndex - ); - - algorithmAnalyzerStore.validateCustomPathRules( - 'degree', - ruleIndex - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathRules( - 'degree', - ruleIndex - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.custom-path.options.sample' - )} - -
- { - algorithmAnalyzerStore.mutateCustomPathRuleParams( - 'sample', - e.value as string, - ruleIndex - ); - - algorithmAnalyzerStore.validateCustomPathRules( - 'sample', - ruleIndex - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateCustomPathRules( - 'sample', - ruleIndex - ); - } - }} - /> -
-
- ); - } - )} -
- { - if (isValidAddRule) { - algorithmAnalyzerStore.addCustomPathRule(); - } - }} - > - {t('data-analyze.algorithm-forms.custom-path.add-new-rule')} - -
-
-
- ); -}); - -export default CustomPath; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx deleted file mode 100644 index 58a37782c..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx +++ /dev/null @@ -1,423 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, createContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { GraphManagementStoreContext } from '../../../../stores'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -const FocusDetection = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateFocusDetectionParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.focusDetectionParams.source !== '' && - algorithmAnalyzerStore.focusDetectionParams.target !== '' && - algorithmAnalyzerStore.focusDetectionParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.focus-detection.options.source')} - -
- { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateFocusDetectionParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateFocusDetectionParams('source'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.focus-detection.options.label')} - -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.focus-detection.options.target')} - -
- { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'target', - e.value as string - ); - - algorithmAnalyzerStore.validateFocusDetectionParams('target'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateFocusDetectionParams('target'); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.focus-detection.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateFocusDetectionParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateFocusDetectionParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.focus-detection.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.focus-detection.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateFocusDetectionParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateFocusDetectionParams('capacity'); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.focus-detection.options.max_depth' - )} - - -
- { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateFocusDetectionParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateFocusDetectionParams( - 'max_depth' - ); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.focus-detection.options.limit')} - -
- { - algorithmAnalyzerStore.mutateFocusDetectionParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateFocusDetectionParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateFocusDetectionParams('limit'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default FocusDetection; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx deleted file mode 100644 index 8dcb148f4..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const Jaccard = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { t } = useTranslation(); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateJaccardParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.jaccardParams.vertex !== '' && - algorithmAnalyzerStore.jaccardParams.other !== ''; - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.jaccard.options.vertex')} - -
- { - algorithmAnalyzerStore.mutateJaccardParams( - 'vertex', - e.value as string - ); - - algorithmAnalyzerStore.validateJaccardParams('vertex'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateJaccardParams('vertex'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.jaccard.options.label')} - -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.jaccard.options.other')} - -
- { - algorithmAnalyzerStore.mutateJaccardParams( - 'other', - e.value as string - ); - - algorithmAnalyzerStore.validateJaccardParams('other'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateJaccardParams('other'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.jaccard.options.max_degree')} - - -
- { - algorithmAnalyzerStore.mutateJaccardParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateJaccardParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateJaccardParams('max_degree'); - } - }} - /> -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.jaccard.options.direction')} - -
- ) => { - algorithmAnalyzerStore.mutateJaccardParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - -
-
- ); -}); - -export default Jaccard; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KHop.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KHop.tsx deleted file mode 100644 index bd12e6f83..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KHop.tsx +++ /dev/null @@ -1,408 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; -import { styles } from '../QueryAndAlgorithmLibrary'; - -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const KHop = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values(algorithmAnalyzerStore.validateKHopParamsErrorMessage).every( - (value) => value === '' - ) && - algorithmAnalyzerStore.kHopParams.source !== '' && - algorithmAnalyzerStore.kHopParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.k-hop.options.source')} - -
- { - algorithmAnalyzerStore.mutateKHopParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateKHopParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKHopParams('source'); - } - }} - /> -
-
-
- {t('data-analyze.algorithm-forms.k-hop.options.label')} -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.k-hop.options.direction')} - -
- ) => { - algorithmAnalyzerStore.mutateKHopParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t('data-analyze.algorithm-forms.k-hop.options.max_degree')} - - -
- { - algorithmAnalyzerStore.mutateKHopParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateKHopParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKHopParams('max_degree'); - } - }} - /> -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.k-hop.options.max_depth')} - - -
- { - algorithmAnalyzerStore.mutateKHopParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateKHopParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKHopParams('max_depth'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.k-hop.options.capacity')} - -
- { - algorithmAnalyzerStore.mutateKHopParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateKHopParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKHopParams('capacity'); - } - }} - /> -
-
-
-
-
- - {t('data-analyze.algorithm-forms.k-hop.options.nearest')} - - -
- { - algorithmAnalyzerStore.mutateKHopParams('nearest', checked); - }} - /> -
-
-
- {t('data-analyze.algorithm-forms.k-hop.options.limit')} -
- { - algorithmAnalyzerStore.mutateKHopParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateKHopParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKHopParams('limit'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default KHop; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx deleted file mode 100644 index 6b46cd94a..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const KStepNeighbor = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateKStepNeighborParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.kStepNeighborParams.source !== '' && - algorithmAnalyzerStore.kStepNeighborParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.k-step-neighbor.options.source')} - -
- { - algorithmAnalyzerStore.mutateKStepNeighborParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateKStepNeighborParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKStepNeighborParams('source'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.k-step-neighbor.options.label')} - -
- -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.k-step-neighbor.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateKStepNeighborParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.k-step-neighbor.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateKStepNeighborParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateKStepNeighborParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKStepNeighborParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.k-step-neighbor.options.max_depth' - )} - - -
- { - algorithmAnalyzerStore.mutateKStepNeighborParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateKStepNeighborParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKStepNeighborParams('max_depth'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.k-step-neighbor.options.limit')} - -
- { - algorithmAnalyzerStore.mutateKStepNeighborParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateKStepNeighborParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateKStepNeighborParams('limit'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default KStepNeighbor; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx deleted file mode 100644 index 49b134db7..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { GraphManagementStoreContext } from '../../../../stores'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const LoopDetection = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateLoopDetectionParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.loopDetectionParams.source !== '' && - algorithmAnalyzerStore.loopDetectionParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.loop-detection.options.source')} - -
- { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateLoopDetectionParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateLoopDetectionParams('source'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.loop-detection.options.label')} - -
- -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.loop-detection.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.loop-detection.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateLoopDetectionParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateLoopDetectionParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.loop-detection.options.max_depth' - )} - - -
- { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateLoopDetectionParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateLoopDetectionParams('max_depth'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.loop-detection.options.limit')} - -
- { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateLoopDetectionParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateLoopDetectionParams('limit'); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.loop-detection.options.source_in_ring' - )} - -
- { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'source_in_ring', - checked - ); - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.loop-detection.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateLoopDetectionParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateLoopDetectionParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateLoopDetectionParams('capacity'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default LoopDetection; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx deleted file mode 100644 index 4ad2ed7ab..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx +++ /dev/null @@ -1,1166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { flatten, cloneDeep, size, isEmpty } from 'lodash-es'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; - -const ModelSimilarity = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 390 - ); - - const sourceType = algorithmAnalyzerStore.modelSimilarityParams.method; - - const allowAddNewProperty = !flatten( - algorithmAnalyzerStore.modelSimilarityParams.vertexProperty - ).some((value) => value === ''); - - const addNewPropertyClassName = - allowAddNewProperty && - dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' - ? 'query-tab-content-internal-expand-manipulation-enable' - : 'query-tab-content-internal-expand-manipulation-disabled'; - - const isValidSourceId = - algorithmAnalyzerStore.modelSimilarityParams.method === 'id' && - algorithmAnalyzerStore.modelSimilarityParams.source !== ''; - - const isValidProperty = - algorithmAnalyzerStore.modelSimilarityParams.method === 'property' && - !( - isEmpty(algorithmAnalyzerStore.modelSimilarityParams.vertexType) && - flatten( - algorithmAnalyzerStore.modelSimilarityParams.vertexProperty - ).every((value) => isEmpty(value)) - ) && - algorithmAnalyzerStore.modelSimilarityParams.vertexProperty.every( - ([key, value]) => (!isEmpty(key) ? !isEmpty(value) : true) - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateModelSimilartiyParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.modelSimilarityParams.least_neighbor !== '' && - algorithmAnalyzerStore.modelSimilarityParams.similarity !== '' && - (!isEmpty(algorithmAnalyzerStore.modelSimilarityParams.property_filter) - ? algorithmAnalyzerStore.modelSimilarityParams.least_property_number !== - '' - : true) && - (isValidSourceId || isValidProperty); - - return ( -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.model-similarity.options.method' - )} - -
- ) => { - algorithmAnalyzerStore.switchModelSimilarityMethod( - e.target.value - ); - }} - > - - {t( - 'data-analyze.algorithm-forms.model-similarity.radio-value.specific-id' - )} - - - {t( - 'data-analyze.algorithm-forms.model-similarity.radio-value.filtered-type-property' - )} - - -
-
- - {sourceType === 'id' && ( -
-
-
- * - - {t( - 'data-analyze.algorithm-forms.model-similarity.options.source' - )} - -
- - { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'source' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'source' - ); - } - }} - /> -
-
- )} - - {sourceType !== 'id' && ( - <> -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.vertex-type' - )} - -
- -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.vertex-property' - )} - -
- -
- {algorithmAnalyzerStore.modelSimilarityParams.vertexProperty.map( - ([key, value], propertyIndex) => { - const currentVertexType = dataAnalyzeStore.vertexTypes.find( - ({ name }) => - name === - algorithmAnalyzerStore.modelSimilarityParams - .vertexType - ); - - return ( -
- -
- { - const vertexProperty = cloneDeep( - algorithmAnalyzerStore.modelSimilarityParams - .vertexProperty - ); - - vertexProperty[propertyIndex][1] = e.value; - - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'vertexProperty', - vertexProperty - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'vertexProperty' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'vertexProperty' - ); - } - }} - /> -
- {size( - algorithmAnalyzerStore.modelSimilarityParams - .vertexProperty - ) > 1 && ( -
{ - algorithmAnalyzerStore.removeModelSimilarityVertexProperty( - propertyIndex - ); - }} - > - {t( - 'data-analyze.algorithm-forms.model-similarity.delete' - )} -
- )} -
- ); - } - )} -
-
-
- {algorithmAnalyzerStore.modelSimilarityParams.vertexType === '' && - !allowAddNewProperty && - size( - algorithmAnalyzerStore.modelSimilarityParams.vertexProperty - ) === 1 ? ( -
- - {t( - 'data-analyze.algorithm-forms.model-similarity.hint.vertex_type_or_property' - )} - -
- ) : ( -
- { - if ( - allowAddNewProperty && - dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' - ) { - algorithmAnalyzerStore.addModelSimilarityVertexProperty(); - } - }} - > - {t('data-analyze.algorithm-forms.model-similarity.add')} - -
- )} - - )} - -
-
-
- * - - {t( - 'data-analyze.algorithm-forms.model-similarity.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
- -
-
-
- * - - {t( - 'data-analyze.algorithm-forms.model-similarity.options.least_neighbor' - )} - - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'least_neighbor', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'least_neighbor' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'least_neighbor' - ); - } - }} - /> -
-
- -
-
-
- * - - {t( - 'data-analyze.algorithm-forms.model-similarity.options.similarity' - )} - - -
- - { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'similarity', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'similarity' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'similarity' - ); - } - }} - /> -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.label' - )} - -
- -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.max_similar' - )} - - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'max_similar', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'max_similar' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'max_similar' - ); - } - }} - /> -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.least_similar' - )} - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'least_similar', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'least_similar' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'least_similar' - ); - } - }} - /> -
-
- -
- - -
-
- -
-
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.property_filter' - )} - -
- -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.least_property_number' - )} - - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'least_property_number', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'least_property_number' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'least_property_number' - ); - } - }} - /> -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'max_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'max_degree' - ); - } - }} - /> -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams( - 'capacity' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams( - 'capacity' - ); - } - }} - /> -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.limit' - )} - -
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateModelSimilarityParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateModelSimilarityParams('limit'); - } - }} - /> -
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.return_common_connection' - )} - - -
-
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'return_common_connection', - checked - ); - }} - /> -
-
-
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.model-similarity.options.return_complete_info' - )} - -
-
- { - algorithmAnalyzerStore.mutateModelSimilarityParams( - 'return_complete_info', - checked - ); - }} - /> -
-
-
-
-
- ); -}); - -export default ModelSimilarity; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx deleted file mode 100644 index 845fd268f..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { size } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Button, Radio, Input, Select } from 'hubble-ui'; - -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; - -const NeighborRank = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const formWidthInStep = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 310, - 380 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateNeighborRankParamsParamsErrorMessage - ).every((value) => Array.isArray(value) || value === '') && - algorithmAnalyzerStore.validateNeighborRankParamsParamsErrorMessage.steps.every( - (step) => Object.values(step).every((value) => value === '') - ) && - algorithmAnalyzerStore.neighborRankParams.source !== '' && - algorithmAnalyzerStore.neighborRankParams.alpha !== ''; - - const isValidAddRule = algorithmAnalyzerStore.validateNeighborRankParamsParamsErrorMessage.steps.every( - (step) => Object.values(step).every((value) => value === '') - ); - - return ( -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.neighbor-rank.options.source')} - -
- { - algorithmAnalyzerStore.mutateNeighborRankParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateNeighborRankParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateNeighborRankParams('source'); - } - }} - /> -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.neighbor-rank.options.alpha')} - -
- { - algorithmAnalyzerStore.mutateNeighborRankParams( - 'alpha', - e.value as string - ); - - algorithmAnalyzerStore.validateNeighborRankParams('alpha'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateNeighborRankParams('alpha'); - } - }} - /> -
-
-
-
-
- - {t( - 'data-analyze.algorithm-forms.neighbor-rank.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateNeighborRankParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateNeighborRankParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateNeighborRankParams('capacity'); - } - }} - /> -
-
-
- - -
-
- -
- {algorithmAnalyzerStore.neighborRankParams.steps.map( - ({ uuid, direction, labels, degree, top }, ruleIndex) => { - return ( -
-
-
- * - - {t( - 'data-analyze.algorithm-forms.neighbor-rank.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateNeighborRankRuleParams( - 'direction', - e.target.value, - ruleIndex - ); - }} - > - both - out - in - - {size(algorithmAnalyzerStore.neighborRankParams.steps) > - 1 && ( -
{ - algorithmAnalyzerStore.removeNeighborRankRule( - ruleIndex - ); - }} - > - {t('addition.common.del')} -
- )} -
-
-
- - {t( - 'data-analyze.algorithm-forms.neighbor-rank.options.label' - )} - -
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.neighbor-rank.options.degree' - )} - - -
- { - algorithmAnalyzerStore.mutateNeighborRankRuleParams( - 'degree', - e.value as string, - ruleIndex - ); - - algorithmAnalyzerStore.validateNeighborRankRules( - 'degree', - ruleIndex - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateNeighborRankRules( - 'degree', - ruleIndex - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.neighbor-rank.options.top' - )} - - -
- { - algorithmAnalyzerStore.mutateNeighborRankRuleParams( - 'top', - e.value as string, - ruleIndex - ); - - algorithmAnalyzerStore.validateNeighborRankRules( - 'top', - ruleIndex - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateNeighborRankRules( - 'top', - ruleIndex - ); - } - }} - /> -
-
- ); - } - )} -
- { - if (isValidAddRule) { - algorithmAnalyzerStore.addNeighborRankRule(); - } - }} - > - {t('data-analyze.algorithm-forms.neighbor-rank.add-new-rule')} - -
-
-
- ); -}); - -export default NeighborRank; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx deleted file mode 100644 index 866b8dbfd..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const PersonalRank = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validatePersonalRankErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.personalRankParams.source !== '' && - algorithmAnalyzerStore.personalRankParams.alpha !== '' && - algorithmAnalyzerStore.personalRankParams.label !== '' && - algorithmAnalyzerStore.personalRankParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.personal-rank.options.source')} - -
- { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validatePersonalRankParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validatePersonalRankParams('source'); - } - }} - /> -
-
-
- * - - {t('data-analyze.algorithm-forms.personal-rank.options.label')} - -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.personal-rank.options.alpha')} - -
- { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'alpha', - e.value as string - ); - - algorithmAnalyzerStore.validatePersonalRankParams('alpha'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validatePersonalRankParams('alpha'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.personal-rank.options.degree')} - - -
- { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'degree', - e.value as string - ); - - algorithmAnalyzerStore.validatePersonalRankParams('degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validatePersonalRankParams('degree'); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.personal-rank.options.max_depth' - )} - -
- { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validatePersonalRankParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validatePersonalRankParams('max_depth'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.personal-rank.options.limit')} - -
- { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validatePersonalRankParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validatePersonalRankParams('limit'); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.personal-rank.options.with_label' - )} - - -
- ) => { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'with_label', - e.target.value - ); - }} - > - - {t( - 'data-analyze.algorithm-forms.personal-rank.with-label-radio-value.same_label' - )} - - - {t( - 'data-analyze.algorithm-forms.personal-rank.with-label-radio-value.other_label' - )} - - - {t( - 'data-analyze.algorithm-forms.personal-rank.with-label-radio-value.both_label' - )} - - -
-
-
- - {t('data-analyze.algorithm-forms.personal-rank.options.sorted')} - - -
-
- { - algorithmAnalyzerStore.mutatePersonalRankParams( - 'sorted', - checked - ); - }} - /> -
-
-
-
- - -
-
- ); -}); - -export default PersonalRank; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx deleted file mode 100644 index 682424fd3..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx +++ /dev/null @@ -1,422 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const RadiographicInspection = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateRadiographicInspectionParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.radiographicInspectionParams.source !== '' && - algorithmAnalyzerStore.radiographicInspectionParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.source' - )} - -
- { - algorithmAnalyzerStore.mutateRadiographicInspectionParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'source' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'source' - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.label' - )} - -
- -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateRadiographicInspectionParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateRadiographicInspectionParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'max_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.max_depth' - )} - - -
- { - algorithmAnalyzerStore.mutateRadiographicInspectionParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'max_depth' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'max_depth' - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateRadiographicInspectionParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'capacity' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'capacity' - ); - } - }} - /> -
-
-
-
-
-
- - {t( - 'data-analyze.algorithm-forms.radiographic-inspection.options.limit' - )} - -
- { - algorithmAnalyzerStore.mutateRadiographicInspectionParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'limit' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateRadiographicInspectionParams( - 'limit' - ); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default RadiographicInspection; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx deleted file mode 100644 index 84496448d..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const SameNeighbor = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateSameNeighborParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.sameNeighborParams.vertex !== '' && - algorithmAnalyzerStore.sameNeighborParams.other !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.same-neighbor.options.vertex')} - -
- { - algorithmAnalyzerStore.mutateSameNeighborParams( - 'vertex', - e.value as string - ); - - algorithmAnalyzerStore.validateSameNeighborParams('vertex'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSameNeighborParams('vertex'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.same-neighbor.options.label')} - -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.same-neighbor.options.other')} - -
- { - algorithmAnalyzerStore.mutateSameNeighborParams( - 'other', - e.value as string - ); - - algorithmAnalyzerStore.validateSameNeighborParams('other'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSameNeighborParams('other'); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.same-neighbor.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateSameNeighborParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateSameNeighborParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSameNeighborParams('max_degree'); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.same-neighbor.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateSameNeighborParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t('data-analyze.algorithm-forms.same-neighbor.options.limit')} - -
- { - algorithmAnalyzerStore.mutateSameNeighborParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateSameNeighborParams('limit'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSameNeighborParams('limit'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default SameNeighbor; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx deleted file mode 100644 index 1df1a02ce..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx +++ /dev/null @@ -1,454 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; - -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -const ShortestPath = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateShortestPathParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.shortestPathAlgorithmParams.source !== '' && - algorithmAnalyzerStore.shortestPathAlgorithmParams.target !== '' && - algorithmAnalyzerStore.shortestPathAlgorithmParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t('data-analyze.algorithm-forms.shortest-path.options.source')} - -
- { - algorithmAnalyzerStore.mutateShortestPathParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathParams('source'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.shortest-path.options.label')} - -
- -
-
-
-
-
- * - - {t('data-analyze.algorithm-forms.shortest-path.options.target')} - -
- { - algorithmAnalyzerStore.mutateShortestPathParams( - 'target', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathParams('target'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathParams('target'); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.shortest-path.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateShortestPathParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathParams('max_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathParams('max_degree'); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.shortest-path.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateShortestPathParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.shortest-path.options.skip_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateShortestPathParams( - 'skip_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathParams('skip_degree'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathParams( - 'skip_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.shortest-path.options.max_depth' - )} - - -
- { - algorithmAnalyzerStore.mutateShortestPathParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathParams('max_depth'); - } - }} - /> -
-
-
- - {t('data-analyze.algorithm-forms.shortest-path.options.capacity')} - -
- { - algorithmAnalyzerStore.mutateShortestPathParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathParams('capacity'); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default ShortestPath; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx deleted file mode 100644 index aa206b120..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx +++ /dev/null @@ -1,469 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, createContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; - -const ShortestPathAll = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 400 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateShortestPathAllParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.shortestPathAllParams.source !== '' && - algorithmAnalyzerStore.shortestPathAllParams.target !== '' && - algorithmAnalyzerStore.shortestPathAllParams.max_depth !== ''; - - return ( -
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.source' - )} - -
- { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathAllParams('source'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathAllParams('source'); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.label' - )} - -
- -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.target' - )} - -
- { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'target', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathAllParams('target'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathAllParams('target'); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathAllParams( - 'max_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathAllParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathAllParams('capacity'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathAllParams( - 'capacity' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.max_depth' - )} - - -
- { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'max_depth', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathAllParams('max_depth'); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathAllParams( - 'max_depth' - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.shortest-path-all.options.skip_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateShortestPathAllParams( - 'skip_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateShortestPathAllParams( - 'skip_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateShortestPathAllParams( - 'skip_degree' - ); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default ShortestPathAll; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx deleted file mode 100644 index 3a84bf16b..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx +++ /dev/null @@ -1,522 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; - -import { GraphManagementStoreContext } from '../../../../stores'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { isDataTypeNumeric, calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const SingleSourceWeightedShortestPath = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 340, - 380 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.singleSourceWeightedShortestPathParams.source !== ''; - - return ( -
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.source' - )} - -
- { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'source' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'source' - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.label' - )} - -
- -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'max_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.weight' - )} - -
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.skip_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'skip_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'skip_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'skip_degree' - ); - } - }} - /> -
-
-
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.with_vertex' - )} - -
- { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'with_vertex', - checked - ); - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'capacity' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'capacity' - ); - } - }} - /> -
-
-
-
-
-
- - {t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.limit' - )} - -
- { - algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( - 'limit', - e.value as string - ); - - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'limit' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( - 'limit' - ); - } - }} - /> -
-
-
- - -
-
- ); -}); - -export default SingleSourceWeightedShortestPath; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx deleted file mode 100644 index 26098f650..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; -import { styles } from '../QueryAndAlgorithmLibrary'; -import { Tooltip as CustomTooltip } from '../../../common'; - -import { GraphManagementStoreContext } from '../../../../stores'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import { isDataTypeNumeric, calcAlgorithmFormWidth } from '../../../../utils'; - -import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const WeightedShortestPath = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; - const { t } = useTranslation(); - - const formWidth = calcAlgorithmFormWidth( - graphManagementStore.isExpanded, - 320, - 390 - ); - - const isValidExec = - Object.values( - algorithmAnalyzerStore.validateWeightedShortestPathParamsErrorMessage - ).every((value) => value === '') && - algorithmAnalyzerStore.weightedShortestPathParams.source !== '' && - algorithmAnalyzerStore.weightedShortestPathParams.target !== '' && - algorithmAnalyzerStore.weightedShortestPathParams.weight !== ''; - - return ( -
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.source' - )} - -
- { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'source', - e.value as string - ); - - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'source' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'source' - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.label' - )} - -
- -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.target' - )} - -
- { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'target', - e.value as string - ); - - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'target' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'target' - ); - } - }} - /> -
-
-
- - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.max_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'max_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'max_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'max_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.direction' - )} - -
- ) => { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'direction', - e.target.value - ); - }} - > - both - out - in - -
-
-
- - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.skip_degree' - )} - - -
- { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'skip_degree', - e.value as string - ); - - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'skip_degree' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'skip_degree' - ); - } - }} - /> -
-
-
-
-
- * - - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.weight' - )} - -
- -
-
-
- - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.capacity' - )} - -
- { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'capacity', - e.value as string - ); - - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'capacity' - ); - }} - originInputProps={{ - onBlur() { - algorithmAnalyzerStore.validateWeightedShortestPathParams( - 'capacity' - ); - } - }} - /> -
-
-
-
-
- - {t( - 'data-analyze.algorithm-forms.weighted-shortest-path.options.with_vertex' - )} - -
- { - algorithmAnalyzerStore.mutateWeightedShortestPathParams( - 'with_vertex', - checked - ); - }} - /> -
-
-
- - -
-
- ); -}); - -export default WeightedShortestPath; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/common/Favorite.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/common/Favorite.tsx deleted file mode 100644 index 11ea43224..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/common/Favorite.tsx +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useState, useContext, useCallback } from 'react'; -import { observer } from 'mobx-react'; -import { Button, Input, Message } from 'hubble-ui'; - -import { DataAnalyzeStoreContext } from '../../../../stores'; -import { useTranslation } from 'react-i18next'; - -export interface FavoriteProps { - handlePop: (flag: boolean) => void; - queryStatement?: string; - isEdit?: boolean; - id?: number; - name?: string; -} - -const styles = { - primaryButton: { - width: 72, - marginRight: 12 - }, - alert: { - width: 320, - fontSize: 12, - marginTop: 4, - color: '#f5535b' - } -}; - -const Favorite: React.FC = observer( - ({ handlePop, queryStatement = '', isEdit = false, id, name = '' }) => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - const { t } = useTranslation(); - const initialText = isEdit ? name : ''; - const [inputValue, setInputValue] = useState(initialText); - - const handleChange = useCallback(({ value }) => { - setInputValue(value); - }, []); - - const handleAddQueryCollection = useCallback(async () => { - await dataAnalyzeStore.addQueryCollection(inputValue, queryStatement); - - if (dataAnalyzeStore.requestStatus.addQueryCollection === 'success') { - dataAnalyzeStore.setFavoritePopUp(''); - handlePop(false); - setInputValue(''); - - Message.success({ - content: isEdit - ? t('addition.operate.modify-success') - : t('addition.operate.favorite-success'), - size: 'medium', - showCloseIcon: false - }); - - dataAnalyzeStore.fetchFavoriteQueries(); - } - }, [dataAnalyzeStore, handlePop, inputValue, isEdit, queryStatement]); - - const handleEditQueryCollection = useCallback(async () => { - await dataAnalyzeStore.editQueryCollection( - id as number, - inputValue, - queryStatement - ); - - if (dataAnalyzeStore.requestStatus.editQueryCollection === 'success') { - dataAnalyzeStore.setFavoritePopUp(''); - handlePop(false); - setInputValue(''); - - Message.success({ - content: t('addition.operate.modify-success'), - size: 'medium', - showCloseIcon: false - }); - - dataAnalyzeStore.fetchFavoriteQueries(); - } - }, [dataAnalyzeStore, handlePop, id, inputValue, queryStatement]); - - const handleCancel = useCallback( - (type: 'add' | 'edit') => () => { - handlePop(false); - dataAnalyzeStore.setFavoritePopUp(''); - setInputValue(initialText); - dataAnalyzeStore.resetFavoriteRequestStatus(type); - }, - [dataAnalyzeStore, handlePop, initialText] - ); - - return ( -
-
- - {isEdit - ? t('addition.operate.modify-name') - : t('addition.operate.favorite-statement')} - - - {dataAnalyzeStore.requestStatus.addQueryCollection === 'failed' && - isEdit === false && ( -
- {dataAnalyzeStore.errorInfo.addQueryCollection.message} -
- )} - {dataAnalyzeStore.requestStatus.editQueryCollection === 'failed' && - isEdit === true && ( -
- {dataAnalyzeStore.errorInfo.editQueryCollection.message} -
- )} -
- - -
-
-
- ); - } -); - -export default Favorite; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/index.ts deleted file mode 100644 index dffd5e2e7..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import DataAnalyze from './DataAnalyze'; - -export { DataAnalyze }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx deleted file mode 100644 index 26be682e4..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useEffect, useRef, useCallback } from 'react'; -import { observer } from 'mobx-react'; -import { Message } from 'hubble-ui'; -import { isUndefined, size, isEmpty } from 'lodash-es'; - -import { DataAnalyzeStoreContext } from '../../../../stores'; -import { addGraphNodes, addGraphEdges } from '../../../../stores/utils'; -import { useTranslation } from 'react-i18next'; - -interface GraphPopOverProps { - x: number; - y: number; - switchIsPopover: (state: boolean) => void; - isAfterDragging: boolean; - switchAfterDragging: (state: boolean) => void; -} - -const GraphPopOver: React.FC = observer( - ({ x, y, isAfterDragging, switchAfterDragging, switchIsPopover }) => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - const popoverWrapperRef = useRef(null); - const { t } = useTranslation(); - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // if clicked element is not on dropdown, collpase it - if ( - popoverWrapperRef.current && - !popoverWrapperRef.current.contains(e.target as Element) - ) { - if (isAfterDragging) { - switchAfterDragging(false); - return; - } - - switchIsPopover(false); - } - }, - [switchIsPopover, isAfterDragging] - ); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( -
e.preventDefault()} - style={{ top: y, left: x }} - ref={popoverWrapperRef} - > - {dataAnalyzeStore.rightClickedGraphData.id === '' ? ( -
{ - switchIsPopover(false); - dataAnalyzeStore.setDynamicAddGraphDataStatus('vertex'); - }} - > - {t('addition.common.add-vertex')} -
- ) : ( - <> -
{ - const node = dataAnalyzeStore.graphData.data.graph_view.vertices.find( - ({ id }) => id === dataAnalyzeStore.rightClickedGraphData.id - ); - - if (isUndefined(node)) { - return; - } - - if (node.label === '~undefined') { - Message.info({ - content: t('addition.message.illegal-vertex'), - size: 'medium', - showCloseIcon: false, - duration: 1 - }); - } - - if ( - isUndefined( - dataAnalyzeStore.vertexTypes.find( - ({ name }) => name === node.label - ) - ) - ) { - return; - } - - await dataAnalyzeStore.expandGraphNode(); - - if ( - dataAnalyzeStore.requestStatus.expandGraphNode === 'success' - ) { - // prompt if there's no extra node - if ( - size( - dataAnalyzeStore.expandedGraphData.data.graph_view - .vertices - ) === 0 - ) { - if ( - isEmpty( - dataAnalyzeStore.visNetwork?.getConnectedNodes(node.id) - ) - ) { - Message.info({ - content: t('addition.message.no-adjacency-points'), - size: 'medium', - showCloseIcon: false, - duration: 1 - }); - } else { - Message.info({ - content: t('addition.message.no-more-points'), - size: 'medium', - showCloseIcon: false, - duration: 1 - }); - } - - return; - } - - addGraphNodes( - dataAnalyzeStore.expandedGraphData.data.graph_view.vertices, - dataAnalyzeStore.visDataSet?.nodes, - dataAnalyzeStore.vertexSizeMappings, - dataAnalyzeStore.colorMappings, - dataAnalyzeStore.vertexWritingMappings - ); - - addGraphEdges( - dataAnalyzeStore.expandedGraphData.data.graph_view.edges, - dataAnalyzeStore.visDataSet?.edges, - dataAnalyzeStore.edgeColorMappings, - dataAnalyzeStore.edgeThicknessMappings, - dataAnalyzeStore.edgeWithArrowMappings, - dataAnalyzeStore.edgeWritingMappings - ); - - dataAnalyzeStore.resetRightClickedGraphData(); - switchIsPopover(false); - } else { - Message.error({ - content: dataAnalyzeStore.errorInfo.expandGraphNode.message, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('addition.operate.expand')} -
-
{ - dataAnalyzeStore.switchShowFilterBoard(true); - switchIsPopover(false); - }} - > - {t('addition.operate.query')} -
-
{ - dataAnalyzeStore.visDataSet?.nodes.remove([ - dataAnalyzeStore.rightClickedGraphData.id - ]); - dataAnalyzeStore.hideGraphNode( - dataAnalyzeStore.rightClickedGraphData.id - ); - dataAnalyzeStore.resetRightClickedGraphData(); - switchIsPopover(false); - }} - > - {t('addition.operate.hidden')} -
-
{ - dataAnalyzeStore.setDynamicAddGraphDataStatus('outEdge'); - dataAnalyzeStore.fetchRelatedEdges(); - switchIsPopover(false); - }} - > - {t('addition.common.add-out-edge')} -
-
{ - dataAnalyzeStore.setDynamicAddGraphDataStatus('inEdge'); - dataAnalyzeStore.fetchRelatedEdges(); - switchIsPopover(false); - }} - > - {t('addition.common.add-in-edge')} -
- - )} -
- ); - } -); - -export default GraphPopOver; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx deleted file mode 100644 index f6f5d710b..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useState, - useContext, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import { size, isUndefined, isEmpty } from 'lodash-es'; -import { saveAs } from 'file-saver'; -import vis from 'vis-network'; -import 'vis-network/styles/vis-network.min.css'; -import { Message } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import QueryFilterOptions from './QueryFilterOptions'; -import GraphPopOver from './GraphPopOver'; -import { DataAnalyzeStoreContext } from '../../../../stores'; -import { addGraphNodes, addGraphEdges } from '../../../../stores/utils'; - -import ZoomInIcon from '../../../../assets/imgs/ic_fangda_16.svg'; -import ZoomOutIcon from '../../../../assets/imgs/ic_suoxiao_16.svg'; -import CenterIcon from '../../../../assets/imgs/ic_middle_16.svg'; -import DownloadIcon from '../../../../assets/imgs/ic_xiazai_16.svg'; -import FullScreenIcon from '../../../../assets/imgs/ic_quanping_16.svg'; -import ResetScreenIcon from '../../../../assets/imgs/ic_tuichuquanping_16.svg'; -import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; -import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; -import AddNodeIcon from '../../../../assets/imgs/ic_add_node.svg'; - -export interface GraphQueryResult { - hidden: boolean; -} - -const GraphQueryResult: React.FC = observer(({ hidden }) => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - const { t } = useTranslation(); - const graphWrapper = useRef(null); - const resultWrapper = useRef(null); - const legendViewPointWrapper = useRef(null); - const legendWrapper = useRef(null); - const [showLoadingGraphs, switchShowLoadingGraphs] = useState(true); - const [isPopover, switchIsPopover] = useState(false); - const [isAfterDragging, switchAfterDragging] = useState(false); - const [nodeTooltipX, setNodeToolTipX] = useState(0); - const [nodeTooltipY, setNodeToolTipY] = useState(0); - const [legendStep, setLegendStep] = useState(0); - const [legendWidth, setlegendWitdh] = useState(0); - - const [graph, setGraph] = useState(null); - - const redrawGraphs = useCallback(() => { - if (graph) { - const width = getComputedStyle(resultWrapper.current!).width as string; - const height = getComputedStyle(resultWrapper.current!).height as string; - - graph.setSize(width, height); - graph.redraw(); - } - }, [graph]); - - useEffect(() => { - const width = getComputedStyle(resultWrapper.current!).width as string; - const height = getComputedStyle(resultWrapper.current!).height as string; - - const graphNodes = new vis.DataSet(dataAnalyzeStore.graphNodes); - const graphEdges = new vis.DataSet(dataAnalyzeStore.graphEdges); - - if (!graph) { - const data = { - nodes: graphNodes, - edges: graphEdges - }; - - const layout: vis.Options = { - width, - height, - nodes: { - shape: 'dot' - }, - edges: { - arrowStrikethrough: false, - color: { - color: 'rgba(92, 115, 230, 0.8)', - hover: 'rgba(92, 115, 230, 1)', - highlight: 'rgba(92, 115, 230, 1)' - }, - scaling: { - min: 1, - max: 3, - label: { - enabled: false - } - } - }, - interaction: { - hover: true - }, - physics: { - maxVelocity: 50, - solver: 'forceAtlas2Based', - timestep: 0.3, - stabilization: { iterations: 150 } - } - }; - - // initialize your network! - if (graphWrapper.current !== null) { - const network = new vis.Network(graphWrapper!.current, data, layout); - - let timer: number | undefined = undefined; - - network.on('click', ({ nodes, edges }) => { - // click on node, note that edges(related) also has value - if (!isEmpty(nodes)) { - // note: cannot abstract switchClickOn...() and clearTimeout - // as common callings with node and edge, since click event - // would be dispatched even if click is not on node and edge - dataAnalyzeStore.switchClickOnNodeOrEdge(true); - clearTimeout(timer); - - timer = window.setTimeout(() => { - const nodeId = nodes[0]; - const node = - dataAnalyzeStore.graphData.data.graph_view.vertices.find( - ({ id }) => id === nodeId - ); - - if (isUndefined(node)) { - return; - } - - dataAnalyzeStore.changeSelectedGraphData({ - id: node.id, - label: node.label, - properties: node.properties - }); - - dataAnalyzeStore.syncGraphEditableProperties('vertex'); - dataAnalyzeStore.initValidateEditGraphDataPropertiesErrorMessage(); - - if ( - dataAnalyzeStore.graphInfoDataSet !== 'node' || - !dataAnalyzeStore.isShowGraphInfo - ) { - dataAnalyzeStore.switchShowScreeDataSet('node'); - dataAnalyzeStore.switchShowScreenInfo(true); - } - - // close filter board after click on node - dataAnalyzeStore.switchShowFilterBoard(false); - // reset status, or click blank area won't collpase the drawer - dataAnalyzeStore.switchClickOnNodeOrEdge(false); - }, 200); - - return; - } - - // click on edge - if (!isEmpty(edges)) { - dataAnalyzeStore.switchClickOnNodeOrEdge(true); - clearTimeout(timer); - - timer = window.setTimeout(() => { - const edgeId = edges[0]; - - const edge = - dataAnalyzeStore.graphData.data.graph_view.edges.find( - ({ id }) => id === edgeId - ); - - if (isUndefined(edge)) { - return; - } - - dataAnalyzeStore.changeSelectedGraphLinkData({ - id: edge.id, - label: edge.label, - properties: edge.properties, - source: edge.source, - target: edge.target - }); - - dataAnalyzeStore.syncGraphEditableProperties('edge'); - dataAnalyzeStore.initValidateEditGraphDataPropertiesErrorMessage(); - - if ( - dataAnalyzeStore.graphInfoDataSet !== 'edge' || - !dataAnalyzeStore.isShowGraphInfo - ) { - dataAnalyzeStore.switchShowScreeDataSet('edge'); - dataAnalyzeStore.switchShowScreenInfo(true); - } - - // close filter board after click on edge - dataAnalyzeStore.switchShowFilterBoard(false); - // reset status, or click blank area won't collpase the drawer - dataAnalyzeStore.switchClickOnNodeOrEdge(false); - }, 200); - } - }); - - network.on('doubleClick', async ({ nodes }) => { - clearTimeout(timer); - dataAnalyzeStore.switchClickOnNodeOrEdge(false); - if (!isEmpty(nodes)) { - const nodeId = nodes[0]; - const node = - dataAnalyzeStore.graphData.data.graph_view.vertices.find( - ({ id }) => id === nodeId - ); - - if (!isUndefined(node)) { - // specific symbol (~undefined) in schema - if (node.label === '~undefined') { - Message.info({ - content: t('addition.common.illegal-vertex-desc'), - size: 'medium', - showCloseIcon: false, - duration: 1 - }); - } - - if ( - isUndefined( - dataAnalyzeStore.vertexTypes.find( - ({ name }) => name === node.label - ) - ) - ) { - return; - } - - await dataAnalyzeStore.expandGraphNode(node.id, node.label); - - if ( - dataAnalyzeStore.requestStatus.expandGraphNode === 'success' - ) { - // prompt if there's no extra node - if ( - size( - dataAnalyzeStore.expandedGraphData.data.graph_view.vertices - ) === 0 - ) { - if (isEmpty(network.getConnectedNodes(nodeId))) { - Message.info({ - content: t('addition.message.no-adjacency-points'), - size: 'medium', - showCloseIcon: false, - duration: 1 - }); - } else { - Message.info({ - content: t('addition.message.no-more-points'), - size: 'medium', - showCloseIcon: false, - duration: 1 - }); - } - - return; - } - - addGraphNodes( - dataAnalyzeStore.expandedGraphData.data.graph_view.vertices, - dataAnalyzeStore.visDataSet?.nodes, - dataAnalyzeStore.vertexSizeMappings, - dataAnalyzeStore.colorMappings, - dataAnalyzeStore.vertexWritingMappings - ); - - addGraphEdges( - dataAnalyzeStore.expandedGraphData.data.graph_view.edges, - dataAnalyzeStore.visDataSet?.edges, - dataAnalyzeStore.edgeColorMappings, - dataAnalyzeStore.edgeThicknessMappings, - dataAnalyzeStore.edgeWithArrowMappings, - dataAnalyzeStore.edgeWritingMappings - ); - } - - if (dataAnalyzeStore.requestStatus.expandGraphNode === 'failed') { - Message.error({ - content: dataAnalyzeStore.errorInfo.expandGraphNode.message, - size: 'medium', - showCloseIcon: false - }); - } - } else { - Message.error({ - content: dataAnalyzeStore.errorInfo.expandGraphNode.message, - size: 'medium', - showCloseIcon: false - }); - } - } - }); - - network.on('oncontext', async (e) => { - // disable default context menu - e.event.preventDefault(); - - // It's weird that sometimes e.nodes is empty when right click on node - // thus using coordinate to work as expect - const nodeId = network.getNodeAt(e.pointer.DOM); - const node = dataAnalyzeStore.graphData.data.graph_view.vertices.find( - ({ id }) => id === nodeId - ); - - if (!isUndefined(node)) { - dataAnalyzeStore.changeRightClickedGraphData({ - id: node.id, - label: node.label, - properties: node.properties - }); - - switchIsPopover(true); - - network.selectNodes([nodeId]); - setNodeToolTipX(e.pointer.DOM.x); - setNodeToolTipY(e.pointer.DOM.y); - dataAnalyzeStore.setVisCurrentCoordinates({ - domX: e.pointer.DOM.x, - domY: e.pointer.DOM.y, - canvasX: e.pointer.canvas.x, - canvasY: e.pointer.canvas.y - }); - - await dataAnalyzeStore.fetchRelatedVertex(); - - if (size(dataAnalyzeStore.graphDataEdgeTypes) !== 0) { - dataAnalyzeStore.fetchFilteredPropertyOptions( - dataAnalyzeStore.graphDataEdgeTypes[0] - ); - } - } else { - const edgeId = network.getEdgeAt(e.pointer.DOM); - - // if not click on edge - if (isUndefined(edgeId)) { - dataAnalyzeStore.resetRightClickedGraphData(); - setNodeToolTipX(e.pointer.DOM.x); - setNodeToolTipY(e.pointer.DOM.y); - dataAnalyzeStore.setVisCurrentCoordinates({ - domX: e.pointer.DOM.x, - domY: e.pointer.DOM.y, - canvasX: e.pointer.canvas.x, - canvasY: e.pointer.canvas.y - }); - switchIsPopover(true); - } - } - }); - - network.on('dragging', () => { - const node = dataAnalyzeStore.visDataSet?.nodes.get( - dataAnalyzeStore.rightClickedGraphData.id - ); - - if (node !== null) { - const position = network.getPositions(node.id); - setNodeToolTipX(network.canvasToDOM(position[node.id]).x); - setNodeToolTipY(network.canvasToDOM(position[node.id]).y); - switchAfterDragging(true); - } - }); - - network.on('zoom', () => { - const node = dataAnalyzeStore.visDataSet?.nodes.get( - dataAnalyzeStore.rightClickedGraphData.id - ); - - if (node !== null) { - const position = network.getPositions(node.id); - setNodeToolTipX(network.canvasToDOM(position[node.id]).x); - setNodeToolTipY(network.canvasToDOM(position[node.id]).y); - } - }); - - network.on('dragEnd', (e) => { - if (!isEmpty(e.nodes)) { - network.unselectAll(); - } - }); - - network.once('stabilizationIterationsDone', () => { - switchShowLoadingGraphs(false); - }); - - setGraph(network); - dataAnalyzeStore.setVisNetwork(network); - } - } else { - if (!dataAnalyzeStore.isGraphLoaded) { - graph.setData({ - nodes: graphNodes, - edges: graphEdges - }); - - dataAnalyzeStore.setVisDataSet({ - nodes: graphNodes, - edges: graphEdges - }); - - dataAnalyzeStore.switchGraphLoaded(true); - } - - redrawGraphs(); - } - }, [ - dataAnalyzeStore, - dataAnalyzeStore.originalGraphData, - graph, - dataAnalyzeStore.isFullScreenReuslt, - redrawGraphs - ]); - - useEffect(() => { - if (legendWrapper.current) { - const legendWidth = getComputedStyle(legendWrapper.current).width!.split( - 'px' - )[0]; - - setlegendWitdh(Number(legendWidth)); - } - }, []); - - useEffect(() => { - window.addEventListener('resize', redrawGraphs, false); - - return () => { - window.removeEventListener('resize', redrawGraphs); - }; - }, [redrawGraphs]); - - return ( - <> - - {dataAnalyzeStore.isShowFilterBoard && } - {showLoadingGraphs && ( -
-
- {t('addition.operate.load-background')} - {t('addition.operate.load-spinner')} -
- {t('addition.operate.rendering')}... -
- )} - - ); -}); - -export default GraphQueryResult; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx deleted file mode 100644 index fed89e518..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import ReactJsonView from 'react-json-view'; -import 'codemirror/mode/javascript/javascript'; - -import { DataAnalyzeStoreContext } from '../../../../stores'; - -const JSONQueryResult: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - - return ( -
- -
- ); -}); - -export default JSONQueryResult; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx deleted file mode 100644 index 3b8e48afe..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx +++ /dev/null @@ -1,405 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useCallback } from 'react'; -import { observer } from 'mobx-react'; -import { Select, Input, NumberBox, Calendar } from 'hubble-ui'; -import { Message } from 'hubble-ui'; - -import { DataAnalyzeStoreContext } from '../../../../stores'; -import { addGraphNodes, addGraphEdges } from '../../../../stores/utils'; -import { useTranslation } from 'react-i18next'; -import i18next from '../../../../i18n'; - -const getRuleOptions = (ruleType: string = '') => { - switch (ruleType.toLowerCase()) { - case 'float': - case 'double': - case 'byte': - case 'int': - case 'long': - case 'date': - return [ - i18next.t('addition.constant.greater-than'), - i18next.t('addition.constant.greater-than-or-equal'), - i18next.t('addition.constant.less-than'), - i18next.t('addition.constant.less-than-or-equal'), - i18next.t('addition.constant.equal') - ]; - case 'object': - case 'text': - case 'blob': - case 'uuid': - return [i18next.t('addition.constant.equal')]; - case 'boolean': - return ['True', 'False']; - default: - return []; - } -}; - -const QueryFilterOptions: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - const { t } = useTranslation(); - const line = dataAnalyzeStore.filteredGraphQueryOptions.line; - const properties = dataAnalyzeStore.filteredGraphQueryOptions.properties; - const lastProperty = properties[properties.length - 1]; - - // value of the corresponding revealed form should not be empty - const allowSendFilterRequest = - (properties.length === 0 && line.type !== '') || - (lastProperty && - lastProperty.property !== '' && - lastProperty.rule !== '' && - lastProperty.value !== '') || - (lastProperty && - (lastProperty.rule === 'True' || lastProperty.rule === 'False')); - - const allowAddProperties = - allowSendFilterRequest && - dataAnalyzeStore.filteredPropertyOptions.length !== 0 && - dataAnalyzeStore.filteredGraphQueryOptions.properties.length !== - dataAnalyzeStore.filteredPropertyOptions.length; - - const handleEdgeSelectChange = useCallback( - (key: 'type' | 'direction') => (value: string) => { - dataAnalyzeStore.editEdgeFilterOption(key, value); - dataAnalyzeStore.fetchFilteredPropertyOptions(value); - }, - [dataAnalyzeStore] - ); - - const handlePropertyChange = useCallback( - ( - key: 'property' | 'rule' | 'value', - value: string | number, - index: number - ) => { - dataAnalyzeStore.editPropertyFilterOption(key, value, index); - }, - [dataAnalyzeStore] - ); - - const renderPropertyValue = ( - type: string = '', - value: string, - index: number - ) => { - const shouldDisabled = - dataAnalyzeStore.filteredGraphQueryOptions.properties[index].property === - ''; - - switch (type.toLowerCase()) { - case 'float': - case 'double': - return ( - { - handlePropertyChange('value', Number(e.value), index); - }} - disabled={shouldDisabled} - /> - ); - case 'byte': - case 'int': - case 'long': - return ( - { - handlePropertyChange('value', Number(e.target.value), index); - }} - disabled={shouldDisabled} - /> - ); - case 'date': - return ( - { - handlePropertyChange('value', timeParams.beginTime, index); - }} - disabled={shouldDisabled} - /> - ); - case 'object': - case 'text': - case 'blob': - case 'uuid': - return ( - { - handlePropertyChange('value', e.value, index); - }} - disabled={shouldDisabled} - /> - ); - case 'boolean': - return
/
; - default: - return ( - - ); - } - }; - - return ( -
-
-
- - {t('addition.common.edge-type')}: - - -
-
- - {t('addition.common.edge-direction')}: - - -
-
- { - if (!allowSendFilterRequest) { - return; - } - - await dataAnalyzeStore.filterGraphData(); - - if ( - dataAnalyzeStore.requestStatus.filteredGraphData === 'success' - ) { - addGraphNodes( - dataAnalyzeStore.expandedGraphData.data.graph_view.vertices, - dataAnalyzeStore.visDataSet?.nodes, - dataAnalyzeStore.vertexSizeMappings, - dataAnalyzeStore.colorMappings, - dataAnalyzeStore.vertexWritingMappings - ); - - addGraphEdges( - dataAnalyzeStore.expandedGraphData.data.graph_view.edges, - dataAnalyzeStore.visDataSet?.edges, - dataAnalyzeStore.edgeColorMappings, - dataAnalyzeStore.edgeThicknessMappings, - dataAnalyzeStore.edgeWithArrowMappings, - dataAnalyzeStore.edgeWritingMappings - ); - - // highlight new vertices - if (dataAnalyzeStore.visNetwork !== null) { - dataAnalyzeStore.visNetwork.selectNodes( - dataAnalyzeStore.expandedGraphData.data.graph_view.vertices - .map(({ id }) => id) - .concat([dataAnalyzeStore.rightClickedGraphData.id]), - true - ); - } - - dataAnalyzeStore.switchShowFilterBoard(false); - dataAnalyzeStore.clearFilteredGraphQueryOptions(); - } else { - Message.error({ - content: dataAnalyzeStore.errorInfo.filteredGraphData.message, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('addition.operate.filter')} - - { - dataAnalyzeStore.switchShowFilterBoard(false); - dataAnalyzeStore.clearFilteredGraphQueryOptions(); - - if (dataAnalyzeStore.visNetwork !== null) { - dataAnalyzeStore.visNetwork.unselectAll(); - } - }} - > - {t('addition.common.cancel')} - -
-
- {dataAnalyzeStore.filteredGraphQueryOptions.properties.length !== 0 && ( -
- )} - {dataAnalyzeStore.filteredGraphQueryOptions.properties.map( - ({ property, rule, value }, index) => { - return ( -
-
- {t('addition.common.property')}: - -
-
- {t('addition.common.rule')}: - -
-
- {t('addition.common.value')}: - {renderPropertyValue( - // the real type of value - dataAnalyzeStore.valueTypes[property], - value, - index - )} -
-
- { - dataAnalyzeStore.deletePropertyFilterOption(index); - }} - > - {t('addition.common.del')} - -
-
- ); - } - )} -
- { - dataAnalyzeStore.addPropertyFilterOption(); - } - : undefined - } - style={{ - color: allowAddProperties ? '#2b65ff' : '#ccc' - }} - > - {t('addition.operate.add-filter-item')} - -
-
- ); -}); - -export default QueryFilterOptions; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryResult.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryResult.tsx deleted file mode 100644 index 15fa71c2d..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/QueryResult.tsx +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { isEmpty } from 'lodash-es'; -import { useLocation } from 'wouter'; -import classnames from 'classnames'; - -import GraphQueryResult from './GraphQueryResult'; -import TableQueryResult from './TableQueryResult'; -import JSONQueryResult from './JSONQueryResult'; -import { - DataAnalyzeStoreContext, - AsyncTasksStoreContext -} from '../../../../stores'; -import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; -import EmptyIcon from '../../../../assets/imgs/ic_sousuo_empty.svg'; -import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; -import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; -import FinishedIcon from '../../../../assets/imgs/ic_done_144.svg'; -import FailedIcon from '../../../../assets/imgs/ic_fail.svg'; -import i18next from '../../../../i18n'; -import { useTranslation } from 'react-i18next'; - -export interface QueryResultProps { - sidebarIndex: number; - handleSetSidebarIndex: (index: number) => void; -} - -const dataAnalyzeContentSidebarOptions = [ - i18next.t('addition.menu.chart'), - i18next.t('addition.menu.table'), - 'Json' -]; - -const QueryResult: React.FC = observer( - ({ sidebarIndex, handleSetSidebarIndex }) => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - const { algorithmAnalyzerStore } = dataAnalyzeStore; - const asyncTasksStore = useContext(AsyncTasksStoreContext); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const renderReuslt = (index: number) => { - switch (index) { - case 1: - return ; - case 2: - return ; - } - }; - - const queryResutlClassName = classnames({ - 'query-result': true, - 'query-result-fullscreen': dataAnalyzeStore.isFullScreenReuslt - }); - - const dynHeightStyle: Record = {}; - - if ( - dataAnalyzeStore.currentTab === 'algorithm-analyze' && - !algorithmAnalyzerStore.isCollapse - ) { - if (algorithmAnalyzerStore.currentAlgorithm === '') { - dynHeightStyle.height = 'calc(100vh - 441px)'; - } - } - - return ( -
- {!dataAnalyzeStore.isFullScreenReuslt && ( -
- {dataAnalyzeContentSidebarOptions.map((text, index) => ( -
-
{ - handleSetSidebarIndex(index); - }} - className={ - sidebarIndex === index - ? 'query-result-sidebar-options-active' - : '' - } - > - - {text} -
-
- ))} -
- )} -
- {dataAnalyzeStore.requestStatus.fetchGraphs === 'success' && - renderReuslt(sidebarIndex)} - - {dataAnalyzeStore.requestStatus.fetchGraphs === 'success' && - dataAnalyzeStore.graphData.data.graph_view.vertices !== null && - dataAnalyzeStore.graphData.data.graph_view.edges !== null && - !isEmpty(dataAnalyzeStore.graphData.data.graph_view.vertices) && ( -
-
- ); - } -); - -export default QueryResult; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx deleted file mode 100644 index 1ee0764be..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useCallback } from 'react'; -import { observer } from 'mobx-react'; -import { Table } from 'hubble-ui'; -import { size } from 'lodash-es'; - -import { DataAnalyzeStoreContext } from '../../../../stores'; - -const TableQueryResult: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); - - const columnConfigs = dataAnalyzeStore.originalGraphData.data.table_view.header.map( - (title) => ({ - title, - dataIndex: title, - width: - 100 / size(dataAnalyzeStore.originalGraphData.data.table_view.header) + - '%', - render(text: any) { - if (title === 'path') { - return ; - } - - return JSON.stringify(text); - } - }) - ); - - const handlePageChange = useCallback( - (e: React.ChangeEvent) => { - dataAnalyzeStore.mutatePageNumber('tableResult', Number(e.target.value)); - }, - [dataAnalyzeStore] - ); - - return ( -
-
- - ); -}); - -// item could be obejct array which needs serialization as well -const PathItem: React.FC<{ items: string[] }> = observer(({ items }) => ( - <> - {items.map((item: string) => ( - - {JSON.stringify(item)} - - ))} - -)); - -export default TableQueryResult; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/index.ts deleted file mode 100644 index 129ccb2f7..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-analyze/query-result/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import QueryResult from './QueryResult'; - -export { QueryResult }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx deleted file mode 100644 index 63cb5c8cc..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { useRoute, useLocation } from 'wouter'; -import { isEmpty } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import { Button } from 'hubble-ui'; - -import { - ImportManagerStoreContext, - GraphManagementStoreContext, - DataImportRootStoreContext -} from '../../../../stores'; - -import { useInitDataImport } from '../../../../hooks'; - -import PassIcon from '../../../../assets/imgs/ic_pass.svg'; - -const ImportFinish: React.FC = observer(() => { - const importManagerStore = useContext(ImportManagerStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [, params] = useRoute( - '/graph-management/:id/data-import/import-manager/:jobId/import-tasks/:status*' - ); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - useEffect(() => { - if (isEmpty(serverDataImportStore.importTasks) && params !== null) { - dataImportRootStore.setCurrentId(Number(params.id)); - dataImportRootStore.setCurrentJobId(Number(params.jobId)); - - serverDataImportStore.fetchAllImportTasks(); - } - }, [params?.id, params?.jobId]); - - return ( -
-
- complete -
-
{t('data-import-status.finished')}
-
- {t('data-import-status.success', { - number: - serverDataImportStore.successImportFileStatusNumber !== 0 - ? serverDataImportStore.successImportFileStatusNumber - : '-' - })} - {serverDataImportStore.pausedImportFileNumber !== 0 && - `,${t('data-import-status.pause', { - number: serverDataImportStore.pausedImportFileNumber - })}`} - {serverDataImportStore.abortImportFileNumber !== 0 && - `,${t('data-import-status.abort', { - number: serverDataImportStore.abortImportFileNumber - })}`} -
-
-
-
- -
-
- ); -}); - -export default ImportFinish; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.less deleted file mode 100644 index f04a4c2c1..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.less +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.import-manager { - position: absolute; - width: calc(100% - 60px); - padding: 0 16px 16px; - left: 60px; - top: 60px; - - &-with-expand-sidebar { - width: calc(100% - 200px); - left: 200px; - } - - &-content-wrapper { - height: calc(100vh - 130px); - background: #fff; - padding: 16px; - overflow: auto; - } - - &-content-header { - margin-bottom: 16px; - display: flex; - justify-content: flex-end; - } - - &-breadcrumb-wrapper { - display: flex; - justify-content: space-between; - align-items: center; - margin: 16px 0; - } - - &-empty-list { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - - & > div { - margin: 8px 0 24px; - } - } - - &-table { - &-job-name { - display: flex; - - & > .link { - color: #2b65ff; - cursor: pointer; - } - - & > img { - display: block; - margin-left: 6px; - cursor: pointer; - } - } - - &-status-wrapper { - height: 28px; - text-align: center; - border-radius: 2px; - line-height: 28px; - font-size: 14px; - } - - &-status-pending { - width: 58px; - border: 1px solid #e0e0e0; - background-color: #f5f5f5; - color: #333; - } - - &-status-process { - width: 58px; - background-color: #f2f7ff; - border: 1px solid #8cb8ff; - color: #3d88f2; - } - - &-status-failed { - width: 44px; - border: 1px solid #ff9499; - background-color: #fff2f2; - color: #e64552; - } - - &-status-success { - width: 44px; - border: 1px solid #7ed988; - background-color: #f2fff4; - color: #39bf45; - } - - &-manipulations { - display: flex; - justify-content: flex-end; - color: #2b65ff; - width: 100px; - - & > span { - cursor: pointer; - - &:last-child { - margin-left: 16px; - } - } - - &-outlink { - font-size: 14px; - color: #2b65ff; - line-height: 22px; - cursor: pointer; - display: flex; - width: fit-content; - text-decoration: none; - - &:hover { - color: #527dff; - } - - &:active { - color: #184bcc; - } - - &-disabled { - color: #999; - } - } - } - } - - &-create-job-option { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 32px; - - &:first-child { - margin-top: 8px; - } - - &:last-child { - margin-bottom: 12px; - } - - & > div:first-child { - width: 78px; - text-align: right; - } - - &-required-mark { - color: #d0021b; - } - } - - &-delete-job-option { - & span { - display: block; - } - } -} - -/* overrides */ - -// reset breadcrumb line-height -.import-manager .new-fc-one-breadcrumb.new-fc-one-breadcrumb-small { - line-height: 22px; -} - -.import-manager .new-fc-one-menu { - background-color: transparent; -} - -.import-manager-content-wrapper { - & table { - table-layout: fixed; - } -} - -.import-manager .new-fc-one-breadcrumb > span:not(:last-of-type) .new-fc-one-breadcrumb-link { - color: #2b65ff; -} - -// weired, when checking img block in devtool -// its size doesn't match what it seems -// need to hard-code it's left px here -// .import-management-table-job-name .new-fc-one-tooltip { -// left: 323px !important; -// } - -// remove horizon padding of close icon in -.new-fc-one-modal-close-x { - padding: 8px 0; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.tsx deleted file mode 100644 index 9f34968c9..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportManager.tsx +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { useRoute, useLocation, Switch, Route } from 'wouter'; -import { useTranslation } from 'react-i18next'; -import { isNull } from 'lodash-es'; -import classnames from 'classnames'; -import { Breadcrumb } from 'hubble-ui'; - -import { JobDetails } from './job-details'; -import ImportTaskList from './ImportTaskList'; -import { - GraphManagementStoreContext, - DataImportRootStoreContext, - ImportManagerStoreContext -} from '../../../../stores'; - -import './ImportManager.less'; -import ImportTasks from './ImportTasks'; - -const ImportManager: React.FC = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const importManagerStore = useContext(ImportManagerStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [_, params] = useRoute( - '/graph-management/:id/data-import/import-manager/:rest*' - ); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const wrapperClassName = classnames({ - 'import-manager': true, - 'import-manager-with-expand-sidebar': graphManagementStore.isExpanded - }); - - useEffect(() => { - window.scrollTo(0, 0); - - graphManagementStore.fetchIdList(); - importManagerStore.setCurrentId(Number(params!.id)); - - return () => { - importManagerStore.dispose(); - }; - }, []); - - return ( -
-
- - { - if (!isNull(importManagerStore.selectedJob)) { - setLocation( - `/graph-management/${importManagerStore.currentId}/data-import/import-manager` - ); - importManagerStore.setSelectedJob(null); - importManagerStore.fetchImportJobList(); - } - - // reset stores - // dataMapStore.dispose(); - // serverDataImportStore.dispose(); - }} - > - {t('breadcrumb.first')} - - {importManagerStore.selectedJob && ( - - {importManagerStore.selectedJob.job_name} - - )} - -
- - - - - -
- ); -}); - -export default ImportManager; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx deleted file mode 100644 index 13168cf4e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx +++ /dev/null @@ -1,768 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useState, useContext, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { useRoute, useLocation } from 'wouter'; -import { useTranslation } from 'react-i18next'; -import { isEmpty, size } from 'lodash-es'; -import classnames from 'classnames'; -import { Button, Input, Table, Modal, Message } from 'hubble-ui'; - -import LoadingDataView from '../../../common/LoadingDataView'; -import { Tooltip as CustomTooltip } from '../../../common'; -import { - DataImportRootStoreContext, - ImportManagerStoreContext -} from '../../../../stores'; - -import AddIcon from '../../../../assets/imgs/ic_add.svg'; -import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; - -const styles = { - button: { - width: 78, - marginLeft: 12 - } -}; - -const ImportTaskList: React.FC = observer(() => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const importManagerStore = useContext(ImportManagerStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [preLoading, switchPreLoading] = useState(true); - const [isPopCreateModal, switchCreatePopModal] = useState(false); - const [, params] = useRoute( - '/graph-management/:id/data-import/import-manager' - ); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const isLoading = - preLoading || - importManagerStore.requestStatus.fetchImportJobList === 'pending'; - - const handleSearchChange = (e: React.ChangeEvent) => { - importManagerStore.mutateSearchWords(e.target.value); - }; - - const handleSearch = async () => { - importManagerStore.mutateImportJobListPageNumber(1); - importManagerStore.switchSearchedStatus(true); - await importManagerStore.fetchImportJobList(); - }; - - const handleClearSearch = () => { - importManagerStore.mutateSearchWords(''); - importManagerStore.mutateImportJobListPageNumber(1); - importManagerStore.switchSearchedStatus(false); - importManagerStore.fetchImportJobList(); - }; - - const handlePageChange = (e: React.ChangeEvent) => { - importManagerStore.mutateImportJobListPageNumber(Number(e.target.value)); - importManagerStore.fetchImportJobList(); - }; - - const columnConfigs = [ - { - title: t('import-manager.list-column-title.job-name'), - dataIndex: 'job_name', - width: '20%', - render(name: string, rowData: any) { - const readyToJump = - rowData.job_status === 'SUCCESS' || rowData.job_status === 'FAILED'; - - const wrapperClassName = classnames({ - 'no-line-break': true, - link: readyToJump - }); - - return ( -
-
{ - if (readyToJump) { - importManagerStore.setCurrentJobDetailStep('basic'); - importManagerStore.setSelectedJob(rowData.id); - - // fill in essential data in import-task stores - dataImportRootStore.setCurrentId(Number(params!.id)); - dataImportRootStore.setCurrentJobId(rowData.id); - - dataImportRootStore.fetchVertexTypeList(); - dataImportRootStore.fetchEdgeTypeList(); - - setLocation( - `/graph-management/${ - params!.id - }/data-import/import-manager/${rowData.id}/details` - ); - - // fetch related data - await Promise.all([ - dataMapStore.fetchDataMaps(), - serverDataImportStore.fetchAllImportTasks() - ]); - - dataMapStore.setSelectedFileId( - Number(dataMapStore.fileMapInfos[0].id) - ); - dataMapStore.setSelectedFileInfo(); - - // set flags about readonly and irregular process in - dataMapStore.switchReadOnly(true); - dataMapStore.switchIrregularProcess(true); - - // set flags about readonly and irregular process in - serverDataImportStore.switchExpandImportConfig(true); - serverDataImportStore.switchReadOnly(true); - serverDataImportStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - } - }} - > - {name} -
- {!isEmpty(rowData.job_remarks) && ( - - )} -
- ); - } - }, - { - title: t('import-manager.list-column-title.size'), - dataIndex: 'job_size', - width: '15%', - render(text: any) { - return
{text}
; - } - }, - { - title: t('import-manager.list-column-title.create-time'), - dataIndex: 'create_time', - render(text: string) { - return
{text}
; - } - }, - { - title: t('import-manager.list-column-title.status'), - dataIndex: 'job_status', - render(text: string) { - let specificClassName = ''; - - switch (text) { - case 'DEFAULT': - case 'UPLOADING': - specificClassName = 'import-manager-table-status-pending'; - break; - case 'MAPPING': - case 'SETTING': - case 'LOADING': - specificClassName = 'import-manager-table-status-process'; - break; - case 'FAILED': - specificClassName = 'import-manager-table-status-failed'; - break; - case 'SUCCESS': - specificClassName = 'import-manager-table-status-success'; - break; - } - - return ( -
- {t(`import-manager.list-column-status.${text}`)} -
- ); - } - }, - { - title: t('import-manager.list-column-title.time-consuming'), - dataIndex: 'job_duration', - render(text: string) { - return
{text}
; - } - }, - { - title: t('import-manager.list-column-title.manipulation'), - render(_: any, rowData: any) { - return ( -
- -
- ); - } - } - ]; - - useEffect(() => { - if (importManagerStore.currentId !== null) { - setTimeout(() => { - switchPreLoading(false); - }, 800); - - importManagerStore.fetchImportJobList(); - } - }, [importManagerStore.currentId]); - - return ( -
-
- - -
-
-
{t('import-manager.hint.no-result')} - ) : ( - - ) - } - /> - ) - }} - dataSource={isLoading ? [] : importManagerStore.importJobList} - pagination={ - isLoading - ? null - : { - hideOnSinglePage: false, - pageNo: importManagerStore.importJobListPageConfig.pageNumber, - pageSize: 10, - showSizeChange: false, - showPageJumper: false, - total: importManagerStore.importJobListPageConfig.pageTotal, - onPageNoChange: handlePageChange - } - } - /> - - { - switchCreatePopModal(false); - await importManagerStore.createNewJob(); - importManagerStore.resetJob('new'); - - if (importManagerStore.requestStatus.createNewJob === 'success') { - Message.success({ - content: t('import-manager.hint.creation-succeed'), - size: 'medium', - showCloseIcon: false - }); - - importManagerStore.fetchImportJobList(); - return; - } - - if (importManagerStore.requestStatus.createNewJob === 'failed') { - Message.error({ - content: importManagerStore.errorInfo.createNewJob.message, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('import-manager.modal.manipulations.create')} - , - - ]} - destroyOnClose - needCloseIcon={true} - onCancel={() => { - switchCreatePopModal(false); - importManagerStore.resetJob('new'); - }} - > -
-
-
- - * - - {t('import-manager.modal.create-job.job-name')} -
- { - importManagerStore.mutateNewJob('name', e.value); - importManagerStore.validateJob('new', 'name'); - }} - originInputProps={{ - onBlur: () => { - importManagerStore.validateJob('new', 'name'); - } - }} - /> -
-
-
{t('import-manager.modal.create-job.job-description')}
-
- { - importManagerStore.mutateNewJob('description', e.value); - importManagerStore.validateJob('new', 'description'); - }} - originInputProps={{ - onBlur: () => { - importManagerStore.validateJob('new', 'description'); - } - }} - /> -
-
-
-
- - ); -}); - -export interface ImportManagerManipulationProps { - jobId: number; - jobName: string; - status: string; -} - -export const ImportManagerManipulation: React.FC = observer( - ({ jobId, jobName, status }) => { - const importManagerStore = useContext(ImportManagerStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [isPopDeleteModal, switchPopDeleteModal] = useState(false); - const [, params] = useRoute( - '/graph-management/:id/data-import/import-manager' - ); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const jumpToLoaction = (step: number, jobName: string) => async () => { - importManagerStore.setSelectedJob(jobId); - - dataImportRootStore.setCurrentId(Number(params!.id)); - dataImportRootStore.setCurrentJobId(jobId); - dataImportRootStore.setCurrentStatus(status); - - let route = ''; - - if (step === 1) { - await dataMapStore.fetchDataMaps(); - route = 'upload'; - } - - if (step === 2) { - // users may browse from - dataMapStore.switchReadOnly(false); - - await dataMapStore.fetchDataMaps(); - dataMapStore.setSelectedFileId(dataMapStore.fileMapInfos[0].id); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - - route = 'mapping'; - } - - if (step === 3) { - // users may browse from - serverDataImportStore.switchReadOnly(false); - - await dataMapStore.fetchDataMaps(); - - // need to set default selected file - dataMapStore.setSelectedFileId(dataMapStore.fileMapInfos[0].id); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - serverDataImportStore.switchIrregularProcess(true); - - if (status === 'SETTING') { - // user may browse from to - dataMapStore.switchReadOnly(false); - - serverDataImportStore.resetImportTasks(); - serverDataImportStore.switchFetchImportStatus('standby'); - serverDataImportStore.switchImportFinished(false); - } - - if (status === 'LOADING') { - // reveal previous & next button in - // users may browse from which set @readonly true - dataMapStore.switchReadOnly(false); - dataMapStore.switchLock(true); - serverDataImportStore.switchImportConfigReadOnly(true); - // users may browse from , let store fetches - // for one time and decide whether import is finished - serverDataImportStore.resetImportTasks(); - serverDataImportStore.switchImportFinished(false); - } - - route = 'loading'; - } - - dataImportRootStore.setCurrentStep(step); - - setLocation( - `/graph-management/${ - params!.id - }/data-import/import-manager/${jobId}/import-tasks/${route}` - ); - }; - - return ( -
- {(status === 'DEFAULT' || status === 'UPLOADING') && ( - - {t('import-manager.list-column-manipulations.start')} - - )} - {status === 'MAPPING' && ( - - {t('import-manager.list-column-manipulations.resume-setting')} - - )} - {(status === 'SETTING' || status === 'LOADING') && ( - - {t('import-manager.list-column-manipulations.resume-importing')} - - )} - {status === 'FAILED' && ( - // { - // setLocation( - // `/graph-management/${ - // params!.id - // }/data-import/job-error-log/${jobId}` - // ); - // }} - // > - // {t('import-manager.list-column-manipulations.check-error-log')} - // - - {t('import-manager.list-column-manipulations.check-error-log')} - - )} - { - switchPopDeleteModal(true); - }} - > - {t('import-manager.list-column-manipulations.delete')} - - { - switchPopDeleteModal(false); - await importManagerStore.deleteJob(jobId); - importManagerStore.fetchImportJobList(); - }} - key="delete" - > - {t('import-manager.modal.manipulations.delete')} - , - - ]} - destroyOnClose - needCloseIcon={true} - onCancel={() => { - switchPopDeleteModal(false); - }} - > -
- - {t('import-manager.modal.delete-job.hint', { - name: jobName - })} - - {t('import-manager.modal.delete-job.sub-hint')} -
-
-
- ); - } -); - -export const EmptyImportHints: React.FC = observer(() => { - const importManagerStore = useContext(ImportManagerStoreContext); - const [isPopCreateModal, switchCreatePopModal] = useState(false); - const { t } = useTranslation(); - - return ( -
- {t('import-manager.manipulation.create')} -
{t('import-manager.hint.empty-task')}
- - { - switchCreatePopModal(false); - await importManagerStore.createNewJob(); - importManagerStore.resetJob('new'); - - if (importManagerStore.requestStatus.createNewJob === 'success') { - Message.success({ - content: t('import-manager.hint.creation-succeed'), - size: 'medium', - showCloseIcon: false - }); - - importManagerStore.fetchImportJobList(); - return; - } - - if (importManagerStore.requestStatus.createNewJob === 'failed') { - Message.error({ - content: importManagerStore.errorInfo.createNewJob.message, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('import-manager.modal.manipulations.create')} - , - - ]} - destroyOnClose - needCloseIcon={true} - onCancel={() => { - switchCreatePopModal(false); - importManagerStore.resetJob('new'); - }} - > -
-
-
- - * - - {t('import-manager.modal.create-job.job-name')} -
- { - importManagerStore.mutateNewJob('name', e.value); - importManagerStore.validateJob('new', 'name'); - }} - onBlur={() => { - importManagerStore.validateJob('new', 'name'); - }} - /> -
-
-
{t('import-manager.modal.create-job.job-description')}
-
- { - importManagerStore.mutateNewJob('description', e.value); - importManagerStore.validateJob('new', 'description'); - }} - onBlur={() => { - importManagerStore.validateJob('new', 'description'); - }} - /> -
-
-
-
-
- ); -}); - -export default ImportTaskList; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.less deleted file mode 100644 index a93c3eddc..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.less +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.import-tasks { - &-breadcrumb-wrapper { - margin: 16px 0; - } - - &-content-wrapper { - height: calc(100vh - 130px); - background: #fff; - } - - &-step-wrapper { - display: flex; - height: calc(100vh - 194px); - overflow: auto; - } - - &-step-content-header { - display: flex; - margin-bottom: 16px; - - & > span { - font-weight: 900; - line-height: 24px; - } - - & img { - cursor: pointer; - } - - &-expand { - margin-left: 9.7px; - transform: rotate(-180deg); - transition: transform 0.3s; - } - - &-collpase { - margin-left: 9.7px; - transform: rotate(0deg); - transition: transform 0.3s; - } - } - - &-tooltips { - padding: 16px; - color: #ff5b5b; - } - - &-manipulation { - font-size: 14px; - color: #2b65ff; - line-height: 20px; - cursor: pointer; - display: flex; - width: fit-content; - - &-disabled { - color: #999; - } - } - - &-complete-hint { - display: flex; - height: calc(100vh - 194px); - flex-direction: column; - justify-content: center; - align-items: center; - - &-description { - display: flex; - justify-content: center; - - & > div { - margin-left: 20px; - - & > div:first-of-type { - font-size: 24px; - } - - & > div:last-of-type { - color: #333; - } - } - } - - &-manipulations { - margin: 42px auto 0; - } - } -} - -// overrides -.import-tasks .new-fc-one-breadcrumb.new-fc-one-breadcrumb-small { - line-height: 22px; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx deleted file mode 100644 index 3d951614e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useMemo, useEffect, useLayoutEffect } from 'react'; -import { observer } from 'mobx-react'; -import { useRoute, useLocation } from 'wouter'; -import { isNull } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Steps, Button } from 'hubble-ui'; - -import UploadEntry from './UploadEntry'; -import { DataMapConfigs } from './datamap-configs'; -import { ServerDataImport } from './server-data-import'; -import ImportFinish from './ImportFinish'; -import { - ImportManagerStoreContext, - GraphManagementStoreContext, - DataImportRootStoreContext -} from '../../../../stores'; - -import PassIcon from '../../../../assets/imgs/ic_pass.svg'; - -import './ImportTasks.less'; - -const ImportTasks: React.FC = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const importManagerStore = useContext(ImportManagerStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [, params] = useRoute( - '/graph-management/:id/data-import/import-manager/:jobId/import-tasks/:status*' - ); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const steps = useMemo( - () => [ - t('step.first'), - t('step.second'), - t('step.third'), - t('step.fourth') - ], - [] - ); - - const wrapperClassName = classnames({ - 'import-tasks': true, - 'import-tasks-with-expand-sidebar': graphManagementStore.isExpanded - }); - - useEffect(() => { - if (!isNull(params)) { - switch (params.status) { - case 'upload': - dataImportRootStore.setCurrentStep(1); - break; - case 'mapping': - dataImportRootStore.setCurrentStep(2); - break; - case 'loading': - dataImportRootStore.setCurrentStep(3); - break; - case 'finish': - dataImportRootStore.setCurrentStep(4); - break; - } - } - }, [params?.status]); - - useEffect(() => { - window.scrollTo(0, 0); - dataImportRootStore.setCurrentJobId(Number(params!.jobId)); - - graphManagementStore.fetchIdList(); - dataImportRootStore.setCurrentId(Number(params!.id)); - dataImportRootStore.fetchVertexTypeList(); - dataImportRootStore.fetchEdgeTypeList(); - dataMapStore.fetchDataMaps(); - - return () => { - // no specific job here, solve the problem that click back button in browser - // since relies on @selectedJob in useEffect() - importManagerStore.setSelectedJob(null); - dataImportRootStore.dispose(); - dataMapStore.dispose(); - serverDataImportStore.dispose(); - }; - }, []); - - return ( -
-
-
- - {steps.map((title: string, index: number) => ( - index + 1 - ? 'finish' - : 'wait' - } - key={title} - /> - ))} - -
- {dataImportRootStore.currentStep === 1 && } - {dataImportRootStore.currentStep === 2 && } - {dataImportRootStore.currentStep === 3 && } - {dataImportRootStore.currentStep === 4 && } -
-
- ); -}); - -export default ImportTasks; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.less deleted file mode 100644 index 7af02e583..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.less +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.import-tasks { - &-upload-wrapper { - padding: 0 16px 28px; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - height: calc(100vh - 250px); - } - - &-upload-drag-area { - width: 400px; - height: 200px; - padding: 83px 73px; - border: 1px dashed #979797; - // display: flex; - // justify-content: center; - // align-items: center; - font-size: 12px; - color: #666; - - &:hover, - &.file-above { - border-color: #2b65ff; - } - } - - &-upload-file-list { - margin-top: 30px; - width: 400px; - max-height: calc(100vh - 512px); - overflow-y: auto; - overflow-x: hidden; - font-size: 14px; - line-height: 20px; - color: #333; - } - - &-upload-file-info { - margin-bottom: 19px; - - &-titles { - width: 75%; - display: flex; - justify-content: space-between; - } - - &-progress-status { - width: 400px; - display: flex; - align-items: center; - - &-refresh-icon { - position: relative; - left: -22px; - cursor: pointer; - } - - &-close-icon { - position: relative; - left: -35px; - cursor: pointer; - top: 0; - - &.in-progress { - left: 0; - top: 1px; - } - - &.in-error { - left: -12px; - top: 0; - } - } - } - } - - &-manipulation-wrapper { - display: flex; - justify-content: center; - } -} - -/* override */ - -// disable original delete icon in progress bar due to the img bug -.import-tasks-upload-file-info .new-fc-one-progress-operation { - display: none; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx deleted file mode 100644 index 84f1132d6..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx +++ /dev/null @@ -1,1034 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useCallback, useRef, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { useLocation } from 'wouter'; -import classnames from 'classnames'; -import { - isEmpty, - size, - isUndefined, - range, - xor, - intersection -} from 'lodash-es'; -import { DndProvider, useDrop, DropTargetMonitor } from 'react-dnd'; -import { useTranslation } from 'react-i18next'; -import { HTML5Backend, NativeTypes } from 'react-dnd-html5-backend'; -import { Button, Progress, Message } from 'hubble-ui'; -import { CancellablePromise } from 'mobx/lib/api/flow'; - -import { DataImportRootStoreContext } from '../../../../stores'; -import { useInitDataImport } from '../../../../hooks'; - -import type { FileUploadResult } from '../../../../stores/types/GraphManagementStore/dataImportStore'; - -import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; -import RefreshIcon from '../../../../assets/imgs/ic_refresh.svg'; - -import './UploadEntry.less'; - -const KB = 1024; -const MB = 1024 * 1024; -const GB = 1024 * 1024 * 1024; -const MAX_CONCURRENT_UPLOAD = 5; - -const UploadEntry: React.FC = observer(() => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const isInitReady = useInitDataImport(); - const { t } = useTranslation(); - const [, setLocation] = useLocation(); - - useEffect(() => { - const unload = (e: any) => { - e = e || window.event; - - if (e) { - e.returnValue = 'hint'; - } - - return 'hint'; - }; - - window.addEventListener('beforeunload', unload); - - return () => { - window.removeEventListener('beforeunload', unload); - }; - }, [dataImportRootStore]); - - return isInitReady ? ( - <> - - - -
- - -
- - ) : null; -}); - -export const FileDropZone: React.FC = observer(() => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [{ canDrop, isOver }, drop] = useDrop({ - accept: [NativeTypes.FILE], - drop(item, monitor) { - handleFileDrop(monitor); - }, - collect: (monitor) => ({ - isOver: monitor.isOver(), - canDrop: monitor.canDrop() - }) - }); - const { t } = useTranslation(); - - const uploadRef = useRef(null); - - const validateFileCondition = (files: File[]) => { - const validatedFiles = []; - const currentUploadFileNames = dataImportRootStore.fileUploadTasks - .map(({ name }) => name) - .concat(dataMapStore.fileMapInfos.map(({ name }) => name)); - - const filteredFiles = files.filter( - ({ name }) => !currentUploadFileNames.includes(name) - ); - - if (size(filteredFiles) !== size(files)) { - const duplicatedFiles = xor(files, filteredFiles); - - Message.error({ - content: ( -
-

{t('upload-files.no-duplicate')}

- {duplicatedFiles.map((file) => ( -

{file.name}

- ))} -
- ), - size: 'medium', - showCloseIcon: false - }); - } - - const totalSize = filteredFiles - .map(({ size }) => size) - .reduce((prev, curr) => prev + curr, 0); - - if (totalSize / GB > 10) { - Message.error({ - content: `${t('upload-files.over-all-size-limit')}`, - size: 'medium', - showCloseIcon: false - }); - - return []; - } - - for (const file of filteredFiles) { - const { name, size } = file; - const sizeGB = size / GB; - - if (size === 0) { - Message.error({ - content: `${name} ${t('upload-files.empty-file')}`, - size: 'medium', - showCloseIcon: false - }); - - break; - } - - if (name.slice(-4) !== '.csv') { - Message.error({ - content: `${name}: ${t('upload-files.wrong-format')}`, - size: 'medium', - showCloseIcon: false - }); - - break; - } - - if (sizeGB > 1) { - Message.error({ - content: `${name}: ${t('upload-files.over-single-size-limit')}`, - size: 'medium', - showCloseIcon: false - }); - - break; - } - - validatedFiles.push(file); - } - - dataImportRootStore.updateFileList(validatedFiles); - return validatedFiles; - }; - - const handleFileChange = (files: File[]) => { - for (const file of files) { - const { name, size } = file; - const sizeMB = size / MB; - - const chunkList = []; - // start byte to slice - let currentChunkStartIndex = 0; - // size of each chunk - let chunkSizeMB: number; - let chunkIndex = 0; - - if (sizeMB > 2 && sizeMB <= 128) { - chunkSizeMB = 2; - } else if (sizeMB > 128 && size <= 512) { - chunkSizeMB = 4; - } else { - chunkSizeMB = 5; - } - - while (currentChunkStartIndex < size) { - chunkList.push({ - chunkIndex, - chunk: file.slice( - currentChunkStartIndex, - currentChunkStartIndex + chunkSizeMB * MB - ) - }); - currentChunkStartIndex += chunkSizeMB * MB; - ++chunkIndex; - } - - dataImportRootStore.initFileUploadTask({ - name, - size, - status: 'uploading', - chunkList, - chunkTotal: Math.ceil(size / (chunkSizeMB * MB)), - uploadedChunkTotal: 0, - pendingChunkIndexes: [], - failedChunkIndexes: [], - uploadedChunksIndexes: [] - }); - } - }; - - const initFileTaskQueue = () => { - const firstRequestTasks = dataImportRootStore.fileUploadTasks.slice( - 0, - MAX_CONCURRENT_UPLOAD - ); - - firstRequestTasks.forEach(({ name, chunkList, chunkTotal }) => { - const task = dataImportRootStore.uploadFiles({ - fileName: name, - fileChunkList: chunkList[0], - fileChunkTotal: chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: name, - status: 'uploading', - task - }); - - scheduler(name, 0, task); - }); - - if (size(firstRequestTasks) < MAX_CONCURRENT_UPLOAD) { - let loopCount = 1; - - // Traverse firstRequestTasks to add extra items to queue - while (loopCount) { - const currentQueueItemSize = size(dataImportRootStore.fileUploadQueue); - - firstRequestTasks.forEach(({ chunkTotal, chunkList, name }) => { - if ( - chunkTotal > loopCount && - size(dataImportRootStore.fileUploadQueue) < MAX_CONCURRENT_UPLOAD - ) { - const task = dataImportRootStore.uploadFiles({ - fileName: name, - fileChunkList: chunkList[loopCount], - fileChunkTotal: chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: name, - status: 'uploading', - task - }); - - scheduler(name, loopCount, task); - } - }); - - if ( - size(dataImportRootStore.fileUploadQueue) === MAX_CONCURRENT_UPLOAD || - // which means no other items pushed into queue - currentQueueItemSize === size(dataImportRootStore.fileUploadQueue) - ) { - break; - } else { - loopCount += 1; - } - } - } - }; - - const scheduler = useCallback( - async ( - fileName: string, - fileChunkIndex: number, - task: CancellablePromise, - retryMode: boolean = false - ) => { - const fileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name }) => name === fileName - )!; - - // users may click back button in browser - if (isUndefined(fileUploadTask)) { - return; - } - - // the index of fileChunk is pending - dataImportRootStore.mutateFileUploadTasks( - 'pendingChunkIndexes', - [...fileUploadTask.pendingChunkIndexes, fileChunkIndex], - fileName - ); - - let result; - - // cancel all uploads by user - if (fileUploadTask.status === 'failed') { - task.cancel(); - result = undefined; - } else { - result = await task; - } - - if (isUndefined(result) || result.status === 'FAILURE') { - if (fileUploadTask.status !== 'failed') { - if (dataImportRootStore.errorInfo.uploadFiles.message !== '') { - Message.error({ - content: dataImportRootStore.errorInfo.uploadFiles.message, - size: 'medium', - showCloseIcon: false - }); - } - - dataImportRootStore.mutateFileUploadTasks( - 'status', - 'failed', - fileName - ); - } - - dataImportRootStore.mutateFileUploadTasks( - 'failedChunkIndexes', - [...fileUploadTask.failedChunkIndexes, fileChunkIndex], - fileName - ); - - dataImportRootStore.mutateFileUploadTasks( - 'pendingChunkIndexes', - [], - fileName - ); - - dataImportRootStore.removeFileUploadQueue(fileName); - return; - } - - if (result.status === 'SUCCESS') { - dataImportRootStore.mutateFileUploadTasks( - 'uploadedChunkTotal', - fileUploadTask.uploadedChunkTotal + 1, - fileName - ); - - dataImportRootStore.mutateFileUploadTasks( - 'uploadedChunksIndexes', - [...fileUploadTask.uploadedChunksIndexes, fileChunkIndex], - fileName - ); - - if (retryMode) { - // remove failed chunk index after succeed - dataImportRootStore.mutateFileUploadTasks( - 'failedChunkIndexes', - fileUploadTask.failedChunkIndexes.filter( - (failedChunkIndex) => failedChunkIndex !== fileChunkIndex - ), - fileName - ); - - // if there are no longer existed failed chunk index, - // set retry mode to false - if (size(fileUploadTask.failedChunkIndexes) === 0) { - retryMode = false; - } - } - - // all file chunks are uploaded - if (fileUploadTask.chunkTotal === fileUploadTask.uploadedChunkTotal) { - // remove fully uploaded file from queue - dataImportRootStore.removeFileUploadQueue(fileName); - // change the status of fully uploaded file to success - dataImportRootStore.mutateFileUploadTasks( - 'status', - 'success', - fileName - ); - // clear chunkList of fully uploaded file to release memory - dataImportRootStore.mutateFileUploadTasks('chunkList', [], fileName); - - // no uploading files - if ( - dataImportRootStore.fileUploadTasks.every( - ({ status }) => status !== 'uploading' - ) - ) { - dataMapStore.fetchDataMaps(); - return; - } - - if (size(dataImportRootStore.fileRetryUploadList) !== 0) { - // check if there are some failed uploads waiting in retry queue - const fileName = dataImportRootStore.pullRetryFileUploadQueue()!; - const retryFileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name }) => name === fileName - )!; - - const task = dataImportRootStore.uploadFiles({ - fileName, - fileChunkList: - retryFileUploadTask.chunkList[ - retryFileUploadTask.failedChunkIndexes[0] - ], - fileChunkTotal: retryFileUploadTask.chunkTotal - }); - - scheduler( - retryFileUploadTask.name, - retryFileUploadTask.failedChunkIndexes[0], - task, - true - ); - - return; - } - - for (const [ - fileIndex, - fileUploadTask - ] of dataImportRootStore.fileUploadTasks.entries()) { - // if there still has files which are fully not being uploaded - if ( - fileUploadTask.uploadedChunkTotal === 0 && - size(fileUploadTask.pendingChunkIndexes) === 0 - ) { - const task = dataImportRootStore.uploadFiles({ - fileName: fileUploadTask.name, - fileChunkList: - dataImportRootStore.fileUploadTasks[fileIndex].chunkList[0], - fileChunkTotal: - dataImportRootStore.fileUploadTasks[fileIndex].chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: fileUploadTask.name, - status: 'uploading', - task - }); - - scheduler(fileUploadTask.name, 0, task); - - // if queue is full, do not loop to add task - if ( - size(dataImportRootStore.fileUploadQueue) === - MAX_CONCURRENT_UPLOAD - ) { - break; - } - } - } - - return; - } - - let nextUploadChunkIndex; - - if (retryMode) { - const duplicateIndexes = intersection( - fileUploadTask.uploadedChunksIndexes, - fileUploadTask.failedChunkIndexes - ); - - if (!isEmpty(duplicateIndexes)) { - dataImportRootStore.mutateFileUploadTasks( - 'failedChunkIndexes', - fileUploadTask.failedChunkIndexes.filter( - (failedIndex) => !duplicateIndexes.includes(failedIndex) - ), - fileName - ); - } - - if (isEmpty(fileUploadTask.failedChunkIndexes)) { - retryMode = false; - } - - nextUploadChunkIndex = - fileUploadTask.failedChunkIndexes[0] || - Math.max( - ...fileUploadTask.pendingChunkIndexes, - // maybe it just turns retry mode to false - // and the failed chunk index could be less than - // the one which uploads success - // we have to compare uploaded chunk index either - ...fileUploadTask.uploadedChunksIndexes - ) + 1; - } else { - nextUploadChunkIndex = - Math.max( - ...fileUploadTask.pendingChunkIndexes, - // maybe it just turns retry mode to false - // and the failed chunk index could be less than - // the one which uploads success - // we have to compare uploaded chunk index either - ...fileUploadTask.uploadedChunksIndexes - ) + 1; - } - - // remove pending here to get right result of nextUploadChunkIndex - dataImportRootStore.mutateFileUploadTasks( - 'pendingChunkIndexes', - fileUploadTask.pendingChunkIndexes.filter( - (pendingChunkIndex) => pendingChunkIndex !== fileChunkIndex - ), - fileName - ); - - // no recursion - if ( - nextUploadChunkIndex > fileUploadTask.chunkTotal - 1 || - fileUploadTask.uploadedChunksIndexes.includes(nextUploadChunkIndex) - ) { - return; - } - - scheduler( - fileName, - nextUploadChunkIndex, - dataImportRootStore.uploadFiles({ - fileName, - fileChunkList: fileUploadTask.chunkList[nextUploadChunkIndex], - fileChunkTotal: fileUploadTask.chunkTotal - }), - retryMode - ); - - return; - } - }, - [] - ); - - const handleFileDrop = async (monitor: DropTargetMonitor) => { - if (monitor) { - const fileList = monitor.getItem().files; - const currentValidateFileList = validateFileCondition(fileList); - const isFirstBatchUpload = - size(dataImportRootStore.fileUploadTasks) === 0; - - if (isEmpty(currentValidateFileList)) { - return; - } - - await dataImportRootStore.fetchFilehashes( - currentValidateFileList.map(({ name }) => name) - ); - - handleFileChange(currentValidateFileList); - - if (isFirstBatchUpload) { - initFileTaskQueue(); - } else { - const spareQueueItems = - MAX_CONCURRENT_UPLOAD - size(dataImportRootStore.fileUploadQueue); - - if (spareQueueItems === 0) { - return; - } - - // if new selected files are less than spare spaces from queue - if (spareQueueItems >= size(currentValidateFileList)) { - currentValidateFileList.forEach(({ name }) => { - const fileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name: fileName }) => fileName === name - )!; - - const task = dataImportRootStore.uploadFiles({ - fileName: name, - fileChunkList: fileUploadTask.chunkList[0], - fileChunkTotal: fileUploadTask.chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: fileUploadTask.name, - status: 'uploading', - task - }); - scheduler(name, 0, task); - }); - } else { - range(spareQueueItems).forEach((fileUploadTaskIndex) => { - const fileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name: fileName }) => - fileName === currentValidateFileList[fileUploadTaskIndex].name - )!; - - const task = dataImportRootStore.uploadFiles({ - fileName: fileUploadTask.name, - fileChunkList: fileUploadTask.chunkList[0], - fileChunkTotal: fileUploadTask.chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: fileUploadTask.name, - status: 'uploading', - task - }); - scheduler(fileUploadTask.name, 0, task); - }); - } - } - } - }; - - const handleFileSelect = async (e: React.ChangeEvent) => { - // event in async callback should call this - e.persist(); - - if (e.target.files) { - const fileList = Array.from(e.target.files); - const currentValidateFileList = validateFileCondition(fileList); - const isFirstBatchUpload = - size(dataImportRootStore.fileUploadTasks) === 0; - - if (isEmpty(currentValidateFileList)) { - return; - } - - await dataImportRootStore.fetchFilehashes( - currentValidateFileList.map(({ name }) => name) - ); - - handleFileChange(currentValidateFileList); - - if (isFirstBatchUpload) { - initFileTaskQueue(); - } else { - const spareQueueItems = - MAX_CONCURRENT_UPLOAD - size(dataImportRootStore.fileUploadQueue); - - if (spareQueueItems === 0) { - return; - } - - // if new selected files are less than spare spaces from queue - if (spareQueueItems >= size(currentValidateFileList)) { - currentValidateFileList.forEach(({ name }) => { - const fileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name: fileName }) => fileName === name - )!; - - const task = dataImportRootStore.uploadFiles({ - fileName: name, - fileChunkList: fileUploadTask.chunkList[0], - fileChunkTotal: fileUploadTask.chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: fileUploadTask.name, - status: 'uploading', - task - }); - scheduler(name, 0, task); - }); - } else { - range(spareQueueItems).forEach((fileUploadTaskIndex) => { - const fileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name: fileName }) => - fileName === currentValidateFileList[fileUploadTaskIndex].name - )!; - - const task = dataImportRootStore.uploadFiles({ - fileName: fileUploadTask.name, - fileChunkList: fileUploadTask.chunkList[0], - fileChunkTotal: fileUploadTask.chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName: fileUploadTask.name, - status: 'uploading', - task - }); - scheduler(fileUploadTask.name, 0, task); - }); - } - } - } - - // select same file will not trigger onChange on input[type="file"] - // need to reset its value here - e.target.value = ''; - }; - - const dragAreaClassName = classnames({ - 'import-tasks-upload-drag-area': true, - 'file-above': canDrop && isOver - }); - - // if upload file api throw errors - useEffect(() => { - if (dataImportRootStore.errorInfo.uploadFiles.message !== '') { - Message.error({ - content: dataImportRootStore.errorInfo.uploadFiles.message, - size: 'medium', - showCloseIcon: false - }); - } - }, [dataImportRootStore.errorInfo.uploadFiles.message]); - - return ( -
- - -
- ); -}); - -export interface FileListProps { - scheduler: ( - fileName: string, - fileChunkIndex: number, - task: CancellablePromise, - retryMode?: boolean - ) => Promise; -} - -export const FileList: React.FC = observer(({ scheduler }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore } = dataImportRootStore; - - const handleRetry = (fileName: string) => () => { - // if (size(dataImportRootStore.fileUploadQueue) === 0) { - if (size(dataImportRootStore.fileUploadQueue) < MAX_CONCURRENT_UPLOAD) { - const fileUploadTask = dataImportRootStore.fileUploadTasks.find( - ({ name }) => name === fileName - )!; - - const task = dataImportRootStore.uploadFiles({ - fileName, - fileChunkList: - fileUploadTask.chunkList[fileUploadTask.failedChunkIndexes[0]] || - fileUploadTask.chunkList[ - Math.max( - ...fileUploadTask.pendingChunkIndexes, - // maybe it just turns retry mode to false - // and the failed chunk index could be less than - // the one which uploads success - // we have to compare uploaded chunk index either - ...fileUploadTask.uploadedChunksIndexes - ) + 1 - ], - fileChunkTotal: fileUploadTask.chunkTotal - }); - - dataImportRootStore.addFileUploadQueue({ - fileName, - status: 'uploading', - task - }); - - dataImportRootStore.mutateFileUploadTasks( - 'status', - 'uploading', - fileName - ); - - if (!isEmpty(fileUploadTask.failedChunkIndexes)) { - dataImportRootStore.mutateFileUploadTasks( - 'failedChunkIndexes', - [...fileUploadTask.failedChunkIndexes.slice(1)], - fileName - ); - } - - scheduler( - fileName, - fileUploadTask.failedChunkIndexes[0] || - Math.max( - ...fileUploadTask.pendingChunkIndexes, - // maybe it just turns retry mode to false - // and the failed chunk index could be less than - // the one which uploads success - // we have to compare uploaded chunk index either - ...fileUploadTask.uploadedChunksIndexes - ) + 1, - task, - true - ); - } else { - // or just add filename to retry queue, - // let other scheduler decide when to call it - dataImportRootStore.addRetryFileUploadQueue(fileName); - } - }; - - const handleDelete = (name: string, existed = false) => async () => { - await dataImportRootStore.deleteFiles(name); - - if (dataImportRootStore.requestStatus.deleteFiles === 'failed') { - Message.error({ - content: dataImportRootStore.errorInfo.deleteFiles.message, - size: 'medium', - showCloseIcon: false - }); - - return; - } - - if (existed === true) { - dataMapStore.fetchDataMaps(); - return; - } - - dataImportRootStore.removeFileUploadTasks(name); - - // if no uploading files, fetch data maps again - if ( - !dataImportRootStore.fileUploadTasks.some( - ({ status }) => status === 'uploading' - ) - ) { - dataMapStore.fetchDataMaps(); - } - }; - - return ( -
- {dataImportRootStore.fileUploadTasks.map( - ({ name, size, chunkTotal, uploadedChunkTotal, status }) => { - const [sizeKB, sizeMB, sizeGB] = [size / KB, size / MB, size / GB]; - const convertedSize = - sizeGB > 1 - ? String(sizeGB.toFixed(2)) + ' GB' - : sizeMB > 1 - ? String(sizeMB.toFixed(2)) + ' MB' - : sizeKB > 1 - ? String(sizeKB.toFixed(2)) + ' KB' - : String(size) + ' Byte'; - const progress = Number( - ((uploadedChunkTotal / chunkTotal) * 100).toFixed(2) - ); - - return ( -
-
- {name} - {convertedSize} -
-
- - {status === 'failed' && progress !== 100 && ( - retry-upload-file - )} - delete-file -
-
- ); - } - )} - {dataMapStore.fileMapInfos - .filter( - ({ name }) => - !dataImportRootStore.successFileUploadTaskNames.includes(name) - ) - .map(({ name, total_size }) => { - return ( -
-
- {name} - {total_size} -
-
- - delete-file -
-
- ); - })} -
- ); -}); - -export default UploadEntry; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less deleted file mode 100644 index 174042063..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.import-tasks { - &-data-map { - margin-bottom: 40px; - } - - &-data-map-tooltip { - background: #fff; - box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2); - border-radius: 4px; - padding: 16px; - font-size: 14px; - - &-text { - margin-bottom: 8px; - - &:nth-child(2) { - color: #e64552; - font-size: 16px; - margin-bottom: 12px; - } - - &:last-child { - margin-bottom: 0; - } - } - - &.no-display { - display: none; - } - } - - &-data-type-info-wrapper { - // margin-bottom: 16px; - padding: 24px 16px; - height: 100px; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - display: flex; - position: relative; - } - - &-data-type-info { - display: flex; - flex-direction: column; - padding-right: 8px; - // flex: 1; - - &:nth-child(1) { - // width: 24%; - flex: 1 0; - - & img.collpase { - transform: rotate(-90deg); - transition: transform 0.3s; - } - - & img.expand { - transform: rotate(0deg); - transition: transform 0.3s; - } - } - - &:nth-child(2) { - flex: 1 0; - } - - &:nth-child(3) { - flex: 1 0; - } - - &:last-child { - padding-right: 0; - width: 168px; - flex-direction: row; - align-items: center; - } - - & > div { - display: flex; - } - - &-title { - font-size: 12px; - line-height: 18px; - color: #666; - } - - &-content { - max-width: 180px; - margin-top: 13px; - font-size: 16px; - line-height: 22px; - color: #333; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - } - - &-data-options { - display: flex; - line-height: 32px; - margin-bottom: 32px; - font-size: 14px; - align-items: center; - - &-title { - display: flex; - justify-content: flex-end; - align-items: center; - width: 62px; - margin-right: 44px; - color: #333; - font-size: 14px; - - &.in-card { - width: 76px; - } - } - - &-value-maps { - width: 650px; - background-color: #f5f5f5; - margin-bottom: 16px; - padding: 16px 40px; - } - - &-expand-table { - width: 80%; - display: flex; - flex-direction: column; - - &-row { - display: flex; - margin-bottom: 8px; - - &:first-child { - margin-bottom: 12px; - } - } - - &-column { - height: 32px; - display: flex; - align-items: center; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - font-size: 14px; - line-height: 32px; - - &:nth-child(1) { - flex-basis: 30%; - } - - &:nth-child(2) { - flex-basis: 30%; - } - - &:nth-child(3) { - flex-basis: 30%; - } - - &:last-child { - flex-basis: 10%; - justify-content: center; - } - } - } - - &-expand-dropdown { - width: 382px; - max-height: 328px; - overflow: auto; - background: #fff; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - color: #333; - - & > div { - padding: 0 16px; - height: 32px; - display: flex; - align-items: center; - } - } - - &-expand-values { - display: flex; - flex-direction: column; - } - - &-expand-value { - display: flex; - margin-bottom: 32px; - - &:nth-last-child(2) { - margin-bottom: 16px; - } - - &:nth-last-child(1) { - margin-bottom: 0; - } - - & img { - margin: 0 2px; - } - - &-column { - height: 32px; - display: flex; - align-items: center; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - font-size: 14px; - line-height: 32px; - - &:nth-child(1) { - width: 30%; - } - - &:nth-child(2) { - width: 30%; - } - - &:nth-child(3) { - width: 30%; - } - - &:nth-child(4) { - width: 10%; - } - } - } - - &-expand-info { - display: flex; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - - & > span { - font-size: 14px; - line-height: 32px; - - &:nth-child(1) { - width: 60px; - } - } - - & > img { - margin: 0 6px; - } - } - - &-expand-input { - margin-top: 12px; - - &:first-child { - margin-top: 0; - } - } - } - - &-data-type-manipulations { - display: flex; - margin-left: auto; - } - - &-data-map-manipulations { - width: 100%; - margin-top: 40px; - display: flex; - justify-content: center; - } - - &-data-map-configs { - padding: 0 16px; - width: 100%; - overflow: auto; - } - - // &-data-map-config-header { - // display: flex; - // margin-bottom: 16px; - - // & > span { - // font-weight: 900; - // line-height: 24px; - // } - - // & img { - // cursor: pointer; - // } - - // &-expand { - // margin-left: 9.7px; - // transition: transform 0.3s; - // } - - // &-collpase { - // margin-left: 9.7px; - // transform: rotate(-180deg); - // transition: transform 0.3s; - // } - // } - - &-data-map-config-card { - // prevent box-shadow being cliped - // margin: 0 3px; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - margin-bottom: 16px; - padding: 16px; - } - - &-data-map-config-view { - width: 100%; - background: #fafafa; - border: 1px solid #eee; - border-radius: 0 0 3px 3px; - margin-bottom: 16px; - padding: 16px; - // position: absolute; - // top: 100px; - // left: 0; - z-index: 9; - } -} - -.import-tasks-tooltips { - width: 368px; - background: #fff; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - padding: 24px; - font-size: 14px; - color: #333; - - & p { - margin: 0; - - &:nth-of-type(1) { - margin-bottom: 16px; - font-weight: 900; - font-size: 16px; - color: #000; - } - - &:nth-of-type(2) { - margin-bottom: 24px; - font-size: 14px; - color: #333; - } - } -} - -/* override */ - -.import-tasks-data-options - .new-fc-one-checkbox-group.new-fc-one-checkbox-group-medium.new-fc-one-checkbox-group-row { - line-height: normal; -} - -// reveal scrollbar by auto, directly override style on will both set internal wrapper and
    itself, which cause shrinks on . -.import-tasks-step-wrapper - > .new-fc-one-menu-inline-box.new-fc-one-menu-inline-medium - > ul { - overflow: auto; -} - -.import-tasks-data-map-configs - .new-fc-one-input-error.new-fc-one-input-error-layer { - word-break: keep-all; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx deleted file mode 100644 index 562fac5aa..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { isEmpty } from 'lodash-es'; -import { Menu } from 'hubble-ui'; - -import { - ImportManagerStoreContext, - DataImportRootStoreContext -} from '../../../../../stores'; -import FileConfigs from './FileConfigs'; -import TypeConfigs from './TypeConfigs'; -import { useInitDataImport } from '../../../../../hooks'; - -import './DataMapConfigs.less'; - -export interface DataMapConfigsProps { - height?: string; -} - -const DataMapConfigs: React.FC = observer(({ height }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const isInitReady = useInitDataImport(); - const realHeight = height ? height : 'calc(100vh - 194px)'; - - return isInitReady ? ( -
    - { - // reset state from the previous file - dataMapStore.resetDataMaps(); - - // if data import starts, do not expand collpase - if (!serverDataImportStore.isServerStartImport) { - dataMapStore.switchExpand('file', true); - } - - dataMapStore.setSelectedFileId(Number(e.key)); - dataMapStore.setSelectedFileInfo(); - serverDataImportStore.switchImporting(false); - }} - > - {dataMapStore.fileMapInfos - .filter(({ file_status }) => file_status === 'COMPLETED') - .map(({ id, name }) => ( - - {name} - - ))} - -
    - - -
    -
    - ) : null; -}); - -export default DataMapConfigs; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx deleted file mode 100644 index 84729a65a..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx +++ /dev/null @@ -1,1707 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useState } from 'react'; -import { observer } from 'mobx-react'; -import { isUndefined, isEmpty, size, cloneDeep } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Input, Select, Checkbox, Message } from 'hubble-ui'; - -import { Tooltip } from '../../../../common'; -import { DataImportRootStoreContext } from '../../../../../stores'; -import { - VertexType, - EdgeType -} from '../../../../../stores/types/GraphManagementStore/metadataConfigsStore'; -import TypeConfigManipulations from './TypeConfigManipulations'; -import { getUnicodeLength } from '../../../../../utils'; - -import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; -import BlueArrowIcon from '../../../../../assets/imgs/ic_arrow_blue.svg'; -import CloseIcon from '../../../../../assets/imgs/ic_close_16.svg'; -import MapIcon from '../../../../../assets/imgs/ic_yingshe_16.svg'; - -export interface EdgeMapProps { - checkOrEdit: 'check' | 'edit' | boolean; - onCancelCreateEdge: () => void; - edgeMapIndex?: number; -} - -const EdgeMap: React.FC = observer( - ({ checkOrEdit, onCancelCreateEdge, edgeMapIndex }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore } = dataImportRootStore; - const [isAddMapping, switchAddMapping] = useState(false); - const [isExpandAdvance, switchExpandAdvance] = useState(false); - const { t } = useTranslation(); - - const isCheck = checkOrEdit === 'check'; - const isEdit = checkOrEdit === 'edit'; - const edgeMap = - checkOrEdit !== false - ? dataMapStore.editedEdgeMap! - : dataMapStore.newEdgeType; - const filteredColumnNamesInSelection = - checkOrEdit !== false - ? dataMapStore.filteredColumnNamesInEdgeEditSelection - : dataMapStore.filteredColumnNamesInEdgeNewSelection; - - const findEdge = (collection: EdgeType[], label: string) => - collection.find(({ name }) => name === label); - - const findVertex = (collection: VertexType[], label: string) => - collection.find(({ name }) => name === label); - - const selectedEdge = findEdge(dataImportRootStore.edgeTypes, edgeMap.label); - - let selectedSourceVertex: VertexType | undefined; - let selectedTargetVertex: VertexType | undefined; - - if (!isUndefined(selectedEdge)) { - selectedSourceVertex = findVertex( - dataImportRootStore.vertexTypes, - selectedEdge.source_label - ); - selectedTargetVertex = findVertex( - dataImportRootStore.vertexTypes, - selectedEdge.target_label - ); - } - - const isStrategyAutomatic = - selectedSourceVertex?.id_strategy === 'AUTOMATIC' || - selectedTargetVertex?.id_strategy === 'AUTOMATIC'; - - const handleExpand = () => { - dataMapStore.switchExpand('type', !dataMapStore.isExpandTypeConfig); - }; - - const handleExpandAdvance = () => { - switchExpandAdvance(!isExpandAdvance); - }; - - const wrapperName = classnames({ - 'import-tasks-data-map-config-card': !Boolean(checkOrEdit), - 'import-tasks-data-map-config-view': Boolean(checkOrEdit) - }); - - const expandAdvanceClassName = classnames({ - 'import-tasks-step-content-header-expand': isExpandAdvance, - 'import-tasks-step-content-header-collpase': !isExpandAdvance - }); - - const expandAddMapClassName = classnames({ - 'import-tasks-step-content-header-expand': isAddMapping, - 'import-tasks-step-content-header-collpase': !isAddMapping - }); - - const addMappingManipulationClassName = classnames({ - 'import-tasks-manipulation': true, - 'import-tasks-manipulation-disabled': - size(filteredColumnNamesInSelection) === 0 || isStrategyAutomatic - }); - - const addNullValueClassName = classnames({ - 'import-tasks-manipulation': true, - 'import-tasks-manipulation-disabled': edgeMap.null_values.customized.includes( - '' - ) - }); - - const addPropertyMapClassName = classnames({ - 'import-tasks-manipulation': true, - 'import-tasks-manipulation-disabled': - !dataMapStore.allowAddPropertyMapping('edge') || isStrategyAutomatic - }); - - return ( -
    - {Boolean(checkOrEdit) ? ( -
    - {t('data-configs.type.basic-settings')} -
    - ) : ( -
    - {t('data-configs.type.edge.title')} - collpaseOrExpand -
    - )} -
    - - {t('data-configs.type.edge.type')}: - - {isCheck ? ( - {dataMapStore.editedEdgeMap!.label} - ) : ( - - )} -
    - - {!isUndefined(selectedSourceVertex) && ( -
    - - {t('data-configs.type.edge.source-ID-strategy')}: - - - {t('data-configs.type.hint.lack-support-for-automatic')} - - } - > - {t( - `data-configs.type.ID-strategy.${selectedSourceVertex?.id_strategy}` - )} - {selectedSourceVertex?.id_strategy === 'PRIMARY_KEY' && - `-${selectedSourceVertex?.primary_keys.join(',')}`} - -
    - )} - {edgeMap.source_fields.map((idField, fieldIndex) => { - return ( -
    - - {t('data-configs.type.edge.ID-column') + - (selectedSourceVertex?.id_strategy === 'PRIMARY_KEY' - ? fieldIndex + 1 - : '')} - : - - {isCheck ? ( - {idField} - ) : ( - - )} -
    - ); - })} - - {!isUndefined(selectedTargetVertex) && ( -
    - - {t('data-configs.type.edge.target-ID-strategy')}: - - - {t('data-configs.type.hint.lack-support-for-automatic')} - - } - > - {t( - `data-configs.type.ID-strategy.${selectedTargetVertex?.id_strategy}` - )} - {selectedTargetVertex?.id_strategy === 'PRIMARY_KEY' && - `-${selectedTargetVertex?.primary_keys.join(',')}`} - -
    - )} - {edgeMap.target_fields.map((idField, fieldIndex) => { - return ( -
    - - {t('data-configs.type.edge.ID-column') + - (selectedTargetVertex?.id_strategy === 'PRIMARY_KEY' - ? fieldIndex + 1 - : '')} - : - - {isCheck ? ( - {idField} - ) : ( - - )} -
    - ); - })} - -
    - - {t('data-configs.type.edge.map-settings')}: - -
    - {isCheck && - isEmpty(dataMapStore.editedEdgeMap?.field_mapping) && - '-'} - - {((Boolean(checkOrEdit) === false && - !isEmpty(dataMapStore.newEdgeType.field_mapping)) || - (Boolean(checkOrEdit) !== false && - !isEmpty(dataMapStore.editedEdgeMap!.field_mapping))) && ( -
    -
    - {t('data-configs.type.edge.add-map.name')} -
    -
    - {t('data-configs.type.edge.add-map.sample')} -
    -
    - {t('data-configs.type.edge.add-map.property')} -
    -
    - {!isCheck && ( - { - isEdit - ? dataMapStore.toggleEdgeSelectAllFieldMapping( - 'edit', - false, - selectedEdge - ) - : dataMapStore.toggleEdgeSelectAllFieldMapping( - 'new', - false, - selectedEdge - ); - }} - > - {t('data-configs.type.edge.add-map.clear')} - - )} -
    -
    - )} - {edgeMap.field_mapping.map( - ({ column_name, mapped_name }, fieldIndex) => { - const param = checkOrEdit === false ? 'new' : 'edit'; - - return ( -
    -
    - {column_name} -
    -
    - { - dataMapStore.selectedFileInfo?.file_setting - .column_values[ - dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( - (name) => column_name === name - ) - ] - } -
    -
    - {isCheck ? ( - {mapped_name} - ) : ( - - )} -
    -
    - {!isCheck && ( - close { - dataMapStore.removeEdgeFieldMapping( - param, - column_name - ); - }} - /> - )} -
    -
    - ); - } - )} - - {!isCheck && ( - <> -
    { - if ( - size(filteredColumnNamesInSelection) === 0 || - isStrategyAutomatic - ) { - switchAddMapping(false); - return; - } - - switchAddMapping(!isAddMapping); - }} - > -
    - {t('data-configs.type.edge.add-map.title')} -
    - expand -
    - {isAddMapping && ( -
    -
    - - { - if (isEdit) { - const isIndeterminate = - !isEmpty( - dataMapStore.editedEdgeMap?.field_mapping - ) && - size( - dataMapStore.editedEdgeMap?.field_mapping - ) !== - size( - dataMapStore.filteredColumnNamesInEdgeEditSelection - ); - - dataMapStore.toggleEdgeSelectAllFieldMapping( - 'edit', - // if isIndeterminate is true, e.target.checked is false - isIndeterminate || e.target.checked, - selectedEdge - ); - } else { - const isIndeterminate = - !isEmpty( - dataMapStore.newEdgeType.field_mapping - ) && - size(dataMapStore.newEdgeType.field_mapping) !== - size( - dataMapStore.filteredColumnNamesInEdgeNewSelection - ); - - dataMapStore.toggleEdgeSelectAllFieldMapping( - 'new', - isIndeterminate || e.target.checked, - selectedEdge - ); - } - }} - > - {t('data-configs.type.edge.select-all')} - - -
    - {filteredColumnNamesInSelection.map((name) => { - const param = isEdit ? 'edit' : 'new'; - - let combinedText = name; - let currentColumnValue = dataMapStore.selectedFileInfo - ?.file_setting.column_values[ - dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( - (columnName) => name === columnName - ) - ] as string; - combinedText += `(${currentColumnValue})`; - - if (getUnicodeLength(combinedText) > 35) { - combinedText = combinedText.slice(0, 35) + '...'; - } - - const mappingValue = selectedEdge?.properties.find( - ({ name: propertyName }) => propertyName === name - )?.name; - - return ( -
    - - column_name === name - ) - ) - } - onChange={(e: any) => { - if (e.target.checked) { - dataMapStore.setEdgeFieldMappingKey( - param, - name, - mappingValue - ); - } else { - dataMapStore.removeEdgeFieldMapping( - param, - name - ); - } - }} - > - {combinedText} - - -
    - ); - })} -
    - )} - - )} -
    -
    - -
    - {t('data-configs.type.edge.advance.title')} - {!isCheck && ( - collpaseOrExpand - )} -
    - {(isExpandAdvance || isCheck) && ( - <> -
    - - {t('data-configs.type.edge.advance.nullable-list.title')}: - - {isCheck ? ( - - {dataMapStore - .editedEdgeMap!.null_values.checked.filter( - (value) => value !== 'null' - ) - .map((value) => - value === '' - ? t('addition.common.null-value') - : value === 'NULL' - ? 'NULL/null' - : value - ) - .concat(dataMapStore.editedEdgeMap!.null_values.customized) - .join(',')} - - ) : ( - <> -
    - { - isEdit - ? dataMapStore.editCheckedNullValues( - 'edit', - 'edge', - checkedList - ) - : dataMapStore.editCheckedNullValues( - 'new', - 'edge', - checkedList - ); - }} - value={ - isEdit - ? dataMapStore.editedEdgeMap!.null_values.checked - : dataMapStore.newEdgeType.null_values.checked - } - > - NULL/null - - {t( - 'data-configs.type.edge.advance.nullable-list.empty' - )} - - -
    - { - dataMapStore.toggleCustomNullValue( - isEdit ? 'edit' : 'new', - 'edge', - e.target.checked - ); - - if (e.target.checked) { - dataMapStore.addValidateValueMappingOption( - 'null_values' - ); - } else { - dataMapStore.resetValidateValueMapping( - 'null_values' - ); - } - }} - > - {t( - 'data-configs.type.edge.advance.nullable-list.custom' - )} - -
    -
    -
    - {isEdit ? ( - <> - {dataMapStore.editedEdgeMap?.null_values.customized.map( - (nullValue, nullValueIndex) => ( -
    - { - dataMapStore.editCustomNullValues( - 'edit', - 'edge', - e.value, - nullValueIndex - ); - - dataMapStore.validateValueMapping( - 'edge', - 'edit', - 'null_values', - nullValueIndex - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore.validateAdvanceConfigErrorMessage - .null_values[nullValueIndex] - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'edge', - 'edit', - 'null_values', - nullValueIndex - ); - } - }} - /> -
    - ) - )} - {!isEmpty( - dataMapStore.editedEdgeMap?.null_values.customized - ) && ( -
    - { - const extraNullValues = - dataMapStore.editedEdgeMap?.null_values - .customized; - - if (!extraNullValues?.includes('')) { - dataMapStore.addCustomNullValues( - 'edit', - 'edge' - ); - } - }} - > - {t('data-configs.manipulations.add')} - -
    - )} - - ) : ( - <> - {dataMapStore.newEdgeType.null_values.customized.map( - (nullValue, nullValueIndex) => ( -
    - { - dataMapStore.editCustomNullValues( - 'new', - 'edge', - e.value, - nullValueIndex - ); - - dataMapStore.validateValueMapping( - 'edge', - 'new', - 'null_values', - nullValueIndex - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore.validateAdvanceConfigErrorMessage - .null_values[nullValueIndex] - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'edge', - 'new', - 'null_values', - nullValueIndex - ); - } - }} - /> -
    - ) - )} - {!isEmpty( - dataMapStore.newEdgeType.null_values.customized - ) && ( -
    - { - const extraNullValues = - dataMapStore.newEdgeType?.null_values - .customized; - - if (!extraNullValues.includes('')) { - dataMapStore.addCustomNullValues( - 'new', - 'edge' - ); - } - }} - > - {t('data-configs.manipulations.add')} - -
    - )} - - )} -
    - - )} -
    - -
    - - {t('data-configs.type.edge.advance.map-property-value.title')}: - - {!isCheck && - (isEdit - ? isEmpty(dataMapStore.editedEdgeMap?.value_mapping) - : isEmpty(dataMapStore.newEdgeType.value_mapping)) && ( -
    { - if (isStrategyAutomatic) { - return; - } - - isEdit - ? dataMapStore.addEdgeValueMapping('edit') - : dataMapStore.addEdgeValueMapping('new'); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings' - ); - }} - > - {t( - 'data-configs.type.edge.advance.map-property-value.add-value' - )} -
    - )} - - {isCheck && ( -
    - {isEmpty(dataMapStore.editedEdgeMap?.value_mapping) - ? '-' - : dataMapStore.editedEdgeMap?.value_mapping.map( - ({ column_name, values }, valueMapIndex) => ( -
    -
    - - {t( - 'data-configs.type.edge.advance.map-property-value.fields.property' - )} - {valueMapIndex + 1}: - - {column_name} -
    - {values.map(({ column_value, mapped_value }) => ( -
    - - {t( - 'data-configs.type.edge.advance.map-property-value.fields.value-map' - )} - - {column_value} - map - {mapped_value} -
    - ))} -
    - ) - )} -
    - )} -
    - - {/* property value mapping form */} - {!isCheck && - (!Boolean(checkOrEdit) - ? dataMapStore.newEdgeType.value_mapping.map( - ({ column_name, values }, valueMapIndex) => ( -
    -
    - - {t( - 'data-configs.type.edge.advance.map-property-value.fields.property' - )} - {valueMapIndex + 1}: - - - { - dataMapStore.removeEdgeValueMapping( - 'new', - valueMapIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'edge', - 'new', - 'value_mappings', - valueMapIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - -
    -
    - - {t( - 'data-configs.type.edge.advance.map-property-value.fields.value-map' - )} - : - -
    - {values.map( - ({ column_value, mapped_value }, valueIndex) => ( -
    - { - dataMapStore.editEdgeValueMappingColumnValueName( - 'new', - 'column_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'edge', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].column_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'edge', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - } - }} - /> - map - { - dataMapStore.editEdgeValueMappingColumnValueName( - 'new', - 'mapped_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'edge', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].mapped_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'edge', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - } - }} - /> - {values.length > 1 && ( - { - dataMapStore.removeEdgeValueMappingValue( - 'new', - valueMapIndex, - valueIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'edge', - 'new', - 'value_mappings_value', - valueMapIndex, - valueIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - - )} -
    - ) - )} -
    -
    - { - if ( - !dataMapStore.allowAddPropertyValueMapping( - 'edge', - valueMapIndex - ) - ) { - return; - } - - dataMapStore.addEdgeValueMappingValue( - 'new', - valueMapIndex - ); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings_value', - valueMapIndex - ); - }} - > - {t( - 'data-configs.type.edge.advance.map-property-value.fields.add-value-map' - )} - -
    -
    -
    -
    -
    - ) - ) - : dataMapStore.editedEdgeMap?.value_mapping.map( - ({ column_name, values }, valueMapIndex) => ( -
    -
    - - {t( - 'data-configs.type.edge.advance.map-property-value.fields.property' - )} - {valueMapIndex + 1}: - - - { - dataMapStore.removeEdgeValueMapping( - 'edit', - valueMapIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'edge', - 'edit', - 'value_mappings', - valueMapIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - -
    -
    - - {t( - 'data-configs.type.edge.advance.map-property-value.fields.value-map' - )} - : - -
    - {values.map( - ({ column_value, mapped_value }, valueIndex) => ( -
    - { - dataMapStore.editEdgeValueMappingColumnValueName( - 'edit', - 'column_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'edge', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].column_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'edge', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - } - }} - /> - map - { - dataMapStore.editEdgeValueMappingColumnValueName( - 'edit', - 'mapped_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'edge', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].mapped_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'edge', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - } - }} - /> - {values.length > 1 && ( - { - dataMapStore.removeEdgeValueMappingValue( - 'edit', - valueMapIndex, - valueIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'edge', - 'edit', - 'value_mappings_value', - valueMapIndex, - valueIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - - )} -
    - ) - )} -
    -
    - { - if ( - !dataMapStore.allowAddPropertyValueMapping( - 'edge', - valueMapIndex - ) - ) { - return; - } - - dataMapStore.addEdgeValueMappingValue( - 'edit', - valueMapIndex - ); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings_value', - valueMapIndex - ); - }} - > - {t( - 'data-configs.type.edge.advance.map-property-value.fields.add-value-map' - )} - -
    -
    -
    -
    -
    - ) - ))} - - {!isCheck && - (isEdit - ? !isEmpty(dataMapStore.editedEdgeMap?.value_mapping) - : !isEmpty(dataMapStore.newEdgeType.value_mapping)) && ( -
    { - if (!dataMapStore.allowAddPropertyMapping('edge')) { - return; - } - - isEdit - ? dataMapStore.addEdgeValueMapping('edit') - : dataMapStore.addEdgeValueMapping('new'); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings' - ); - }} - > - {t( - 'data-configs.type.edge.advance.map-property-value.add-value' - )} -
    - )} - - )} - - {!isCheck && ( - - isEmpty(mapped_name) - ) || - !dataMapStore.allowAddPropertyMapping('edge') || - !dataMapStore.isValidateSave - } - onCreate={async () => { - dataMapStore.switchAddNewTypeConfig(false); - dataMapStore.switchEditTypeConfig(false); - - isEdit - ? await dataMapStore.updateEdgeMap( - 'upgrade', - dataMapStore.selectedFileId - ) - : await dataMapStore.updateEdgeMap( - 'add', - dataMapStore.selectedFileId - ); - - if (dataMapStore.requestStatus.updateEdgeMap === 'failed') { - Message.error({ - content: dataMapStore.errorInfo.updateEdgeMap.message, - size: 'medium', - showCloseIcon: false - }); - } - - onCancelCreateEdge(); - dataMapStore.resetNewMap('edge'); - }} - onCancel={() => { - dataMapStore.switchAddNewTypeConfig(false); - dataMapStore.switchEditTypeConfig(false); - - if (!isEdit) { - dataMapStore.resetNewMap('edge'); - } else { - dataMapStore.resetEditMapping('edge'); - } - - onCancelCreateEdge(); - dataMapStore.resetNewMap('edge'); - dataMapStore.resetValidateValueMapping('all'); - }} - /> - )} -
    - ); - } -); - -export default EdgeMap; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx deleted file mode 100644 index d8f9cc00f..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx +++ /dev/null @@ -1,395 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { range, rangeRight } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Radio, Switch, Input, Select, Button, Message } from 'hubble-ui'; - -import { DataImportRootStoreContext } from '../../../../../stores'; - -import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; - -const separators = [',', ';', '\\t', ' ']; -const charsets = ['UTF-8', 'GBK', 'ISO-8859-1', 'US-ASCII']; -const dateFormat = [ - 'yyyy-MM-dd', - 'yyyy-MM-dd HH:mm:ss', - 'yyyy-MM-dd HH:mm:ss.SSS' -]; - -const timezones = rangeRight(1, 13) - .map((num) => `GMT-${num}`) - .concat(['GMT']) - .concat(range(1, 13).map((num) => `GMT+${num}`)); - -const styles = { - smallGap: { - marginBottom: 18 - }, - mediumGap: { - marginBottom: 23 - } -}; - -const FileConfigs: React.FC = observer(() => { - const { dataMapStore, serverDataImportStore } = useContext( - DataImportRootStoreContext - ); - const { t } = useTranslation(); - - const expandClassName = classnames({ - 'import-tasks-step-content-header-expand': dataMapStore.isExpandFileConfig, - 'import-tasks-step-content-header-collpase': !dataMapStore.isExpandFileConfig - }); - - const handleExpand = () => { - dataMapStore.switchExpand('file', !dataMapStore.isExpandFileConfig); - }; - - return ( - dataMapStore.selectedFileInfo && ( -
    -
    - {t('data-configs.file.title')} - collpaseOrExpand -
    - {dataMapStore.isExpandFileConfig && ( - <> -
    - - {t('data-configs.file.include-header')}: - - { - dataMapStore.setFileConfig('has_header', checked); - }} - /> -
    -
    - - {t('data-configs.file.delimiter.title')}: - -
    - ) => { - if (e.target.value === 'custom') { - dataMapStore.setFileConfig('delimiter', ''); - } else { - dataMapStore.setFileConfig('delimiter', e.target.value); - // reset validate error message of delimiter - dataMapStore.validateFileInfo('delimiter'); - } - }} - > - - {t('data-configs.file.delimiter.comma')} - - - {t('data-configs.file.delimiter.semicolon')} - - - {t('data-configs.file.delimiter.tab')} - - - {t('data-configs.file.delimiter.space')} - - - {t('data-configs.file.delimiter.custom')} - - -
    - {!separators.includes( - dataMapStore.selectedFileInfo!.file_setting.delimiter - ) && ( -
    - { - dataMapStore.setFileConfig('delimiter', e.value); - dataMapStore.validateFileInfo('delimiter'); - }} - errorMessage={ - dataMapStore.validateFileInfoErrorMessage.delimiter - } - errorLocation="layer" - originInputProps={{ - onBlur: () => { - dataMapStore.validateFileInfo('delimiter'); - } - }} - /> -
    - )} -
    -
    - - {t('data-configs.file.code-type.title')}: - -
    - ) => { - if (e.target.value === 'custom') { - dataMapStore.setFileConfig('charset', ''); - } else { - dataMapStore.setFileConfig('charset', e.target.value); - dataMapStore.validateFileInfo('charset'); - } - }} - > - - {t('data-configs.file.code-type.UTF-8')} - - - {t('data-configs.file.code-type.GBK')} - - - {t('data-configs.file.code-type.ISO-8859-1')} - - - {t('data-configs.file.code-type.US-ASCII')} - - - {t('data-configs.file.code-type.custom')} - - -
    - {!charsets.includes( - dataMapStore.selectedFileInfo!.file_setting.charset - ) && ( -
    - { - dataMapStore.setFileConfig('charset', e.value); - dataMapStore.validateFileInfo('charset'); - }} - errorMessage={ - dataMapStore.validateFileInfoErrorMessage.charset - } - errorLocation="layer" - originInputProps={{ - onBlur: () => { - dataMapStore.validateFileInfo('charset'); - } - }} - /> -
    - )} -
    -
    - - {t('data-configs.file.date-type.title')}: - -
    - ) => { - if (e.target.value === 'custom') { - dataMapStore.setFileConfig('date_format', ''); - } else { - dataMapStore.setFileConfig('date_format', e.target.value); - dataMapStore.validateFileInfo('date_format'); - } - }} - > - yyyy-MM-dd - yyyy-MM-dd HH:MM:SS - - yyyy-MM-dd HH:mm:ss.SSS - - - {t('data-configs.file.code-type.custom')} - - - {!dateFormat.includes( - dataMapStore.selectedFileInfo!.file_setting.date_format - ) && ( -
    - { - dataMapStore.setFileConfig('date_format', e.value); - dataMapStore.validateFileInfo('date_format'); - }} - errorMessage={ - dataMapStore.validateFileInfoErrorMessage.date_format - } - errorLocation="layer" - originInputProps={{ - onBlur: () => { - dataMapStore.validateFileInfo('date_format'); - } - }} - /> -
    - )} -
    -
    -
    - - {t('data-configs.file.skipped-line')}: - - { - dataMapStore.setFileConfig('skipped_line', e.value); - dataMapStore.validateFileInfo('skipped_line'); - }} - errorLocation="layer" - errorMessage={ - dataMapStore.validateFileInfoErrorMessage.skipped_line - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateFileInfo('skipped_line'); - } - }} - /> -
    -
    - - {t('data-configs.file.timezone')}: - - -
    - {!dataMapStore.readOnly && !dataMapStore.lock && ( -
    - - -
    - )} - - )} -
    - ) - ); -}); - -export default FileConfigs; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx deleted file mode 100644 index 61cb5c877..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import { observer } from 'mobx-react'; -import { useTranslation } from 'react-i18next'; -import { Button } from 'hubble-ui'; - -interface TypeConfigManipulationsProps { - type: 'vertex' | 'edge'; - status: 'add' | 'edit'; - disableSave?: boolean; - onCreate: () => void; - onCancel: () => void; -} - -const TypeConfigManipulations: React.FC = observer( - ({ type, status, onCreate, onCancel, disableSave = false }) => { - const { t } = useTranslation(); - - return ( -
    - -
    - - -
    -
    - ); - } -); - -export default TypeConfigManipulations; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx deleted file mode 100644 index f50a71637..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useState, useEffect, useRef } from 'react'; -import { observer } from 'mobx-react'; -import { isEmpty, size } from 'lodash-es'; -import { useLocation } from 'wouter'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Button } from 'hubble-ui'; - -import { DataImportRootStoreContext } from '../../../../../stores'; - -import { Tooltip } from '../../../../common'; -import TypeInfo from './TypeInfo'; -import VertexMap from './VertexMap'; -import EdgeMap from './EdgeMap'; - -import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; - -const TypeConfigs: React.FC = observer(() => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const [isExpand, switchExpand] = useState(true); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [isCreateVertexMap, switchCreateVertexMap] = useState(false); - const [isCreateEdgeMap, switchCreateEdgeMap] = useState(false); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const shouldRevealInitalButtons = - !isCreateVertexMap && - !isCreateEdgeMap && - isEmpty(dataMapStore.selectedFileInfo?.vertex_mappings) && - isEmpty(dataMapStore.selectedFileInfo?.edge_mappings); - - const invalidFileMaps = !dataMapStore.isIrregularProcess - ? dataMapStore.fileMapInfos.filter( - ({ name, vertex_mappings, edge_mappings }) => - dataImportRootStore.successFileUploadTaskNames.includes(name) && - isEmpty(vertex_mappings) && - isEmpty(edge_mappings) - ) - : dataMapStore.fileMapInfos.filter( - ({ vertex_mappings, edge_mappings }) => - isEmpty(vertex_mappings) && isEmpty(edge_mappings) - ); - - const expandClassName = classnames({ - 'import-tasks-step-content-header-expand': isExpand, - 'import-tasks-step-content-header-collpase': !isExpand - }); - - const nextButtonTooltipClassName = classnames({ - 'import-tasks-data-map-tooltip': true, - 'no-display': size(invalidFileMaps) === 0 - }); - - const handleExpand = () => { - switchExpand(!isExpand); - }; - - const handleCreate = (type: 'vertex' | 'edge', flag: boolean) => () => { - dataMapStore.switchExpand('file', false); - // Adding a new type config counts editing as well - dataMapStore.switchAddNewTypeConfig(flag); - - if (type === 'vertex') { - switchCreateVertexMap(flag); - } else { - switchCreateEdgeMap(flag); - } - }; - - useEffect(() => { - // close dashboard when user selects another file - // since the state is not in mobx store, we have to do this for now - switchCreateVertexMap(false); - switchCreateEdgeMap(false); - switchExpand(true); - }, [dataMapStore.selectedFileId]); - - return ( -
    -
    - - {t('data-configs.type.title')} - - collpaseOrExpand - {!dataMapStore.readOnly && - !dataMapStore.lock && - !shouldRevealInitalButtons && ( - - )} -
    - {!dataMapStore.readOnly && - !dataMapStore.lock && - shouldRevealInitalButtons && ( - - )} - {isExpand && ( - <> - {isCreateVertexMap && ( - - )} - {isCreateEdgeMap && ( - - )} - {dataMapStore.selectedFileInfo?.vertex_mappings - .map((mapping, index) => ( - - )) - .reverse()} - {dataMapStore.selectedFileInfo?.edge_mappings - .map((mapping, index) => ( - - )) - .reverse()} - - )} - {!dataMapStore.readOnly && ( -
    - {!serverDataImportStore.isServerStartImport && ( - - )} - -
    - {t('data-configs.type.hint.no-vertex-or-edge-mapping')} -
    - {invalidFileMaps.map(({ name }) => ( -
    - {name} -
    - ))} - - } - > - -
    -
    - )} -
    - ); -}); - -export interface TypeConfigMapCreationsProps { - onCreateVertex: () => void; - onCreateEdge: () => void; - disabled?: boolean; -} - -const TypeConfigMapCreations: React.FC = observer( - ({ onCreateVertex, onCreateEdge, disabled = false }) => { - const { t } = useTranslation(); - - return ( -
    - - -
    - ); - } -); - -export default TypeConfigs; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx deleted file mode 100644 index 2274f54e6..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useState, - useRef, - useContext, - useCallback, - useEffect -} from 'react'; -import { observer } from 'mobx-react'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Button } from 'hubble-ui'; - -import { Tooltip } from '../../../../common'; -import { DataImportRootStoreContext } from '../../../../../stores'; -import VertexMap from './VertexMap'; -import EdgeMap from './EdgeMap'; - -import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; -import { VertexType } from '../../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -export interface TypeInfoProps { - type: 'vertex' | 'edge'; - mapIndex: number; -} - -const TypeInfo: React.FC = observer(({ type, mapIndex }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [isExpand, switchExpand] = useState(false); - const [isDeletePop, switchDeletePop] = useState(false); - const [checkOrEdit, setCheckOrEdit] = useState<'check' | 'edit' | boolean>( - false - ); - const typeInfoWrapperRef = useRef(null); - const manipulationAreaRef = useRef(null); - const editButtonRef = useRef(null); - const deleteButtonRef = useRef(null); - const deleteWrapperRef = useRef(null); - const { t } = useTranslation(); - - let vertexInfo: VertexType | undefined; - let sourceVertexInfo: VertexType | undefined; - let targetVertexInfo: VertexType | undefined; - - if (type === 'vertex') { - vertexInfo = dataImportRootStore.vertexTypes.find( - ({ name }) => - name === dataMapStore.selectedFileInfo?.vertex_mappings[mapIndex].label - ); - } else { - const edgeInfo = dataImportRootStore.edgeTypes.find( - ({ name }) => - name === dataMapStore.selectedFileInfo!.edge_mappings[mapIndex].label - ); - - sourceVertexInfo = dataImportRootStore.vertexTypes.find( - ({ name }) => name === edgeInfo?.source_label - ); - - targetVertexInfo = dataImportRootStore.vertexTypes.find( - ({ name }) => name === edgeInfo?.target_label - ); - } - - const handleImgClickExpand = () => { - switchExpand(!isExpand); - - if (Boolean(checkOrEdit)) { - if (checkOrEdit === 'edit') { - dataMapStore.switchEditTypeConfig(false); - } - - setCheckOrEdit(false); - } else { - if (type === 'vertex') { - dataMapStore.syncEditMap('vertex', mapIndex); - } else { - dataMapStore.syncEditMap('edge', mapIndex); - } - - setCheckOrEdit('check'); - } - }; - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - if ( - isDeletePop && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - switchDeletePop(false); - } - }, - [isDeletePop] - ); - - const handleTypeInfoExpandClick = useCallback( - (e: MouseEvent) => { - if ( - manipulationAreaRef.current && - !manipulationAreaRef.current?.contains(e.target as Element) - ) { - handleImgClickExpand(); - } - }, - [handleImgClickExpand] - ); - - const expandClassName = classnames({ - expand: isExpand, - collpase: !isExpand - }); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - typeInfoWrapperRef.current!.addEventListener( - 'click', - handleTypeInfoExpandClick, - false - ); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - typeInfoWrapperRef.current!.removeEventListener( - 'click', - handleTypeInfoExpandClick, - false - ); - }; - }, [handleOutSideClick, handleTypeInfoExpandClick]); - - return ( -
    -
    -
    -
    - collpaseOrExpand -
    -
    - - {t('data-configs.type.info.type')} - - - {type === 'vertex' - ? t('data-configs.type.vertex.type') - : t('data-configs.type.edge.type')} - -
    -
    -
    - - {t('data-configs.type.info.name')} - - - {type === 'vertex' - ? dataMapStore.selectedFileInfo?.vertex_mappings[mapIndex].label - : dataMapStore.selectedFileInfo?.edge_mappings[mapIndex].label} - -
    -
    - - {t('data-configs.type.info.ID-strategy')} - - - {type === 'vertex' - ? t(`data-configs.type.ID-strategy.${vertexInfo?.id_strategy}`) + - (vertexInfo?.id_strategy === 'PRIMARY_KEY' - ? '-' + vertexInfo?.primary_keys.join(',') - : '') - : `${t('addition.common.source')}:${ - t( - `data-configs.type.ID-strategy.${sourceVertexInfo?.id_strategy}` - ) + - (sourceVertexInfo?.id_strategy === 'PRIMARY_KEY' - ? '-' + sourceVertexInfo?.primary_keys.join(',') - : '') - } ${t('addition.common.target')}:${ - t( - `data-configs.type.ID-strategy.${targetVertexInfo?.id_strategy}` - ) + - (targetVertexInfo?.id_strategy === 'PRIMARY_KEY' - ? '-' + targetVertexInfo?.primary_keys.join(',') - : '') - }`} - -
    -
    - {!dataMapStore.readOnly && !dataMapStore.lock && ( - <> - - -

    - {t('data-configs.manipulations.hints.delete-confirm')} -

    -

    {t('data-configs.manipulations.hints.warning')}

    -
    - - -
    -
    - } - childrenProps={{ - onClick() { - switchDeletePop(true); - } - }} - > - - - - )} -
    -
    - {isExpand && Boolean(checkOrEdit) && type === 'vertex' && ( - { - setCheckOrEdit(false); - switchExpand(false); - }} - vertexMapIndex={mapIndex} - /> - )} - {isExpand && Boolean(checkOrEdit) && type === 'edge' && ( - { - setCheckOrEdit(false); - switchExpand(false); - }} - edgeMapIndex={mapIndex} - /> - )} - - ); -}); - -export default TypeInfo; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx deleted file mode 100644 index b9e2f283e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx +++ /dev/null @@ -1,1628 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useCallback, - useRef, - useEffect -} from 'react'; -import { observer } from 'mobx-react'; -import { isUndefined, isEmpty, size, cloneDeep } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Input, Select, Checkbox, Message } from 'hubble-ui'; - -import { Tooltip } from '../../../../common'; -import TypeConfigManipulations from './TypeConfigManipulations'; -import { DataImportRootStoreContext } from '../../../../../stores'; -import { VertexType } from '../../../../../stores/types/GraphManagementStore/metadataConfigsStore'; -import { getUnicodeLength } from '../../../../../utils'; - -import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; -import BlueArrowIcon from '../../../../../assets/imgs/ic_arrow_blue.svg'; -import CloseIcon from '../../../../../assets/imgs/ic_close_16.svg'; -import MapIcon from '../../../../../assets/imgs/ic_yingshe_16.svg'; - -export interface VertexMapProps { - checkOrEdit: 'check' | 'edit' | boolean; - onCancelCreateVertex: () => void; - vertexMapIndex?: number; -} - -const VertexMap: React.FC = observer( - ({ checkOrEdit, onCancelCreateVertex, vertexMapIndex }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore } = dataImportRootStore; - const [isAddMapping, switchAddMapping] = useState(false); - const [isExpandAdvance, switchExpandAdvance] = useState(false); - const addMappingWrapperRef = useRef(null); - const { t } = useTranslation(); - - const isCheck = checkOrEdit === 'check'; - const isEdit = checkOrEdit === 'edit'; - const vertexMap = - checkOrEdit !== false - ? dataMapStore.editedVertexMap! - : dataMapStore.newVertexType; - const filteredColumnNamesInSelection = - checkOrEdit !== false - ? dataMapStore.filteredColumnNamesInVertexEditSelection - : dataMapStore.filteredColumnNamesInVertexNewSelection; - - const findVertex = (collection: VertexType[], label: string) => - collection.find(({ name }) => name === label); - - const selectedVertex = findVertex( - dataImportRootStore.vertexTypes, - vertexMap.label - ); - - const isStrategyAutomatic = selectedVertex?.id_strategy === 'AUTOMATIC'; - - const handleAdvanceExpand = () => { - switchExpandAdvance(!isExpandAdvance); - }; - - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // if clicked element is not on dropdown, collpase it - if ( - isAddMapping && - addMappingWrapperRef.current && - !addMappingWrapperRef.current.contains(e.target as Element) - ) { - switchAddMapping(false); - } - }, - [isAddMapping] - ); - - const wrapperName = classnames({ - 'import-tasks-data-map-config-card': !Boolean(checkOrEdit), - 'import-tasks-data-map-config-view': Boolean(checkOrEdit) - }); - - const expandAdvanceClassName = classnames({ - 'import-tasks-step-content-header-expand': isExpandAdvance, - 'import-tasks-step-content-header-collpase': !isExpandAdvance - }); - - const expandAddMapClassName = classnames({ - 'import-tasks-step-content-header-expand': isAddMapping, - 'import-tasks-step-content-header-collpase': !isAddMapping - }); - - const addMappingManipulationClassName = classnames({ - 'import-tasks-manipulation': true, - 'import-tasks-manipulation-disabled': - size(filteredColumnNamesInSelection) === 0 || isStrategyAutomatic - }); - - const addNullValueClassName = classnames({ - 'import-tasks-manipulation': true, - 'import-tasks-manipulation-disabled': isEdit - ? dataMapStore.editedVertexMap!.null_values.customized.includes('') - : dataMapStore.newVertexType.null_values.customized.includes('') - }); - - const addPropertyMapClassName = classnames({ - 'import-tasks-manipulation': true, - 'import-tasks-manipulation-disabled': - !dataMapStore.allowAddPropertyMapping('vertex') || isStrategyAutomatic - }); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( -
    - {Boolean(checkOrEdit) ? ( -
    - {t('data-configs.type.basic-settings')} -
    - ) : ( -
    - {t('data-configs.type.vertex.title')} - collpaseOrExpand -
    - )} -
    - - {t('data-configs.type.vertex.type')}: - - {isCheck ? ( - {dataMapStore.editedVertexMap!.label} - ) : ( - - )} -
    - {!isUndefined(selectedVertex) && ( -
    - - {t('data-configs.type.vertex.ID-strategy')}: - - - {t('data-configs.type.hint.lack-support-for-automatic')} - - } - > - {t(`data-configs.type.ID-strategy.${selectedVertex.id_strategy}`)} - {selectedVertex.id_strategy === 'PRIMARY_KEY' && - `-${selectedVertex.primary_keys.join(',')}`} - -
    - )} - {vertexMap.id_fields.map((idField, fieldIndex) => { - return ( -
    - - {t('data-configs.type.vertex.ID-column') + - (selectedVertex?.id_strategy === 'PRIMARY_KEY' - ? fieldIndex + 1 - : '')} - : - - {isCheck ? ( - {idField} - ) : ( - - )} -
    - ); - })} - -
    - - {t('data-configs.type.vertex.map-settings')}: - -
    - {isCheck && - isEmpty(dataMapStore.editedVertexMap?.field_mapping) && - '-'} - - {((Boolean(checkOrEdit) === false && - !isEmpty(dataMapStore.newVertexType.field_mapping)) || - (Boolean(checkOrEdit) !== false && - !isEmpty(dataMapStore.editedVertexMap!.field_mapping))) && ( -
    -
    - {t('data-configs.type.vertex.add-map.name')} -
    -
    - {t('data-configs.type.vertex.add-map.sample')} -
    -
    - {t('data-configs.type.vertex.add-map.property')} -
    -
    - {!isCheck && ( - { - isEdit - ? dataMapStore.toggleVertexSelectAllFieldMapping( - 'edit', - false, - selectedVertex - ) - : dataMapStore.toggleVertexSelectAllFieldMapping( - 'new', - false, - selectedVertex - ); - }} - > - {t('data-configs.type.vertex.add-map.clear')} - - )} -
    -
    - )} - - {vertexMap.field_mapping.map( - ({ column_name, mapped_name }, fieldIndex) => { - const param = checkOrEdit === false ? 'new' : 'edit'; - - return ( -
    -
    - {column_name} -
    -
    - { - dataMapStore.selectedFileInfo?.file_setting - .column_values[ - dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( - (name) => column_name === name - ) - ] - } -
    -
    - {isCheck ? ( - {mapped_name} - ) : ( - - )} -
    -
    - {!isCheck && ( - close { - dataMapStore.removeVertexFieldMapping( - param, - column_name - ); - }} - /> - )} -
    -
    - ); - } - )} - - {!isCheck && ( - <> -
    { - if ( - size(filteredColumnNamesInSelection) === 0 || - isStrategyAutomatic - ) { - switchAddMapping(false); - return; - } - - switchAddMapping(!isAddMapping); - }} - > -
    - {t('data-configs.type.vertex.add-map.title')} -
    - expand -
    - {isAddMapping && ( -
    -
    - - { - if (isEdit) { - const isIndeterminate = - !isEmpty( - dataMapStore.editedVertexMap?.field_mapping - ) && - size( - dataMapStore.editedVertexMap?.field_mapping - ) !== - size( - dataMapStore.filteredColumnNamesInVertexEditSelection - ); - - dataMapStore.toggleVertexSelectAllFieldMapping( - 'edit', - // if isIndeterminate is true, e.target.checked is false - isIndeterminate || e.target.checked, - selectedVertex - ); - } else { - const isIndeterminate = - !isEmpty( - dataMapStore.newVertexType.field_mapping - ) && - size( - dataMapStore.newVertexType.field_mapping - ) !== - size( - dataMapStore.filteredColumnNamesInVertexNewSelection - ); - - dataMapStore.toggleVertexSelectAllFieldMapping( - 'new', - isIndeterminate || e.target.checked, - selectedVertex - ); - } - }} - > - {t('data-configs.type.vertex.select-all')} - - -
    - {dataMapStore.selectedFileInfo?.file_setting.column_names - .filter((name) => !vertexMap.id_fields.includes(name)) - .map((name) => { - let combinedText = name; - let currentColumnValue = dataMapStore.selectedFileInfo - ?.file_setting.column_values[ - dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( - (columnName) => name === columnName - ) - ] as string; - combinedText += `(${currentColumnValue})`; - - if (getUnicodeLength(combinedText) > 35) { - combinedText = combinedText.slice(0, 35) + '...'; - } - - const mappingValue = selectedVertex?.properties.find( - ({ name: propertyName }) => propertyName === name - )?.name; - - return ( -
    - - column_name === name - ) - ) - } - onChange={(e: any) => { - if (e.target.checked) { - isEdit - ? dataMapStore.setVertexFieldMappingKey( - 'edit', - name, - mappingValue - ) - : dataMapStore.setVertexFieldMappingKey( - 'new', - name, - mappingValue - ); - } else { - isEdit - ? dataMapStore.removeVertexFieldMapping( - 'edit', - name - ) - : dataMapStore.removeVertexFieldMapping( - 'new', - name - ); - } - }} - > - {combinedText} - - -
    - ); - })} -
    - )} - - )} -
    -
    - -
    - {t('data-configs.type.vertex.advance.title')} - {!isCheck && ( - collpaseOrExpand - )} -
    - {(isExpandAdvance || isCheck) && ( - <> -
    - - {t('data-configs.type.vertex.advance.nullable-list.title')}: - - {isCheck ? ( - - {dataMapStore - .editedVertexMap!.null_values.checked.filter( - (value) => value !== 'null' - ) - .map((value) => - value === '' - ? t('addition.common.null-value') - : value === 'NULL' - ? 'NULL/null' - : value - ) - .concat( - dataMapStore.editedVertexMap!.null_values.customized - ) - .join(',')} - - ) : ( - <> -
    - { - isEdit - ? dataMapStore.editCheckedNullValues( - 'edit', - 'vertex', - checkedList - ) - : dataMapStore.editCheckedNullValues( - 'new', - 'vertex', - checkedList - ); - }} - value={ - isEdit - ? dataMapStore.editedVertexMap!.null_values.checked - : dataMapStore.newVertexType.null_values.checked - } - > - NULL/null - - {t( - 'data-configs.type.vertex.advance.nullable-list.empty' - )} - - -
    - { - dataMapStore.toggleCustomNullValue( - isEdit ? 'edit' : 'new', - 'vertex', - e.target.checked - ); - - if (e.target.checked) { - dataMapStore.addValidateValueMappingOption( - 'null_values' - ); - } else { - dataMapStore.resetValidateValueMapping( - 'null_values' - ); - } - }} - > - {t( - 'data-configs.type.vertex.advance.nullable-list.custom' - )} - -
    -
    -
    - {isEdit ? ( - <> - {dataMapStore.editedVertexMap?.null_values.customized.map( - (nullValue, nullValueIndex) => ( -
    - { - dataMapStore.editCustomNullValues( - 'edit', - 'vertex', - e.value, - nullValueIndex - ); - - dataMapStore.validateValueMapping( - 'vertex', - 'edit', - 'null_values', - nullValueIndex - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore.validateAdvanceConfigErrorMessage - .null_values[nullValueIndex] - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'vertex', - 'edit', - 'null_values', - nullValueIndex - ); - } - }} - /> -
    - ) - )} - {!isEmpty( - dataMapStore.editedVertexMap?.null_values.customized - ) && ( -
    - { - const extraNullValues = - dataMapStore.editedVertexMap?.null_values - .customized; - - if (!extraNullValues?.includes('')) { - dataMapStore.addCustomNullValues( - 'edit', - 'vertex' - ); - } - }} - > - {t('data-configs.manipulations.add')} - -
    - )} - - ) : ( - <> - {dataMapStore.newVertexType.null_values.customized.map( - (nullValue, nullValueIndex) => ( -
    - { - dataMapStore.editCustomNullValues( - 'new', - 'vertex', - e.value, - nullValueIndex - ); - - dataMapStore.validateValueMapping( - 'vertex', - 'new', - 'null_values', - nullValueIndex - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore.validateAdvanceConfigErrorMessage - .null_values[nullValueIndex] - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'vertex', - 'new', - 'null_values', - nullValueIndex - ); - } - }} - /> -
    - ) - )} - {!isEmpty( - dataMapStore.newVertexType.null_values.customized - ) && ( -
    - { - const extraNullValues = - dataMapStore.newVertexType?.null_values - .customized; - - if (!extraNullValues.includes('')) { - dataMapStore.addCustomNullValues( - 'new', - 'vertex' - ); - } - }} - > - {t('data-configs.manipulations.add')} - -
    - )} - - )} -
    - - )} -
    - -
    - - {t('data-configs.type.vertex.advance.map-property-value.title')} - : - - {!isCheck && - (isEdit - ? isEmpty(dataMapStore.editedVertexMap?.value_mapping) - : isEmpty(dataMapStore.newVertexType.value_mapping)) && ( -
    { - if (isStrategyAutomatic) { - return; - } - - isEdit - ? dataMapStore.addVertexValueMapping('edit') - : dataMapStore.addVertexValueMapping('new'); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings' - ); - }} - > - {t( - 'data-configs.type.vertex.advance.map-property-value.add-value' - )} -
    - )} - - {isCheck && ( -
    - {isEmpty(dataMapStore.editedVertexMap?.value_mapping) - ? '-' - : dataMapStore.editedVertexMap?.value_mapping.map( - ({ column_name, values }, valueMapIndex) => ( -
    -
    - - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.property' - )} - {valueMapIndex + 1}: - - {column_name} -
    - {values.map(({ column_value, mapped_value }) => ( -
    - - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.value-map' - )} - - {column_value} - map - {mapped_value} -
    - ))} -
    - ) - )} -
    - )} -
    - - {/* property value mapping form */} - {!isCheck && - (!Boolean(checkOrEdit) - ? dataMapStore.newVertexType.value_mapping.map( - ({ column_name, values }, valueMapIndex) => ( -
    -
    - - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.property' - )} - {valueMapIndex + 1}: - - - { - dataMapStore.removeVertexValueMapping( - 'new', - valueMapIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'vertex', - 'new', - 'value_mappings', - valueMapIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - -
    -
    - - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.value-map' - )} - : - -
    - {values.map( - ({ column_value, mapped_value }, valueIndex) => ( -
    - { - dataMapStore.editVertexValueMappingColumnValueName( - 'new', - 'column_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'vertex', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].column_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'vertex', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - } - }} - /> - map - { - dataMapStore.editVertexValueMappingColumnValueName( - 'new', - 'mapped_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'vertex', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].mapped_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'vertex', - 'new', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - } - }} - /> - {values.length > 1 && ( - { - dataMapStore.removeVertexValueMappingValue( - 'new', - valueMapIndex, - valueIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'vertex', - 'new', - 'value_mappings_value', - valueMapIndex, - valueIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - - )} -
    - ) - )} -
    -
    - { - if ( - !dataMapStore.allowAddPropertyValueMapping( - 'vertex', - valueMapIndex - ) - ) { - return; - } - - dataMapStore.addVertexValueMappingValue( - 'new', - valueMapIndex - ); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings_value', - valueMapIndex - ); - }} - > - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.add-value-map' - )} - -
    -
    -
    -
    -
    - ) - ) - : dataMapStore.editedVertexMap?.value_mapping.map( - ({ column_name, values }, valueMapIndex) => ( -
    -
    - - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.property' - )} - {valueMapIndex + 1}: - - - { - dataMapStore.removeVertexValueMapping( - 'edit', - valueMapIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'vertex', - 'edit', - 'value_mappings', - valueMapIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - -
    -
    - - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.value-map' - )} - : - -
    - {values.map( - ({ column_value, mapped_value }, valueIndex) => ( -
    - { - dataMapStore.editVertexValueMappingColumnValueName( - 'edit', - 'column_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'vertex', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].column_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'vertex', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'column_value', - valueIndex: valueIndex - } - ); - } - }} - /> - map - { - dataMapStore.editVertexValueMappingColumnValueName( - 'edit', - 'mapped_value', - e.value, - valueMapIndex, - valueIndex - ); - - dataMapStore.validateValueMapping( - 'vertex', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - }} - errorLocation="layer" - errorMessage={ - dataMapStore - .validateAdvanceConfigErrorMessage - .value_mapping[valueMapIndex].values[ - valueIndex - ].mapped_value - } - originInputProps={{ - onBlur: () => { - dataMapStore.validateValueMapping( - 'vertex', - 'edit', - 'value_mappings', - valueMapIndex, - { - field: 'mapped_value', - valueIndex: valueIndex - } - ); - } - }} - /> - {values.length > 1 && ( - { - dataMapStore.removeVertexValueMappingValue( - 'edit', - valueMapIndex, - valueIndex - ); - - dataMapStore.removeValidateValueMappingOption( - 'vertex', - 'edit', - 'value_mappings_value', - valueMapIndex, - valueIndex - ); - }} - > - {t('data-configs.manipulations.delete')} - - )} -
    - ) - )} -
    -
    - { - if ( - !dataMapStore.allowAddPropertyValueMapping( - 'vertex', - valueMapIndex - ) - ) { - return; - } - - dataMapStore.addVertexValueMappingValue( - 'edit', - valueMapIndex - ); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings_value', - valueMapIndex - ); - }} - > - {t( - 'data-configs.type.vertex.advance.map-property-value.fields.add-value-map' - )} - -
    -
    -
    -
    -
    - ) - ))} - - {!isCheck && - (isEdit - ? !isEmpty(dataMapStore.editedVertexMap?.value_mapping) - : !isEmpty(dataMapStore.newVertexType.value_mapping)) && ( -
    { - if (!dataMapStore.allowAddPropertyMapping('vertex')) { - return; - } - - isEdit - ? dataMapStore.addVertexValueMapping('edit') - : dataMapStore.addVertexValueMapping('new'); - - dataMapStore.addValidateValueMappingOption( - 'value_mappings' - ); - }} - > - {t( - 'data-configs.type.vertex.advance.map-property-value.add-value' - )} -
    - )} - - )} - - {!isCheck && ( - - isEmpty(mapped_name) - ) || - !dataMapStore.allowAddPropertyMapping('vertex') || - !dataMapStore.isValidateSave - } - onCreate={async () => { - dataMapStore.switchAddNewTypeConfig(false); - dataMapStore.switchEditTypeConfig(false); - - // really weird! if import task comes from import-manager - // datamapStore.fileMapInfos cannot be updated in - // though it's already re-rendered - if (dataMapStore.isIrregularProcess) { - isEdit - ? await dataMapStore.updateVertexMap( - 'upgrade', - dataMapStore.selectedFileId - ) - : await dataMapStore.updateVertexMap( - 'add', - dataMapStore.selectedFileId - ); - - dataMapStore.fetchDataMaps(); - } else { - isEdit - ? await dataMapStore.updateVertexMap( - 'upgrade', - dataMapStore.selectedFileId - ) - : await dataMapStore.updateVertexMap( - 'add', - dataMapStore.selectedFileId - ); - } - - if (dataMapStore.requestStatus.updateVertexMap === 'failed') { - Message.error({ - content: dataMapStore.errorInfo.updateVertexMap.message, - size: 'medium', - showCloseIcon: false - }); - } - - onCancelCreateVertex(); - dataMapStore.resetNewMap('vertex'); - }} - onCancel={() => { - dataMapStore.switchAddNewTypeConfig(false); - dataMapStore.switchEditTypeConfig(false); - - if (!isEdit) { - dataMapStore.resetNewMap('vertex'); - } else { - dataMapStore.resetEditMapping('vertex'); - } - - onCancelCreateVertex(); - dataMapStore.resetNewMap('vertex'); - dataMapStore.resetValidateValueMapping('all'); - }} - /> - )} -
    - ); - } -); - -export default VertexMap; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts deleted file mode 100644 index 44d62e9c2..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import DataMapConfigs from './DataMapConfigs'; - -export { DataMapConfigs }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less deleted file mode 100644 index ca243f647..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.job-error-logs { - width: 75vw; - position: relative; - top: 76px; - margin: 0 auto; - font-size: 14px; - - &-title { - margin-bottom: 16px; - color: #333; - line-height: 22px; - font-weight: 900; - } - - &-content-wrapper { - display: flex; - height: calc(100vh - 139px); - padding-top: 25px; - padding-right: 16px; - background-color: #fff; - } - - &-content { - margin-left: 19px; - overflow: auto; - line-height: 2; - - &-item { - display: flex; - - &:nth-child(even) { - margin-bottom: 32px; - } - } - - &-item-title { - word-break: keep-all; - } - - &-item-text { - margin-left: 6px; - } - - &-with-error-only { - margin-left: 16px; - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx deleted file mode 100644 index 0cb48f63c..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useEffect, useState } from 'react'; -import { useRoute } from 'wouter'; -import { observer } from 'mobx-react'; -import { motion } from 'framer-motion'; -import { Menu } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { ImportManagerStoreContext } from '../../../../../stores'; - -import './JobErrorLogs.less'; - -const failedReasonVariants = { - initial: { - opacity: 0, - y: -10 - }, - animate: { - opacity: 1, - y: 0, - transition: { - duration: 0.8, - ease: 'easeInOut' - } - } -}; - -const JobErrorLogs: React.FC = observer(() => { - const importManagerStore = useContext(ImportManagerStoreContext); - const { t } = useTranslation(); - const [, params] = useRoute( - '/graph-management/:id/data-import/job-error-log/:jobId' - ); - const [selectedFileName, setSelectedFileName] = useState(''); - - useEffect(() => { - const init = async () => { - await importManagerStore.fetchFailedReason( - Number(params!.id), - Number(params!.jobId) - ); - - if (importManagerStore.requestStatus.fetchFailedReason === 'success') { - setSelectedFileName(importManagerStore.failedReason[0].file_name); - } - }; - - init(); - }, [params!.id, params!.jobId]); - - return ( -
    -
    - {t('addition.message.fail-reason')} -
    - -
    - {importManagerStore.requestStatus.fetchFailedReason === 'failed' ? ( -
    - {importManagerStore.errorInfo.fetchFailedReason.message} -
    - ) : ( - <> - { - setSelectedFileName(e.key); - }} - > - {importManagerStore.failedReason.map(({ file_name }) => ( - - {file_name} - - ))} - -
    - {importManagerStore.failedReason - .find(({ file_name }) => file_name === selectedFileName) - ?.reason.split('\n') - .filter((reason) => reason !== '') - .map((text, index) => ( -
    -
    - {index % 2 === 0 - ? `${t('addition.message.fail-reason')}:` - : `${t('addition.message.fail-position')}:`} -
    -
    - {text.replace('#### INSERT ERROR:', '')} -
    -
    - ))} -
    - - )} -
    -
    -
    - ); -}); - -export default JobErrorLogs; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less deleted file mode 100644 index 7e992bfc7..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.task-error-logs { - width: 80vw; - position: relative; - top: 76px; - line-height: 2; - font-size: 14px; - margin: 0 auto 16px; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx deleted file mode 100644 index d71097365..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useEffect } from 'react'; -import { useRoute } from 'wouter'; -import { observer } from 'mobx-react'; -import { DataImportRootStoreContext } from '../../../../../stores'; - -import './TaskErrorLogs.less'; - -const TaskErrorLogs: React.FC = observer(() => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { serverDataImportStore } = dataImportRootStore; - const [, params] = useRoute( - '/graph-management/:id/data-import/:jobId/task-error-log/:taskId' - ); - - useEffect(() => { - serverDataImportStore.checkErrorLogs( - Number(params!.id), - Number(params!.jobId), - Number(params!.taskId) - ); - }, [params!.id, params!.jobId, params!.taskId]); - - return ( -
    - {/*
    - {serverDataImportStore.requestStatus.checkErrorLogs === 'failed' - ? serverDataImportStore.errorInfo.checkErrorLogs.message - : serverDataImportStore.errorLogs} -
    */} -
    - {serverDataImportStore.requestStatus.checkErrorLogs === 'failed' - ? serverDataImportStore.errorInfo.checkErrorLogs.message - : serverDataImportStore.errorLogs - .split('\n') - .map((text) =>

    {text}

    )} -
    -
    - ); -}); - -export default TaskErrorLogs; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/index.ts deleted file mode 100644 index a694b2fc5..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/error-logs/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import TaskErrorLogs from './TaskErrorLogs'; -import JobErrorLogs from './JobErrorLogs'; - -export { TaskErrorLogs, JobErrorLogs }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/index.ts deleted file mode 100644 index e1324524f..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import ImportTasks from './ImportTasks'; -import ImportManager from './ImportManager'; -import { JobDetails } from './job-details'; - -export { ImportTasks, ImportManager, JobDetails }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx deleted file mode 100644 index 0332c4b83..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useState, useContext, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { isEmpty, isNull, isUndefined } from 'lodash-es'; -import { useRoute } from 'wouter'; -import { motion } from 'framer-motion'; -import { useTranslation } from 'react-i18next'; -import { Button, Modal, Input, Message } from 'hubble-ui'; - -import { ImportManagerStoreContext } from '../../../../../stores'; -import { - GraphManagementStoreContext, - DataImportRootStoreContext -} from '../../../../../stores'; - -const BasicSettings: React.FC = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const importManagerStore = useContext(ImportManagerStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [isPopEditModal, switchPopEditModal] = useState(false); - const [, params] = useRoute( - '/graph-management/:id/data-import/import-manager/:jobId/details' - ); - const { t } = useTranslation(); - - useEffect(() => { - const init = async () => { - if (isEmpty(importManagerStore.importJobList)) { - graphManagementStore.fetchIdList(); - importManagerStore.setCurrentId(Number(params!.id)); - await importManagerStore.fetchImportJobList(); - } - - if (isNull(importManagerStore.selectedJob)) { - if ( - !isUndefined( - importManagerStore.importJobList.find( - ({ id }) => String(id) === (params && params.jobId) - ) - ) && - params !== null - ) { - importManagerStore.setSelectedJob(Number(params.jobId)); - - // duplicate logic in - // fill in essential data in import-task stores - dataImportRootStore.setCurrentId(Number(params!.id)); - dataImportRootStore.setCurrentJobId(Number(params.jobId)); - - dataImportRootStore.fetchVertexTypeList(); - dataImportRootStore.fetchEdgeTypeList(); - - // fetch related data - await Promise.all([ - dataMapStore.fetchDataMaps(), - serverDataImportStore.fetchAllImportTasks() - ]); - - dataMapStore.setSelectedFileId( - Number(dataMapStore.fileMapInfos[0].id) - ); - dataMapStore.setSelectedFileInfo(); - - // set flags about readonly and irregular process in - dataMapStore.switchReadOnly(true); - dataMapStore.switchIrregularProcess(true); - - // set flags about readonly and irregular process in - serverDataImportStore.switchExpandImportConfig(true); - serverDataImportStore.switchReadOnly(true); - serverDataImportStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - } - } - }; - - init(); - }, []); - - return ( -
    -
    -
    - {t('import-job-details.basic.job-name')} - {importManagerStore.selectedJob?.job_name} -
    -
    - {t('import-job-details.basic.job-description')} - {importManagerStore.selectedJob?.job_remarks} -
    -
    - - { - switchPopEditModal(false); - await importManagerStore.updateJobInfo(); - - if (importManagerStore.requestStatus.updateJobInfo === 'failed') { - Message.error({ - content: importManagerStore.errorInfo.updateJobInfo.message, - size: 'medium', - showCloseIcon: false - }); - - return; - } - - if ( - importManagerStore.requestStatus.updateJobInfo === 'success' - ) { - Message.success({ - content: t('import-manager.hint.update-succeed'), - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('import-job-details.basic.modal.manipulations.save')} - , - - ]} - destroyOnClose - needCloseIcon - onCancel={() => { - switchPopEditModal(false); - }} - > -
    -
    -
    - - * - - - {t('import-job-details.basic.modal.edit-job.job-name')} - -
    - { - importManagerStore.mutateEditJob('name', e.value); - importManagerStore.validateJob('edit', 'name'); - }} - originInputProps={{ - onBlur: () => { - importManagerStore.validateJob('edit', 'name'); - } - }} - /> -
    -
    -
    - {t('import-job-details.basic.modal.edit-job.job-description')} -
    -
    - { - importManagerStore.mutateEditJob('description', e.value); - importManagerStore.validateJob('edit', 'description'); - }} - originInputProps={{ - onBlur: () => { - importManagerStore.validateJob('edit', 'description'); - } - }} - /> -
    -
    -
    -
    -
    - ); -}); - -export default BasicSettings; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx deleted file mode 100644 index 21b81eba0..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import { observer } from 'mobx-react'; - -import { ServerDataImport } from '../server-data-import'; - -const DataImportDetails: React.FC = observer(() => { - return ( -
    - -
    - ); -}); - -export default DataImportDetails; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx deleted file mode 100644 index 1f205c6ae..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import { observer } from 'mobx-react'; - -import DataMapConfigs from '../datamap-configs/DataMapConfigs'; - -import '../datamap-configs/DataMapConfigs.less'; - -const DataMaps: React.FC = observer(() => { - return ( -
    - -
    - ); -}); - -export default DataMaps; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less deleted file mode 100644 index 21bb217ba..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.import-job-details { - position: absolute; - width: calc(100% - 60px); - padding: 0 16px 16px; - left: 60px; - top: 60px; - - &-with-expand-sidebar { - width: calc(100% - 200px); - left: 200px; - } - - &-breadcrumb-wrapper { - display: flex; - justify-content: space-between; - align-items: center; - margin: 16px 0; - } - - &-content-wrapper { - height: calc(100vh - 201px); - background: #fff; - padding: 24px; - overflow: auto; - } - - &-content-header { - margin-bottom: 16px; - display: flex; - justify-content: flex-end; - } - - &-basic-text { - font-size: 14px; - color: #333; - - & > div { - margin-bottom: 14px; - } - - & span:last-child { - margin-left: 24px; - } - } - - &-uploaded-file-infos { - margin-bottom: 19px; - font-size: 14px; - - &-titles { - width: 300px; - display: flex; - justify-content: space-between; - } - - &-progress-status { - width: 374px; - display: flex; - align-items: center; - } - } -} - -/* override */ - -// reveal error layer in -.new-fc-one-modal-body { - overflow: visible; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx deleted file mode 100644 index 66d7394ff..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { AnimatePresence } from 'framer-motion'; -import { useTranslation } from 'react-i18next'; -import { isEmpty } from 'lodash-es'; -import { Menu } from 'hubble-ui'; - -import { - DataImportRootStoreContext, - ImportManagerStoreContext -} from '../../../../../stores'; - -import BasicSettings from './BasicSettings'; -import UploadedFiles from './UploadedFiles'; -import DataMaps from './DataMaps'; -import DataImportDetails from './DataImportDetails'; - -import './JobDetails.less'; - -const JobDetails: React.FC = observer(() => { - const importManagerStore = useContext(ImportManagerStoreContext); - const { dataMapStore, serverDataImportStore } = useContext( - DataImportRootStoreContext - ); - const { t } = useTranslation(); - - const handleMenuItemChange = ({ key }: { key: string }) => { - importManagerStore.setCurrentJobDetailStep(key); - }; - - const renderListView = () => { - switch (importManagerStore.jobDetailsStep) { - case 'basic': - return ; - case 'upload': - return ; - case 'data-map': - return ; - case 'import-details': - return ; - } - }; - - return ( - <> - - - {t('import-job-details.tabs.basic-settings')} - - - {t('import-job-details.tabs.uploaded-files')} - - - {t('import-job-details.tabs.data-maps')} - - - {t('import-job-details.tabs.import-details')} - - - {renderListView()} - - ); -}); - -export default JobDetails; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx deleted file mode 100644 index 7bcf4e6fc..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Progress } from 'hubble-ui'; - -import { DataImportRootStoreContext } from '../../../../../stores'; - -const UploadedFiles: React.FC = observer(() => { - const { dataMapStore } = useContext(DataImportRootStoreContext); - - return ( -
    - {dataMapStore.fileMapInfos.map(({ name, total_size }) => ( -
    -
    - {name} - {total_size} -
    -
    - -
    -
    - ))} -
    - ); -}); - -export default UploadedFiles; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/index.ts deleted file mode 100644 index 36247d378..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/job-details/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import JobDetails from './JobDetails'; - -export { JobDetails }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx deleted file mode 100644 index 289e9d394..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx +++ /dev/null @@ -1,862 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useCallback, useEffect, useRef } from 'react'; -import { observer } from 'mobx-react'; -import { useLocation } from 'wouter'; -import { isEmpty } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; -import classnames from 'classnames'; -import { Switch, Input, Button, Table, Tooltip, Message } from 'hubble-ui'; - -import { DataImportRootStoreContext } from '../../../../../stores'; -import { useInitDataImport } from '../../../../../hooks'; - -import type { - ImportTasks, - LoadParameter -} from '../../../../../stores/types/GraphManagementStore/dataImportStore'; - -import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; -import HintIcon from '../../../../../assets/imgs/ic_question_mark.svg'; - -const importStatusColorMapping: Record = { - RUNNING: '#2b65ff', - SUCCEED: '#39bf45', - FAILED: '#e64552', - PAUSED: '#a9cbfb', - STOPPED: '#ccc' -}; - -const commonInputProps = { - size: 'medium', - width: 100, - errorLocation: 'layer' -}; - -export interface ImportConfigsProps { - height?: string; -} - -const ImportConfigs: React.FC = observer(({ height }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { serverDataImportStore, dataMapStore } = dataImportRootStore; - const timerId = useRef(NaN); - const isInitReady = useInitDataImport(); - const [, setLocation] = useLocation(); - const { t } = useTranslation(); - - const columnConfigs = [ - { - title: t('server-data-import.import-details.column-titles.file-name'), - dataIndex: 'file_name', - width: '10%', - render(text: string) { - return ( -
    - {text} -
    - ); - } - }, - { - title: t('server-data-import.import-details.column-titles.type'), - dataIndex: 'type', - width: '15%', - render(_: any, rowData: ImportTasks) { - const title = ( -
    - {!isEmpty(rowData.vertices) && ( -
    - {t('server-data-import.import-details.content.vertex')}: - {rowData.vertices.join(' ')} -
    - )} - {!isEmpty(rowData.edges) && ( -
    - {t('server-data-import.import-details.content.edge')}: - {rowData.edges.join(' ')} -
    - )} - {isEmpty(rowData.vertices) && isEmpty(rowData.edges) && '-'} -
    - ); - - return ( - -
    - {!isEmpty(rowData.vertices) && - `${t( - 'server-data-import.import-details.content.vertex' - )}:${rowData.vertices.join(' ')} `} - {!isEmpty(rowData.edges) && - `${t( - 'server-data-import.import-details.content.edge' - )}:${rowData.edges.join(' ')}`} - {isEmpty(rowData.vertices) && isEmpty(rowData.edges) && '-'} -
    -
    - ); - } - }, - { - title: t('server-data-import.import-details.column-titles.import-speed'), - dataIndex: 'load_rate', - width: '12%', - align: 'center', - render(text: string) { - return ( -
    - {text} -
    - ); - } - }, - { - title: t( - 'server-data-import.import-details.column-titles.import-progress' - ), - dataIndex: 'load_progress', - width: '35%', - render(progress: number, rowData: Record) { - return ( -
    -
    -
    -
    -
    {`${progress}%`}
    -
    - ); - } - }, - { - title: t('server-data-import.import-details.column-titles.status'), - dataIndex: 'status', - width: '10%', - render(text: string) { - return ( -
    - {t(`server-data-import.import-details.status.${text}`)} -
    - ); - } - }, - { - title: t('server-data-import.import-details.column-titles.time-consumed'), - dataIndex: 'duration', - align: 'right', - width: '8%', - render(text: string) { - return ( -
    - {text} -
    - ); - } - }, - { - title: !serverDataImportStore.readOnly - ? t('server-data-import.import-details.column-titles.manipulations') - : '', - width: '15%', - render(_: never, rowData: Record, taskIndex: number) { - return !serverDataImportStore.readOnly ? ( -
    - -
    - ) : null; - } - } - ]; - - const handleInputChange = (key: keyof LoadParameter) => (e: any) => { - serverDataImportStore.mutateImportConfigs(key, e.value); - serverDataImportStore.validateImportConfigs(key); - }; - - const handleBlur = (key: keyof LoadParameter) => () => { - serverDataImportStore.validateImportConfigs(key); - }; - - const loopQueryImportData = useCallback(() => { - const loopId = window.setInterval(async () => { - if (serverDataImportStore.isImportFinished) { - window.clearInterval(loopId); - return; - } - - if ( - serverDataImportStore.requestStatus.fetchImportTasks === 'failed' || - serverDataImportStore.requestStatus.fetchAllImportTasks === 'failed' - ) { - Message.error({ - content: - serverDataImportStore.errorInfo.fetchImportTasks.message || - serverDataImportStore.errorInfo.fetchAllImportTasks.message, - size: 'medium', - showCloseIcon: false - }); - - window.clearInterval(loopId); - return; - } - - if (serverDataImportStore.isIrregularProcess) { - serverDataImportStore.fetchAllImportTasks(); - } else { - // stop loops when users click sidebar icon - // (dispose called in , [ids] resets to empty array) - if (isEmpty(serverDataImportStore.fileImportTaskIds)) { - window.clearInterval(loopId); - return; - } - - serverDataImportStore.fetchImportTasks( - serverDataImportStore.fileImportTaskIds - ); - } - }, 1000); - - timerId.current = loopId; - }, []); - - const expandClassName = classnames({ - 'import-tasks-step-content-header-expand': - serverDataImportStore.isExpandImportConfig, - 'import-tasks-step-content-header-collpase': !serverDataImportStore.isExpandImportConfig - }); - - useEffect(() => { - // if comes from import manager or refresh - if ( - (!serverDataImportStore.readOnly || - serverDataImportStore.isIrregularProcess) && - dataImportRootStore.currentStatus === 'LOADING' - ) { - loopQueryImportData(); - } - - return () => { - if (!Object.is(NaN, timerId.current)) { - window.clearInterval(timerId.current); - } - }; - }, [ - isInitReady, - serverDataImportStore.readOnly, - serverDataImportStore.isIrregularProcess, - dataImportRootStore.currentStatus - ]); - - return isInitReady ? ( -
    -
    - {t('server-data-import.import-settings.title')} - collpaseOrExpand { - serverDataImportStore.switchExpandImportConfig( - !serverDataImportStore.isExpandImportConfig - ); - }} - /> -
    - - {serverDataImportStore.isExpandImportConfig && ( -
    -
    -
    -
    - - {t('server-data-import.import-settings.checkIfExist')}: - - - hint - -
    -
    - { - serverDataImportStore.mutateImportConfigs( - 'check_vertex', - checked - ); - }} - disabled={ - serverDataImportStore.readOnly || - serverDataImportStore.importConfigReadOnly - } - /> -
    -
    -
    - - {t( - 'server-data-import.import-settings.maximumAnalyzedErrorRow' - )} - : - - {!serverDataImportStore.readOnly && - !serverDataImportStore.importConfigReadOnly ? ( - - ) : ( -
    - {serverDataImportStore.importConfigs?.max_parse_errors} -
    - )} -
    -
    - - {t( - 'server-data-import.import-settings.maxiumInterpolateErrorRow' - )} - : - - {!serverDataImportStore.readOnly && - !serverDataImportStore.importConfigReadOnly ? ( - - ) : ( -
    - {serverDataImportStore.importConfigs?.max_insert_errors} -
    - )} -
    -
    -
    -
    - - {t( - 'server-data-import.import-settings.requestTimesWhenInterpolationFailed' - )} - : - - {!serverDataImportStore.readOnly && - !serverDataImportStore.importConfigReadOnly ? ( - - ) : ( -
    - {serverDataImportStore.importConfigs?.retry_times} -
    - )} -
    -
    - - {t( - 'server-data-import.import-settings.requestTicksWhenInterpolationFailed' - )} - : - - {!serverDataImportStore.readOnly && - !serverDataImportStore.importConfigReadOnly ? ( - - ) : ( -
    - {serverDataImportStore.importConfigs?.retry_interval} -
    - )} -
    -
    - - {t('server-data-import.import-settings.InterpolationTimeout')}: - - {!serverDataImportStore.readOnly && - !serverDataImportStore.importConfigReadOnly ? ( - - ) : ( -
    - {serverDataImportStore.importConfigs?.insert_timeout} -
    - )} -
    -
    -
    - )} - - {(dataImportRootStore.currentStatus === 'LOADING' || - dataImportRootStore.currentStatus === 'SUCCESS' || - dataImportRootStore.currentStatus === 'FAILED' || - (serverDataImportStore.isIrregularProcess && - serverDataImportStore.readOnly)) && ( - <> -
    - {t('server-data-import.import-details.title')} -
    -
    -
- - - )} - - {!serverDataImportStore.readOnly && ( -
- - -
- )} - - ) : null; -}); - -export interface ImportManipulationsProps { - importStatus: string; - taskIndex: number; - loopQuery: () => void; -} - -const ImportManipulations: React.FC = observer( - ({ importStatus, taskIndex, loopQuery }) => { - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { serverDataImportStore } = dataImportRootStore; - const { t } = useTranslation(); - const manipulations: string[] = []; - - const handleClickManipulation = async (manipulation: string) => { - switch (manipulation) { - case t('server-data-import.import-details.manipulations.pause'): - await serverDataImportStore.pauseImport( - serverDataImportStore.importTasks[taskIndex].id - ); - - if (serverDataImportStore.requestStatus.pauseImport === 'failed') { - Message.error({ - content: serverDataImportStore.errorInfo.pauseImport.message, - size: 'medium', - showCloseIcon: false - }); - } - - break; - case t('server-data-import.import-details.manipulations.abort'): - await serverDataImportStore.abortImport( - serverDataImportStore.importTasks[taskIndex].id - ); - - if (serverDataImportStore.requestStatus.abortImport === 'failed') { - Message.error({ - content: serverDataImportStore.errorInfo.abortImport.message, - size: 'medium', - showCloseIcon: false - }); - } - - serverDataImportStore.fetchAllImportTasks(); - - break; - case t('server-data-import.import-details.manipulations.resume'): - await serverDataImportStore.resumeImport( - serverDataImportStore.importTasks[taskIndex].id - ); - - if (serverDataImportStore.requestStatus.resumeImport === 'failed') { - Message.error({ - content: serverDataImportStore.errorInfo.resumeImport.message, - size: 'medium', - showCloseIcon: false - }); - } - - serverDataImportStore.switchImporting(true); - serverDataImportStore.switchImportFinished(false); - loopQuery(); - break; - case t('server-data-import.import-details.manipulations.failed-cause'): - serverDataImportStore.checkErrorLogs( - dataImportRootStore.currentId!, - dataImportRootStore.currentJobId!, - serverDataImportStore.importTasks[taskIndex].id - ); - break; - case t('server-data-import.import-details.manipulations.retry'): - await serverDataImportStore.retryImport( - serverDataImportStore.importTasks[taskIndex].id - ); - - if (serverDataImportStore.requestStatus.retryImport === 'failed') { - Message.error({ - content: serverDataImportStore.errorInfo.retryImport.message, - size: 'medium', - showCloseIcon: false - }); - } - - serverDataImportStore.switchImporting(true); - serverDataImportStore.switchImportFinished(false); - loopQuery(); - break; - } - }; - - switch (importStatus) { - case 'RUNNING': - manipulations.push( - t('server-data-import.import-details.manipulations.pause'), - t('server-data-import.import-details.manipulations.abort') - ); - break; - case 'FAILED': - manipulations.push( - t('server-data-import.import-details.manipulations.resume'), - t('server-data-import.import-details.manipulations.failed-cause') - ); - break; - case 'PAUSED': - manipulations.push( - t('server-data-import.import-details.manipulations.resume'), - t('server-data-import.import-details.manipulations.abort') - ); - break; - case 'STOPPED': - manipulations.push( - t('server-data-import.import-details.manipulations.retry') - ); - break; - case 'SUCCEED': - break; - default: - throw new Error('Wrong status received from server'); - } - - return ( -
- {manipulations.map((manipulation) => { - if ( - manipulation === - t('server-data-import.import-details.manipulations.failed-cause') - ) { - return ( - { - handleClickManipulation(manipulation); - }} - > - {manipulation} - - ); - } - - return ( - { - serverDataImportStore.switchImportFinished(false); - handleClickManipulation(manipulation); - }} - > - {manipulation} - - ); - })} -
- ); - } -); - -export default ImportConfigs; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less deleted file mode 100644 index 7ba8506e1..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.import-tasks { - &-server-data-import { - &-configs-wrapper { - width: 100%; - margin-bottom: 30px; - } - - &-configs { - display: flex; - width: 100%; - } - - &-config { - height: 128px; - display: flex; - justify-content: space-between; - flex-direction: column; - flex-basis: 50%; - - &:first-child { - align-items: flex-end; - // margin-right: 87px; - } - - &:last-child { - align-items: flex-start; - } - } - - &-config-option { - display: flex; - align-items: center; - - & > div:first-child, - & > span:first-child { - width: 200.7px; - margin-right: 44px; - text-align: right; - color: #333; - font-size: 14px; - } - - &-readonly-data { - width: 100px; - font-size: 14px; - color: #333; - line-height: 20px; - } - } - - &-manipulations { - width: 100%; - margin: 40px 0 6px; - display: flex; - justify-content: center; - } - - &-table-wrapper { - & table { - table-layout: fixed; - } - } - - &-table-tooltip-title { - width: 234px; - } - - &-table-progress { - position: relative; - width: 80%; - height: 8px; - background: #eee; - border-radius: 4px; - margin-right: 8px; - } - - &-table-manipulations { - display: flex; - // justify-content: space-between; - } - } -} - -/* override */ - -.import-tasks-server-data-import-config-option .new-fc-one-input-error.new-fc-one-input-error-layer { - // safari bug - // width: max-content; - word-break: keep-all; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx deleted file mode 100644 index b84fb2870..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import { observer } from 'mobx-react'; - -import ImportConfigs from './ImportConfigs'; - -import './ServerDataImport.less'; - -const ServerDataImport: React.FC = observer(() => { - return ( -
- -
- ); -}); - -export default ServerDataImport; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts deleted file mode 100644 index 850e2c888..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import ServerDataImport from './ServerDataImport'; - -export { ServerDataImport }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/index.ts deleted file mode 100644 index 6ff89dc6e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/data-import/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { ImportTasks, ImportManager, JobDetails } from './import-tasks'; - -export { ImportTasks, ImportManager, JobDetails }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/index.ts deleted file mode 100644 index c92bd3ece..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import GraphManagement from './GraphManagement'; -import { DataAnalyze } from './data-analyze'; -import { MetadataConfigs } from './metadata-configs'; -import { ImportTasks, ImportManager, JobDetails } from './data-import'; -import { AsyncTaskList } from './async-tasks'; - -export { - GraphManagement, - DataAnalyze, - MetadataConfigs, - ImportTasks, - ImportManager, - JobDetails, - AsyncTaskList -}; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.less deleted file mode 100644 index f5a0cf5bb..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.less +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.metadata-configs { - position: absolute; - width: calc(100% - 60px); - padding: 0 16px 16px 16px; - left: 60px; - top: 60px; - - &-with-expand-sidebar { - width: calc(100% - 200px); - left: 200px; - } - - &-content { - &-wrapper { - margin-top: 16px; - padding: 16px; - background: #fff; - border: 1px solid #eee; - border-radius: 3px; - } - - &-loading-wrapper { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - - &-loading-bg { - width: 144px; - height: 144px; - position: relative; - margin-bottom: 10px; - } - - &-loading-back { - position: absolute; - left: 22px; - top: 20px; - } - - &-loading-front { - position: absolute; - left: 57.1px; - top: 52.1px; - animation: loading-rotate 2s linear infinite; - } - - &-mode { - margin: 16px 0; - - &-button { - display: flex; - align-items: center; - - & > img { - margin-right: 6px; - } - } - } - - &-header { - margin-bottom: 16px; - display: flex; - justify-content: flex-end; - } - - &-dropdown { - width: 382px; - max-height: 332px; - overflow: auto; - background: #fff; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - color: #333; - - & > div { - padding: 0 16px; - height: 32px; - display: flex; - align-items: center; - } - } - } - - &-drawer { - font-size: 14px; - margin-top: 4px; - } - - &-sorted-multiSelect-option { - display: flex; - - & > div:first-child { - margin: 8px 8px 0; - width: 16px; - height: 16px; - border: 1px solid #ccc; - background: #fff; - border-radius: 2px; - } - - & > div:last-child { - width: 80%; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - } - - &-selected { - & > div:first-child { - margin: 8px 8px 0; - width: 16px; - height: 16px; - background: #2b65ff; - border-radius: 2px; - text-align: center; - line-height: 14px; - color: #fff; - } - } - } -} - -.metadata-properties-tooltips { - background: #fff; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - padding: 24px; - font-size: 14px; - color: #333; - - &-title { - font-size: 16px; - font-weight: 900; - margin-bottom: 16px; - } - - &-footer { - display: flex; - margin-top: 24px; - } - - // & p { - // margin: 0; - // line-height: 28px; - // } -} - -.metadata-title { - font-family: - 'PingFangSC-Medium', - 'Microsoft YaHei', - '微软雅黑', - Arial, - sans-serif; - font-weight: bold; - font-size: 16px; - color: #000; - letter-spacing: 0; - line-height: 24px; -} - -.metadata-drawer { - &-options { - margin-bottom: 12px; - display: flex; - - &-disabled { - color: #ccc; - } - - &-name { - width: 98px; - text-align: right; - margin-right: 9px; - } - - &-list { - width: calc(100% - 155px); - - &-row { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 16px; - - &-normal { - & > div, - & > span { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - - &:nth-child(1) { - flex: 0 1 30%; - } - - &:nth-child(2) { - flex: 0 1 32%; - } - - &:nth-child(3) { - flex: 0 1 38%; - display: flex; - align-items: center; - - & > img { - margin-left: 4px; - } - } - } - } - - &:last-child { - margin-bottom: 0; - } - } - } - } -} - -.metadata-selected-properties { - display: flex; - justify-content: space-between; - margin: 12px 0; -} - -.metdata-essential-form-options { - color: #fb4b53; -} - -// override -.metadata-configs { - table { - table-layout: fixed; - } - - .new-fc-one-table { - overflow: visible; - border: 0; - } - - .new-fc-one-table table { - overflow: visible; - } - - .new-fc-one-menu { - background: transparent; - } - - .new-fc-one-select-dropdown-menu-item.new-fc-one-select-dropdown-menu-item-selected { - color: #2b65ff; - font-weight: 900; - } -} - -// override -.metadata-drawer-options-list-row { - .new-fc-one-select-search-ul { - .new-fc-one-select-search.new-fc-one-select-search--inline { - display: none; - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.tsx deleted file mode 100644 index e0c9ce130..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/MetadataConfigs.tsx +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useState, useEffect, useContext } from 'react'; -import { observer } from 'mobx-react'; -import { useRoute, useLocation, Params } from 'wouter'; -import classnames from 'classnames'; -import { AnimatePresence } from 'framer-motion'; -import { Radio, Menu, Modal, Button } from 'hubble-ui'; - -import { MetadataProperties } from './property'; -import { VertexTypeList } from './vertex-type'; -import { EdgeTypeList } from './edge-type'; -import { PropertyIndex } from './property-index'; -import { GraphView } from './graph-view'; -import DataAnalyzeStore from '../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import MetadataConfigsRootStore from '../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import './MetadataConfigs.less'; -import { AppStoreContext, GraphManagementStoreContext } from '../../../stores'; -import ActiveTableIcon from '../../../assets/imgs/ic_liebiaomoshi_white.svg'; -import TableIcon from '../../../assets/imgs/ic_liebiaomoshi_black.svg'; -import ActiveShowGraphIcon from '../../../assets/imgs/ic_tumoshi_white.svg'; -import ShowGraphIcon from '../../../assets/imgs/ic_tumoshi_black.svg'; -import { useTranslation } from 'react-i18next'; - -const MetadataConfig: React.FC = observer(() => { - const appStore = useContext(AppStoreContext); - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const graphManagementStore = useContext(GraphManagementStoreContext); - const metadataConfigRootStore = useContext(MetadataConfigsRootStore); - const [viewMode, setViewMode] = useState('list'); - const [selectedMenuItem, setSelectedMenuItem] = useState('property'); - const [match, params] = useRoute('/graph-management/:id/metadata-configs'); - const [_, setLocation] = useLocation(); - const { t } = useTranslation(); - - const handleRadioGroupChange = (e: React.ChangeEvent) => { - setViewMode(e.target.value); - }; - - const handleMenuItemChange = ({ key }: { key: string }) => { - // reset store current tab status to default - switch (selectedMenuItem) { - case 'property': - metadataConfigRootStore.metadataPropertyStore.changeCurrentTabStatus( - 'list' - ); - case 'vertex-type': - metadataConfigRootStore.vertexTypeStore.changeCurrentTabStatus('list'); - case 'edge-type': - metadataConfigRootStore.edgeTypeStore.changeCurrentTabStatus('list'); - } - - setSelectedMenuItem(key); - }; - - const wrapperClassName = classnames({ - 'metadata-configs': true, - 'metadata-configs-with-expand-sidebar': graphManagementStore.isExpanded - }); - - const renderListView = () => { - switch (selectedMenuItem) { - case 'property': - return ; - case 'vertex-type': - return ; - case 'edge-type': - return ; - case 'property-index': - return ; - } - }; - - // Caution: Preitter will automatically add 'params' behind 'match' in array, - // which is not equal each time - /* eslint-disable */ - useEffect(() => { - window.scrollTo(0, 0); - graphManagementStore.fetchIdList(); - - if (match && params !== null) { - appStore.setCurrentId(Number(params.id)); - // fetch node colors - dataAnalyzeStore.setCurrentId(Number(params.id)); - dataAnalyzeStore.fetchAllNodeStyle(); - dataAnalyzeStore.fetchAllEdgeStyle(); - metadataConfigRootStore.setCurrentId(Number(params.id)); - // metadataConfigRootStore.fetchIdList(); - } - - return () => { - metadataConfigRootStore.dispose(); - }; - }, [metadataConfigRootStore, match, params?.id]); - - return ( -
-
-
- - -
- table mode - {t('addition.menu.list-mode')} -
-
- -
- graph mode - {t('addition.menu.chart-mode')} -
-
-
-
- {viewMode === 'list' ? ( - <> - - - {t('addition.common.property')} - - - {t('addition.common.vertex-type')} - - - {t('addition.common.edge-type')} - - - {t('addition.common.property-index')} - - - - {renderListView()} - - - ) : ( - - )} -
- { - metadataConfigRootStore.setCurrentId(null); - setLocation('/'); - }} - > - {t('addition.dataAnalyze.return-home')} - - ]} - visible={graphManagementStore.graphData.some( - ({ id, enabled }) => - metadataConfigRootStore.currentId === id && !enabled - )} - destroyOnClose - needCloseIcon={false} - > -
- {metadataConfigRootStore.metadataPropertyStore.errorMessage} -
-
-
- ); -}); - -export default MetadataConfig; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx deleted file mode 100644 index cc38c32eb..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import { observer } from 'mobx-react'; - -import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; -import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; - -import i18next from '../../../../i18n'; -export interface LoadingDataViewProps { - isLoading: boolean; - emptyText?: string; -} - -const LoadingDataView: React.FC = observer( - ({ isLoading, emptyText }) => - isLoading ? ( -
-
- load background - load spinner -
- {i18next.t('addition.message.data-loading')}... -
- ) : emptyText ? ( - {emptyText} - ) : null -); - -export default LoadingDataView; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less deleted file mode 100644 index a6874e139..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.edge-type-list-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 16px; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx deleted file mode 100644 index a29c32ddd..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx +++ /dev/null @@ -1,1957 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import { - isEmpty, - isUndefined, - cloneDeep, - intersection, - size, - without -} from 'lodash-es'; -import { useLocation } from 'wouter'; -import classnames from 'classnames'; -import { motion } from 'framer-motion'; -import { - Button, - Table, - Switch, - Modal, - Drawer, - Input, - Select, - Checkbox, - Message, - Loading -} from 'hubble-ui'; - -import { Tooltip, LoadingDataView } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -import NewEdgeType from './NewEdgeType'; -import ReuseEdgeTypes from './ReuseEdgeTypes'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { formatVertexIdText } from '../../../../stores/utils'; - -import type { - EdgeTypeValidatePropertyIndexes, - EdgeType -} from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import AddIcon from '../../../../assets/imgs/ic_add.svg'; -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import WhiteCloseIcon from '../../../../assets/imgs/ic_close_white.svg'; -import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; -import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; -import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; -import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; -import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; -import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; -import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; -import i18next from '../../../../i18n'; -import { useTranslation } from 'react-i18next'; - -import './EdgeTypeList.less'; - -const styles = { - button: { - marginLeft: 12, - width: 78 - }, - header: { - marginBottom: 16 - }, - manipulation: { - marginRight: 12 - }, - deleteWrapper: { - display: 'flex', - justifyContent: 'flex-end' - }, - loading: { - padding: 0, - marginRight: 4 - } -}; - -const variants = { - initial: { - opacity: 0 - }, - animate: { - opacity: 1, - transition: { - duration: 0.7 - } - }, - exit: { - opacity: 0, - transition: { - duration: 0.3 - } - } -}; - -const propertyIndexTypeMappings: Record = { - SECONDARY: i18next.t('addition.menu.secondary-index'), - RANGE: i18next.t('addition.menu.range-index'), - SEARCH: i18next.t('addition.menu.full-text-index') -}; - -const EdgeTypeList: React.FC = observer(() => { - const { t } = useTranslation(); - const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); - const { metadataPropertyStore, edgeTypeStore } = metadataConfigsRootStore; - const [preLoading, switchPreLoading] = useState(true); - const [sortOrder, setSortOrder] = useState(''); - const [selectedRowKeys, mutateSelectedRowKeys] = useState([]); - const [isShowModal, switchShowModal] = useState(false); - const [isAddProperty, switchIsAddProperty] = useState(false); - const [isEditEdge, switchIsEditEdge] = useState(false); - const [ - deleteExistPopIndexInDrawer, - setDeleteExistPopIndexInDrawer - ] = useState(null); - const [ - deleteAddedPopIndexInDrawer, - setDeleteAddedPopIndexInDrawer - ] = useState(null); - const [, setLocation] = useLocation(); - - const dropdownWrapperRef = useRef(null); - const deleteWrapperInDrawerRef = useRef(null); - - const isLoading = - preLoading || edgeTypeStore.requestStatus.fetchEdgeTypeList === 'pending'; - - const currentSelectedRowKeys = intersection( - selectedRowKeys, - edgeTypeStore.edgeTypes.map(({ name }) => name) - ); - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - if ( - isAddProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddProperty(false); - } - - if ( - (deleteExistPopIndexInDrawer || deleteAddedPopIndexInDrawer) && - deleteWrapperInDrawerRef.current && - !deleteWrapperInDrawerRef.current.contains(e.target as Element) - ) { - setDeleteExistPopIndexInDrawer(null); - setDeleteAddedPopIndexInDrawer(null); - } - }, - [deleteExistPopIndexInDrawer, deleteWrapperInDrawerRef, isAddProperty] - ); - - const handleSelectedTableRow = (newSelectedRowKeys: string[]) => { - mutateSelectedRowKeys(newSelectedRowKeys); - }; - - const handleCloseDrawer = () => { - switchIsAddProperty(false); - switchIsEditEdge(false); - edgeTypeStore.selectEdgeType(null); - edgeTypeStore.resetEditedSelectedEdgeType(); - }; - - const handleSortClick = () => { - switchPreLoading(true); - - if (sortOrder === 'descend') { - edgeTypeStore.mutatePageSort('asc'); - setSortOrder('ascend'); - } else { - edgeTypeStore.mutatePageSort('desc'); - setSortOrder('descend'); - } - - edgeTypeStore.fetchEdgeTypeList(); - }; - - const batchDeleteProperties = async () => { - switchShowModal(false); - // need to set a copy in store since local row key state would be cleared - edgeTypeStore.mutateSelectedEdgeTypeNames(currentSelectedRowKeys); - // mutateSelectedRowKeys([]); - await edgeTypeStore.deleteEdgeType(currentSelectedRowKeys); - // edgeTypeStore.mutateSelectedEdgeTypeNames([]); - - if (edgeTypeStore.requestStatus.deleteEdgeType === 'success') { - Message.success({ - content: t('addition.common.del-success'), - size: 'medium', - showCloseIcon: false - }); - - mutateSelectedRowKeys( - without(selectedRowKeys, ...currentSelectedRowKeys) - ); - - await edgeTypeStore.fetchEdgeTypeList(); - - // fetch previous page data if it's empty - if ( - edgeTypeStore.requestStatus.fetchEdgeTypeList === 'success' && - size(edgeTypeStore.edgeTypes) === 0 && - edgeTypeStore.edgeTypeListPageConfig.pageNumber > 1 - ) { - edgeTypeStore.mutatePageNumber( - edgeTypeStore.edgeTypeListPageConfig.pageNumber - 1 - ); - - edgeTypeStore.fetchEdgeTypeList(); - } - - return; - } - - if (edgeTypeStore.requestStatus.deleteEdgeType === 'failed') { - Message.error({ - content: edgeTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - }; - - const columnConfigs = [ - { - title: t('addition.common.edge-type-name'), - dataIndex: 'name', - sorter: true, - sortOrder, - width: '14%', - render(text: string, records: any[], index: number) { - return ( -
{ - edgeTypeStore.selectEdgeType(index); - - // check also need style infos - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - style: { - color: edgeTypeStore.selectedEdgeType!.style.color, - icon: null, - with_arrow: edgeTypeStore.selectedEdgeType!.style.with_arrow, - thickness: edgeTypeStore.selectedEdgeType!.style.thickness, - display_fields: edgeTypeStore.selectedEdgeType!.style - .display_fields - } - }); - }} - > - {text} -
- ); - } - }, - { - title: t('addition.common.source-type'), - dataIndex: 'source_label', - width: '14%', - render(text: string, records: any[], index: number) { - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.common.target-type'), - dataIndex: 'target_label', - width: '14%', - render(text: string, records: any[], index: number) { - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.common.association-property'), - dataIndex: 'properties', - width: '14%', - render(properties: { name: string; nullable: boolean }[]) { - const text = - properties.length !== 0 - ? properties.map(({ name }) => name).join('; ') - : '-'; - - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.common.distinguishing-key'), - dataIndex: 'sort_keys', - width: '10%', - render(values: string[]) { - const text = values.length !== 0 ? values.join(';') : '-'; - - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.menu.type-index'), - dataIndex: 'open_label_index', - width: '8%', - render(value: boolean) { - return ( - - ); - } - }, - { - title: t('addition.common.property-index'), - dataIndex: 'property_indexes', - width: '14%', - render(indexes: { name: string; type: string; fields: string[] }[]) { - const text = - indexes.length !== 0 - ? indexes.map(({ name }) => name).join('; ') - : '-'; - - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '12%', - render(_: any, records: EdgeType, index: number) { - return ( - - ); - } - } - ]; - - const metadataDrawerOptionClass = classnames({ - 'metadata-drawer-options': true, - 'metadata-drawer-options-disabled': isEditEdge - }); - - useEffect(() => { - setTimeout(() => { - switchPreLoading(false); - }, 500); - }, [sortOrder]); - - useEffect(() => { - return () => { - const messageComponents = document.querySelectorAll( - '.new-fc-one-message' - ) as NodeListOf; - - messageComponents.forEach((messageComponent) => { - messageComponent.style.display = 'none'; - }); - }; - }); - - useEffect(() => { - if (metadataConfigsRootStore.currentId !== null) { - metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); - edgeTypeStore.fetchEdgeTypeList(); - } - - return () => { - edgeTypeStore.dispose(); - }; - }, [ - metadataPropertyStore, - metadataConfigsRootStore.currentId, - edgeTypeStore - ]); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - if (edgeTypeStore.currentTabStatus === 'new') { - return ; - } - - if (edgeTypeStore.currentTabStatus === 'reuse') { - return ; - } - - return ( - -
-
- - -
- {size(currentSelectedRowKeys) !== 0 && ( -
-
- {t('addition.message.selected')} - {size(currentSelectedRowKeys)} - {t('addition.common.term')} -
- - {t('addition.common.close')} { - mutateSelectedRowKeys([]); - }} - /> -
- )} -
rowData.name} - locale={{ - emptyText: ( - } - /> - ) - }} - rowSelection={{ - selectedRowKeys, - onChange: handleSelectedTableRow - }} - onSortClick={handleSortClick} - dataSource={isLoading ? [] : edgeTypeStore.edgeTypes} - pagination={ - isLoading - ? null - : { - hideOnSinglePage: false, - pageNo: edgeTypeStore.edgeTypeListPageConfig.pageNumber, - pageSize: 10, - showSizeChange: false, - showPageJumper: false, - total: edgeTypeStore.edgeTypeListPageConfig.pageTotal, - onPageNoChange: (e: React.ChangeEvent) => { - // mutateSelectedRowKeys([]); - edgeTypeStore.mutatePageNumber(Number(e.target.value)); - edgeTypeStore.fetchEdgeTypeList(); - } - } - } - /> - { - switchShowModal(false); - }} - > -
-
- {t('addition.common.del-comfirm')} - {t('addition.common.close')} { - switchShowModal(false); - }} - /> -
-
- {t('addition.message.edge-del-confirm')} -
-
- {t('addition.message.long-time-notice')} -
-
) { - return ( - - {text} - - ); - } - } - ]} - dataSource={currentSelectedRowKeys.map((name) => ({ - name - }))} - pagination={false} - /> - - - { - if (!isEditEdge) { - switchIsEditEdge(true); - edgeTypeStore.validateEditEdgeType(); - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - style: { - color: edgeTypeStore.selectedEdgeType!.style.color, - icon: null, - with_arrow: edgeTypeStore.selectedEdgeType!.style - .with_arrow, - thickness: edgeTypeStore.selectedEdgeType!.style - .thickness, - display_fields: edgeTypeStore.selectedEdgeType!.style - .display_fields - } - }); - } else { - await edgeTypeStore.updateEdgeType(); - - if (edgeTypeStore.requestStatus.updateEdgeType === 'failed') { - Message.error({ - content: edgeTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - - return; - } - - if ( - edgeTypeStore.requestStatus.updateEdgeType === 'success' - ) { - if ( - isEmpty( - edgeTypeStore.editedSelectedEdgeType - .append_property_indexes - ) - ) { - Message.success({ - content: t('addition.operate.modify-success'), - size: 'medium', - showCloseIcon: false - }); - } else { - Message.success({ - content: ( -
-
- {t('addition.common.save-scuccess')} -
-
- {t('addition.message.index-long-time-notice')} -
-
{ - setLocation( - `/graph-management/${metadataConfigsRootStore.currentId}/async-tasks` - ); - }} - > - {t('addition.operate.view-task-management')} -
-
- ), - duration: 60 * 60 * 24 - }); - } - } - - switchIsEditEdge(false); - edgeTypeStore.selectEdgeType(null); - edgeTypeStore.fetchEdgeTypeList(); - edgeTypeStore.resetEditedSelectedEdgeType(); - } - }} - > - {isEditEdge - ? t('addition.common.save') - : t('addition.common.edit')} - , - - ]} - > - {!isEmpty(edgeTypeStore.selectedEdgeType) && ( -
-
-
- {t('addition.menu.base-info')} -
-
-
- {t('addition.common.edge-type-name')}: -
-
- {edgeTypeStore.selectedEdgeType!.name} -
-
-
-
- - {t('addition.common.edge-style')}: - -
-
- -
-
- -
-
- -
-
- -
-
- {t('addition.common.source-type')}: -
-
- {edgeTypeStore.selectedEdgeType!.source_label} -
-
-
-
- {t('addition.common.target-type')}: -
-
- {edgeTypeStore.selectedEdgeType!.target_label} -
-
-
-
- - {t('addition.common.allow-multiple-connections')}: - -
- -
-
-
- {t('addition.common.association-property')}: -
-
-
- {t('addition.common.property')} - {t('addition.common.allow-null')} -
- {edgeTypeStore.selectedEdgeType!.properties.map( - ({ name, nullable }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditEdge && - edgeTypeStore.editedSelectedEdgeType.append_properties.map( - ({ name }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditEdge && ( -
{ - switchIsAddProperty(!isAddProperty); - }} - > - - {t('addition.common.add-property')} - - toogleAddProperties -
- )} - {isEditEdge && isAddProperty && ( -
- {metadataPropertyStore.metadataProperties - .filter( - (property) => - edgeTypeStore.selectedEdgeType!.properties.find( - ({ name }) => name === property.name - ) === undefined - ) - .map((property) => ( -
- - - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesInSelectedVertextType = - edgeTypeStore.addedPropertiesInSelectedEdgeType; - - addedPropertiesInSelectedVertextType.has( - property.name - ) - ? addedPropertiesInSelectedVertextType.delete( - property.name - ) - : addedPropertiesInSelectedVertextType.add( - property.name - ); - - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_properties: [ - ...addedPropertiesInSelectedVertextType - ].map((propertyName) => { - const currentProperty = edgeTypeStore.newEdgeType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined( - currentProperty - ) - ? currentProperty.nullable - : true - }; - }) - }); - }} - > - {property.name} - - -
- ))} -
- )} -
-
-
-
- - {t('addition.common.distinguishing-key-property')}: - -
-
- {edgeTypeStore.selectedEdgeType!.sort_keys.join(';')} -
-
-
-
- - {t('addition.edge.display-content')}: - -
- {isEditEdge ? ( - - ) : ( -
- {edgeTypeStore.selectedEdgeType?.style.display_fields - .map((field) => - formatVertexIdText( - field, - t('addition.function-parameter.edge-type') - ) - ) - .join('-')} -
- )} -
-
- {t('addition.edge.index-info')} -
-
-
- {t('addition.menu.type-index')}: -
- -
-
-
- {t('addition.common.property-index')}: -
-
- {(edgeTypeStore.selectedEdgeType!.property_indexes - .length !== 0 || - edgeTypeStore.editedSelectedEdgeType - .append_property_indexes.length !== 0) && ( -
- {t('addition.edge.index-name')} - {t('addition.edge.index-type')} - {t('addition.common.property')} -
- )} - {edgeTypeStore - .selectedEdgeType!.property_indexes.filter( - (propertyIndex) => - isUndefined( - edgeTypeStore.editedSelectedEdgeType.remove_property_indexes.find( - (removedPropertyName) => - removedPropertyName === propertyIndex.name - ) - ) - ) - .map(({ name, type, fields }, index) => { - return ( -
-
{name}
-
{propertyIndexTypeMappings[type]}
-
- - {fields - .map( - (field, index) => index + 1 + '.' + field - ) - .join(';')} - - - {isEditEdge && ( - -

- {t( - 'addition.message.property-del-confirm' - )} -

-

- {t( - 'addition.message.index-del-confirm' - )} -

-
-
{ - const removedPropertyIndex = cloneDeep( - edgeTypeStore - .editedSelectedEdgeType - .remove_property_indexes - ); - - removedPropertyIndex.push( - edgeTypeStore.selectedEdgeType! - .property_indexes[index].name - ); - - edgeTypeStore.mutateEditedSelectedEdgeType( - { - ...edgeTypeStore.editedSelectedEdgeType, - remove_property_indexes: removedPropertyIndex - } - ); - - setDeleteExistPopIndexInDrawer( - null - ); - edgeTypeStore.validateEditEdgeType( - true - ); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeleteExistPopIndexInDrawer( - null - ); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteExistPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> - )} -
-
- ); - })} - {edgeTypeStore.editedSelectedEdgeType.append_property_indexes.map( - ({ name, type, fields }, index) => { - return ( -
-
- { - const propertyIndexEntities = cloneDeep( - edgeTypeStore.editedSelectedEdgeType - .append_property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - edgeTypeStore.validateEditEdgeType(); - } - }} - /> -
-
- -
-
- - - -

- {t( - 'addition.message.property-del-confirm' - )} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const appendPropertyIndexes = cloneDeep( - edgeTypeStore.editedSelectedEdgeType! - .append_property_indexes - ); - - appendPropertyIndexes.splice( - index, - 1 - ); - - edgeTypeStore.mutateEditedSelectedEdgeType( - { - ...edgeTypeStore.editedSelectedEdgeType, - append_property_indexes: appendPropertyIndexes - } - ); - - setDeleteAddedPopIndexInDrawer(null); - edgeTypeStore.validateEditEdgeType( - true - ); - }} - > - {t('addition.common.confirm')} -
-
{ - edgeTypeStore.resetEditedSelectedEdgeType(); - setDeleteAddedPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteAddedPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> -
-
- ); - } - )} - {isEditEdge && ( - { - if ( - edgeTypeStore.editedSelectedEdgeType - .append_property_indexes.length === 0 || - edgeTypeStore.isEditReady - ) { - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_property_indexes: [ - ...edgeTypeStore.editedSelectedEdgeType - .append_property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - edgeTypeStore.validateEditEdgeType(true); - } - }} - style={{ - cursor: 'pointer', - color: edgeTypeStore.isEditReady ? '#2b65ff' : '#999' - }} - > - {t('addition.edge.add-group')} - - )} -
-
- - - )} -
- - - ); -}); - -export interface EdgeTypeListManipulation { - edgeName: string; - edgeIndex: number; - switchIsEditEdge: (flag: boolean) => void; -} - -const EdgeTypeListManipulation: React.FC = observer( - ({ edgeName, edgeIndex, switchIsEditEdge }) => { - const { edgeTypeStore } = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - const [isPopDeleteModal, switchPopDeleteModal] = useState(false); - const [isDeleting, switchDeleting] = useState(false); - const deleteWrapperRef = useRef(null); - const isDeleteOrBatchDeleting = - isDeleting || - (edgeTypeStore.requestStatus.deleteEdgeType === 'pending' && - edgeTypeStore.selectedEdgeTypeNames.includes(edgeName)); - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - if ( - isPopDeleteModal && - deleteWrapperRef && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - switchPopDeleteModal(false); - } - }, - [deleteWrapperRef, isPopDeleteModal] - ); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( -
- { - edgeTypeStore.selectEdgeType(edgeIndex); - edgeTypeStore.validateEditEdgeType(true); - switchIsEditEdge(true); - - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - style: { - color: edgeTypeStore.selectedEdgeType!.style.color, - icon: null, - with_arrow: edgeTypeStore.selectedEdgeType!.style.with_arrow, - thickness: edgeTypeStore.selectedEdgeType!.style.thickness, - display_fields: edgeTypeStore.selectedEdgeType!.style - .display_fields - } - }); - }} - > - {t('addition.common.edit')} - -
- {isDeleteOrBatchDeleting && ( - - )} - -

- {t('addition.edge.confirm-del-edge-type')} -

-

{t('addition.edge.confirm-del-edge-type-again')}

-

{t('addition.message.long-time-notice')}

-
- - -
-
- } - childrenProps={{ - className: 'metadata-properties-manipulation', - title: isDeleteOrBatchDeleting - ? t('addition.operate.del-ing') - : t('addition.common.del'), - onClick() { - if (isDeleteOrBatchDeleting) { - return; - } - - switchPopDeleteModal(true); - } - }} - > - {isDeleteOrBatchDeleting - ? t('addition.operate.del-ing') - : t('addition.common.del')} - -
- - ); - } -); - -const EmptyEdgeTypeHints: React.FC = observer(() => { - const { edgeTypeStore } = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - return ( -
- Add new property -
- {t('addition.edge.no-edge-desc')} -
-
- - -
-
- ); -}); - -export default EdgeTypeList; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less deleted file mode 100644 index db945395a..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.new-edge-type-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 16px; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx deleted file mode 100644 index 4864443af..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx +++ /dev/null @@ -1,1099 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import classnames from 'classnames'; -import { isUndefined, cloneDeep } from 'lodash-es'; -import { - Input, - Select, - Button, - Switch, - Tooltip, - Checkbox, - Message -} from 'hubble-ui'; - -import { Tooltip as CustomTooltip } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { formatVertexIdText } from '../../../../stores/utils'; - -import type { EdgeTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; -import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; -import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; -import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; -import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; -import { useTranslation } from 'react-i18next'; - -const NewVertexType: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { t } = useTranslation(); - const { metadataPropertyStore, vertexTypeStore, edgeTypeStore } = useContext( - MetadataConfigsRootStore - ); - const [isAddNewProperty, switchIsAddNewProperty] = useState(false); - const [deletePopIndex, setDeletePopIndex] = useState(null); - const dropdownWrapperRef = useRef(null); - const deleteWrapperRef = useRef(null); - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - if ( - isAddNewProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddNewProperty(false); - } - - if ( - deletePopIndex && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - setDeletePopIndex(null); - } - }, - [deletePopIndex, isAddNewProperty] - ); - - useEffect(() => { - metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); - vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); - edgeTypeStore.validateAllNewEdgeType(true); - }, [edgeTypeStore, metadataPropertyStore, vertexTypeStore]); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( -
-
-
- {t('addition.menu.base-info')} -
-
-
- * - {t('addition.common.edge-type-name')}: -
- { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - name: e.value - }); - }} - originInputProps={{ - onBlur() { - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType('name'); - } - }} - /> -
-
-
- * - {t('addition.common.edge-style')}: -
-
- -
-
- -
-
- -
-
- -
-
- * - {t('addition.common.source-type')}: -
- -
-
-
- * - {t('addition.common.target-type')}: -
- -
-
-
- * - {t('addition.common.allow-multiple-connections')}: - - hint - -
- { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - link_multi_times: checked - }); - }} - /> -
-
-
- {edgeTypeStore.newEdgeType.link_multi_times && ( - * - )} - {t('addition.common.association-property')}: -
-
- {edgeTypeStore.newEdgeType.properties.length !== 0 && ( -
-
-
{t('addition.common.property')}
-
{t('addition.common.allow-null')}
-
- {edgeTypeStore.newEdgeType.properties.map((property, index) => { - const currentProperties = cloneDeep( - edgeTypeStore.newEdgeType.properties - ); - - return ( -
-
{property.name}
-
- { - currentProperties[index].nullable = - !currentProperties[index].nullable; - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - properties: currentProperties - }); - - // remove primary keys since it could be empty value - if (checked) { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - sort_keys: - edgeTypeStore.newEdgeType.sort_keys.filter( - (key) => key !== property.name - ) - }); - } - }} - size="large" - /> -
-
- ); - })} -
- )} -
{ - switchIsAddNewProperty(!isAddNewProperty); - }} - > - {t('addition.common.add-property')} - toggleAddProperty -
-
-
- {isAddNewProperty && ( -
-
-
- {metadataPropertyStore.metadataProperties.map((property) => ( -
- - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesIndexInSelectedEdgeType = - edgeTypeStore.addedPropertiesInSelectedEdgeType; - - addedPropertiesIndexInSelectedEdgeType.has( - property.name - ) - ? addedPropertiesIndexInSelectedEdgeType.delete( - property.name - ) - : addedPropertiesIndexInSelectedEdgeType.add( - property.name - ); - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - properties: [ - ...addedPropertiesIndexInSelectedEdgeType - ].map((propertyName) => { - const currentProperty = - edgeTypeStore.newEdgeType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined(currentProperty) - ? currentProperty.nullable - : true - }; - }) - }); - - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType('properties'); - }} - > - {property.name} - - -
- ))} -
-
- )} - - {edgeTypeStore.newEdgeType.link_multi_times && ( -
-
- * - {t('addition.common.distinguishing-key')}: -
- -
- )} - -
-
- * - {t('addition.edge.display-content')}: -
- -
- -
- - {t('addition.edge.index-info')} - - - hint - -
-
-
- * - {t('addition.menu.type-index')}: -
- { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - open_label_index: checked - }); - }} - /> -
- -
-
- {t('addition.common.property-index')}: -
-
- {edgeTypeStore.newEdgeType.property_indexes.length !== 0 && ( -
-
- {t('addition.edge.index-name')} -
-
- {t('addition.edge.index-type')} -
-
{t('addition.common.property')}
-
- )} - {edgeTypeStore.newEdgeType.property_indexes.map( - ({ name, type, fields }, index) => ( -
-
- { - const propertyIndexEntities = cloneDeep( - edgeTypeStore.newEdgeType.property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType('propertyIndexes'); - } - }} - /> -
-
- -
-
- -
- -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const propertyIndexEntities = cloneDeep( - edgeTypeStore.newEdgeType.property_indexes - ); - - propertyIndexEntities.splice(index, 1); - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - property_indexes: propertyIndexEntities - }); - - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType( - 'propertyIndexes' - ); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeletePopIndex(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: closeIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeletePopIndex(index); - } - }} - childrenWrapperElement="img" - /> -
- ) - )} - { - if ( - edgeTypeStore.newEdgeType.property_indexes.length === 0 || - edgeTypeStore.isAddNewPropertyIndexReady - ) { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - property_indexes: [ - ...edgeTypeStore.newEdgeType.property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - edgeTypeStore.validateAllNewEdgeType(true); - // set isAddNewPropertyIndexReady to false - edgeTypeStore.validateNewEdgeType('propertyIndexes', true); - } - }} - style={{ - cursor: 'pointer', - color: edgeTypeStore.isAddNewPropertyIndexReady - ? '#2b65ff' - : '#999', - lineHeight: '32px' - }} - > - {t('addition.edge.add-group')} - -
-
- -
-
- - -
-
- - ); -}); - -export default NewVertexType; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less deleted file mode 100644 index 71698137e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.reuse-properties-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 16px; - - .reuse-steps { - width: 860px; - margin: 16px auto 18px; - } - - .reuse-properties { - &-row { - display: flex; - align-items: center; - margin: 18px 0 32px; - font-size: 14px; - color: #333; - - &:last-child { - margin-bottom: 24px; - } - - &-name { - width: 98px; - text-align: right; - margin-right: 13.9px; - } - } - - &-manipulations { - display: flex; - justify-content: center; - margin-bottom: 88px; - } - - &-validate { - &-duplicate, - &-exist, - &-pass { - width: 58px; - margin: 0 auto; - border-radius: 2px; - letter-spacing: 0; - line-height: 22px; - text-align: center; - } - - &-duplicate { - background: #fff2f2; - border: 1px solid #ff9499; - color: #e64552; - } - - &-exist, - &-pass { - background: #f2fff4; - border: 1px solid #7ed988; - color: #39bf45; - } - } - - &-complete-hint { - display: flex; - flex-direction: column; - justify-content: center; - margin: 88px auto 327px; - - &-description { - display: flex; - justify-content: center; - - & > div { - margin-left: 20px; - } - } - - &-manipulations { - margin: 42px auto 0; - } - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx deleted file mode 100644 index 6a462e4ad..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx +++ /dev/null @@ -1,1237 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useState, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { - Select, - Steps, - Transfer, - Button, - Table, - Input, - Message -} from 'hubble-ui'; - -import { GraphManagementStoreContext } from '../../../../stores'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -import PassIcon from '../../../../assets/imgs/ic_pass.svg'; - -import './ReuseEdgeTypes.less'; -import { cloneDeep } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; - -const ReuseEdgeTypes: React.FC = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - const { edgeTypeStore } = metadataConfigsRootStore; - const [currentStatus, setCurrentStatus] = useState(1); - // acutally the name, not id in database - const [selectedId, mutateSelectedId] = useState<[] | string>([]); - const [selectedList, mutateSelectedList] = useState([]); - - // step 2 - const [edgeTypeEditIndex, setEdgeTypeEditIndex] = useState( - null - ); - const [vertexTypeEditIndex, setVertexTypeEditIndex] = useState( - null - ); - const [propertyEditIndex, setPropertyEditIndex] = useState( - null - ); - const [propertyIndexEditIndex, setPropertyIndexEditIndex] = useState< - number | null - >(null); - - // hack: need to call @observable at here to dispatch re-render by mobx - // since @action in onBlur() in doesn't dispatch re-render - edgeTypeStore.validateReuseErrorMessage.edgeType.toUpperCase(); - edgeTypeStore.validateReuseErrorMessage.vertexType.toUpperCase(); - edgeTypeStore.validateReuseErrorMessage.property.toUpperCase(); - edgeTypeStore.validateReuseErrorMessage.property_index.toUpperCase(); - - const edgeTypeColumnConfigs = [ - { - title: t('addition.common.edge-type-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (index !== edgeTypeEditIndex) { - return ( -
- {text} -
- ); - } - - return ( - { - edgeTypeStore.resetValidateReuseErrorMessage('edgeType'); - - const editedCheckedReusableData = cloneDeep( - edgeTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.edgelabel_conflicts[index].entity.name = - e.value; - - edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); - }} - originInputProps={{ - onBlur() { - edgeTypeStore.validateReuseData( - 'edgeType', - edgeTypeStore.checkedReusableData!.edgelabel_conflicts[index] - .entity.name, - edgeTypeStore.editedCheckedReusableData!.edgelabel_conflicts[ - index - ].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - width: '30%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (edgeTypeStore.reusableEdgeTypeNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - const originalName = edgeTypeStore.checkedReusableData! - .edgelabel_conflicts[index].entity.name; - const changedName = edgeTypeStore.editedCheckedReusableData! - .edgelabel_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - if (edgeTypeEditIndex === index) { - return ( -
- { - if ( - !isChanged || - !edgeTypeStore.validateReuseData( - 'edgeType', - originalName, - changedName - ) - ) { - return; - } - - edgeTypeStore.mutateReuseData( - 'edgeType', - originalName, - changedName - ); - setEdgeTypeEditIndex(null); - edgeTypeStore.mutateReusableEdgeTypeChangeIndexes(index); - }} - > - {t('addition.common.save')} - - { - edgeTypeStore.resetValidateReuseErrorMessage('edgeType'); - setEdgeTypeEditIndex(null); - edgeTypeStore.resetEditedReusableEdgeTypeName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (edgeTypeEditIndex !== null) { - return; - } - - setEdgeTypeEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (edgeTypeEditIndex !== null) { - return; - } - - setEdgeTypeEditIndex(null); - - // remove selected status of the property in - const newSelectedList = [...selectedList].filter( - (property) => - property !== - edgeTypeStore.editedCheckedReusableData! - .edgelabel_conflicts[index].entity.name - ); - - mutateSelectedList(newSelectedList); - - // notice: useState hooks cannot sync updated state value, so the length is still 1 - if (selectedList.length === 1) { - setCurrentStatus(1); - // remove edit status after return previous - edgeTypeStore.clearReusableNameChangeIndexes(); - return; - } - - edgeTypeStore.deleteReuseData('edgelabel_conflicts', index); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - const vertexTypeColumnConfigs = [ - { - title: t('addition.common.vertex-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (index !== vertexTypeEditIndex) { - return text; - } - - return ( - { - edgeTypeStore.resetValidateReuseErrorMessage('vertexType'); - - const editedCheckedReusableData = cloneDeep( - edgeTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.vertexlabel_conflicts[ - index - ].entity.name = e.value; - - edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); - }} - originInputProps={{ - onBlur() { - edgeTypeStore.validateReuseData( - 'vertexType', - edgeTypeStore.checkedReusableData!.vertexlabel_conflicts[ - index - ].entity.name, - edgeTypeStore.editedCheckedReusableData! - .vertexlabel_conflicts[index].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - width: '30%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (edgeTypeStore.reusableVertexTypeNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - const originalName = edgeTypeStore.checkedReusableData! - .vertexlabel_conflicts[index].entity.name; - const changedName = edgeTypeStore.editedCheckedReusableData! - .vertexlabel_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - if (index === vertexTypeEditIndex) { - return ( -
- { - if ( - !isChanged || - !edgeTypeStore.validateReuseData( - 'vertexType', - originalName, - changedName - ) - ) { - return; - } - - edgeTypeStore.mutateReuseData( - 'vertexType', - originalName, - changedName - ); - setVertexTypeEditIndex(null); - edgeTypeStore.mutateReusableVertexTypeChangeIndexes(index); - }} - > - {t('addition.common.save')} - - { - edgeTypeStore.resetValidateReuseErrorMessage('vertexType'); - setVertexTypeEditIndex(null); - edgeTypeStore.resetEditedReusableVertexTypeName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (vertexTypeEditIndex !== null) { - return; - } - - setVertexTypeEditIndex(index); - }} - > - {t('addition.operate.rename')} - -
- ); - } - } - ]; - - const metadataPropertyColumnConfigs = [ - { - title: t('addition.common.property-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (propertyEditIndex !== index) { - return text; - } - - return ( - { - edgeTypeStore.resetValidateReuseErrorMessage('property'); - - const editedCheckedReusableData = cloneDeep( - edgeTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.propertykey_conflicts[ - index - ].entity.name = e.value; - - edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); - }} - originInputProps={{ - onBlur() { - edgeTypeStore.validateReuseData( - 'property', - edgeTypeStore.checkedReusableData!.propertykey_conflicts[ - index - ].entity.name, - edgeTypeStore.editedCheckedReusableData! - .propertykey_conflicts[index].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.common.data-type'), - dataIndex: 'data_type', - width: '15%', - render(text: string) { - if (text === 'TEXT') { - return 'string'; - } - - return text.toLowerCase(); - } - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - align: 'center', - width: '15%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (edgeTypeStore.reusablePropertyNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return
{text}
; - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - if (index === propertyEditIndex) { - const originalName = edgeTypeStore.checkedReusableData! - .propertykey_conflicts[index].entity.name; - const changedName = edgeTypeStore.editedCheckedReusableData! - .propertykey_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - return ( -
- { - if ( - !isChanged || - !edgeTypeStore.validateReuseData( - 'property', - originalName, - changedName - ) - ) { - return; - } - - edgeTypeStore.mutateReuseData( - 'property', - originalName, - changedName - ); - setPropertyEditIndex(null); - edgeTypeStore.mutateReusablePropertyNameChangeIndexes(index); - }} - > - {t('addition.common.save')} - - { - edgeTypeStore.resetValidateReuseErrorMessage('property'); - setPropertyEditIndex(null); - edgeTypeStore.resetEditedReusablePropertyName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (propertyEditIndex !== null) { - return; - } - - setPropertyEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (propertyEditIndex !== null) { - return; - } - - setPropertyEditIndex(null); - - edgeTypeStore.deleteReuseData('propertykey_conflicts', index); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - const metadataPropertyIndexColumnConfigs = [ - { - title: t('addition.common.property-index-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (index !== propertyIndexEditIndex) { - return text; - } - - return ( - { - edgeTypeStore.resetValidateReuseErrorMessage('property_index'); - - const editedCheckedReusableData = cloneDeep( - edgeTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.propertyindex_conflicts[ - index - ].entity.name = e.value; - - edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); - }} - originInputProps={{ - onBlur() { - edgeTypeStore.validateReuseData( - 'property_index', - edgeTypeStore.checkedReusableData!.propertyindex_conflicts[ - index - ].entity.name, - edgeTypeStore.editedCheckedReusableData! - .propertyindex_conflicts[index].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.common.corresponding-type'), - dataIndex: 'owner', - width: '15%' - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - align: 'center', - width: '15%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (edgeTypeStore.reusablePropertyIndexNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return
{text}
; - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - if (index === propertyIndexEditIndex) { - const originalName = edgeTypeStore.checkedReusableData! - .propertyindex_conflicts[index].entity.name; - const changedName = edgeTypeStore.editedCheckedReusableData! - .propertyindex_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - return ( -
- { - if ( - !isChanged || - !edgeTypeStore.validateReuseData( - 'property_index', - originalName, - changedName - ) - ) { - return; - } - - edgeTypeStore.mutateReuseData( - 'property_index', - originalName, - changedName - ); - setPropertyIndexEditIndex(null); - edgeTypeStore.mutateReusableVertexTypeChangeIndexes(index); - }} - > - {t('addition.common.save')} - - { - edgeTypeStore.resetValidateReuseErrorMessage( - 'property_index' - ); - setPropertyIndexEditIndex(null); - edgeTypeStore.resetEditedReusablePropertyIndexName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (propertyIndexEditIndex !== null) { - return; - } - - setPropertyIndexEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (propertyIndexEditIndex !== null) { - return; - } - - setPropertyIndexEditIndex(null); - - edgeTypeStore.deleteReuseData('propertyindex_conflicts', index); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - useEffect(() => { - // unlike metadata properties, all vertex types only needs here(in reuse) - edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); - }, [edgeTypeStore]); - - return ( -
-
- {t('addition.edge.multiplexing-edge-type')} -
-
- {t('addition.edge.multiplexing-edge-type-notice')} -
-
- - {[ - t('addition.menu.select-reuse-item'), - t('addition.menu.confirm-reuse-item'), - t('addition.menu.complete-reuse') - ].map((title: string, index: number) => ( - index + 1 - ? 'finish' - : 'wait' - } - key={title} - /> - ))} - - - {currentStatus === 1 && ( - <> -
-
- * - {t('addition.newGraphConfig.id')}: -
- -
-
-
- * - {t('addition.edge.multiplexing-edge-type')}: -
- name - )} - selectedList={selectedList} - showSearchBox={false} - candidateTreeStyle={{ - width: 359, - fontSize: 14 - }} - selectedTreeStyle={{ - width: 359, - fontSize: 14 - }} - handleSelect={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleSelectAll={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleDelete={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleDeleteAll={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - /> -
-
- - -
- - )} - - {currentStatus === 2 && ( - <> -
- {t('addition.common.selected-edge-type')} -
-
({ - name: entity.name, - status - }) - ) - : [] - } - pagination={false} - /> - -
- {t('addition.common.selected-vertex-type')} -
-
({ - name: entity.name, - status - }) - ) - : [] - } - pagination={false} - /> - -
- {t('addition.common.selected-property')} -
-
({ - name: entity.name, - data_type: entity.data_type, - status - }) - ) - : [] - } - pagination={false} - /> - -
- {t('addition.common.selected-property-index')} -
-
({ - name: entity.name, - owner: entity.owner, - status - }) - ) - : [] - } - pagination={false} - /> - -
- - -
- - )} - - {currentStatus === 3 && ( -
-
- {t('addition.message.reuse-complete')} -
-
{t('addition.message.reuse-complete')}
-
{t('addition.message.vertex-type-reuse-success')}
-
-
-
- - -
-
- )} - - - ); -}); - -export default ReuseEdgeTypes; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/index.ts deleted file mode 100644 index 2326af6d4..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/edge-type/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import NewEdgeType from './NewEdgeType'; -import EdgeTypeList from './EdgeTypeList'; - -export { NewEdgeType, EdgeTypeList }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx deleted file mode 100644 index 2ff3edae7..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx +++ /dev/null @@ -1,1415 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import classnames from 'classnames'; -import { cloneDeep, merge, isUndefined, isEmpty } from 'lodash-es'; -import { - Drawer, - Button, - Input, - Select, - Switch, - Checkbox, - Message -} from 'hubble-ui'; - -import { Tooltip } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import { - mapMetadataProperties, - generateGraphModeId, - formatVertexIdText, - edgeWidthMapping -} from '../../../../stores/utils'; - -import type { EdgeTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; -import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; -import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; -import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; -import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; -import i18next from '../../../../i18n'; -import { useTranslation } from 'react-i18next'; - -const propertyIndexTypeMappings: Record = { - SECONDARY: i18next.t('addition.menu.secondary-index'), - RANGE: i18next.t('addition.menu.range-index'), - SEARCH: i18next.t('addition.menu.full-text-index') -}; - -const CheckAndEditEdge: React.FC = observer(() => { - const { metadataPropertyStore, edgeTypeStore, graphViewStore } = useContext( - MetadataConfigsRootStore - ); - const { t } = useTranslation(); - const [isAddProperty, switchIsAddProperty] = useState(false); - const [isDeletePop, switchDeletePop] = useState(false); - const [ - deleteExistPopIndexInDrawer, - setDeleteExistPopIndexInDrawer - ] = useState(null); - const [ - deleteAddedPopIndexInDrawer, - setDeleteAddedPopIndexInDrawer - ] = useState(null); - - const deleteWrapperRef = useRef(null); - const dropdownWrapperRef = useRef(null); - const deleteWrapperInDrawerRef = useRef(null); - - const isEditEdge = graphViewStore.currentDrawer === 'edit-edge'; - - const metadataDrawerOptionClass = classnames({ - 'metadata-drawer-options': true, - 'metadata-drawer-options-disabled': isEditEdge - }); - - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - const drawerWrapper = document.querySelector( - '.new-fc-one-drawer-content-wrapper' - ); - - if ( - graphViewStore.currentDrawer === 'check-edge' && - drawerWrapper && - !drawerWrapper.contains(e.target as Element) - ) { - /* - handleOutSideClick is being called after the value assignment of data and drawer-name, - we need to judge whether a node or edge is being clicked - */ - if (graphViewStore.isNodeOrEdgeClicked) { - // if node/edge is clicked, reset state and prepare for next outside clicks - graphViewStore.switchNodeOrEdgeClicked(false); - } else { - graphViewStore.setCurrentDrawer(''); - } - } - - if ( - isEditEdge && - isAddProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddProperty(false); - return; - } - - if ( - isDeletePop !== null && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - switchDeletePop(false); - } - }, - [graphViewStore, isEditEdge, isAddProperty, isDeletePop] - ); - - const handleCloseDrawer = () => { - switchIsAddProperty(false); - graphViewStore.setCurrentDrawer(''); - edgeTypeStore.selectEdgeType(null); - // clear mutations in - edgeTypeStore.resetEditedSelectedEdgeType(); - }; - - const handleDeleteEdge = async () => { - // cache vertex name here before it gets removed - const edgeName = edgeTypeStore.selectedEdgeType!.name; - const edgeId = generateGraphModeId( - edgeName, - edgeTypeStore.selectedEdgeType!.source_label, - edgeTypeStore.selectedEdgeType!.target_label - ); - const edgeInfo = graphViewStore.visDataSet!.edges.get(edgeName); - - switchDeletePop(false); - handleCloseDrawer(); - - graphViewStore.visDataSet!.edges.remove(edgeId); - - await edgeTypeStore.deleteEdgeType([edgeName]); - - if (edgeTypeStore.requestStatus.deleteEdgeType === 'success') { - Message.success({ - content: t('addition.common.del-success'), - size: 'medium', - showCloseIcon: false - }); - - edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); - } - - if (edgeTypeStore.requestStatus.deleteEdgeType === 'failed') { - Message.error({ - content: edgeTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - - // if failed, re-add edge - graphViewStore.visDataSet?.edges.add(edgeInfo); - } - }; - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - if (edgeTypeStore.selectedEdgeType === null) { - return null; - } - - return ( - { - if (!isEditEdge) { - graphViewStore.setCurrentDrawer('edit-edge'); - edgeTypeStore.validateEditEdgeType(); - } else { - const id = generateGraphModeId( - edgeTypeStore.selectedEdgeType!.name, - edgeTypeStore.selectedEdgeType!.source_label, - edgeTypeStore.selectedEdgeType!.target_label - ); - const updateInfo: Record = {}; - - if ( - !isEmpty(edgeTypeStore.editedSelectedEdgeType.append_properties) - ) { - const mappedProperties = mapMetadataProperties( - edgeTypeStore.selectedEdgeType!.properties, - metadataPropertyStore.metadataProperties - ); - - const newMappedProperties = mapMetadataProperties( - edgeTypeStore.editedSelectedEdgeType.append_properties, - metadataPropertyStore.metadataProperties - ); - - const mergedProperties = merge( - mappedProperties, - newMappedProperties - ); - - updateInfo.title = ` - - - ${Object.entries(mergedProperties) - .map(([key, value]) => { - const convertedValue = - value.toLowerCase() === 'text' - ? 'string' - : value.toLowerCase(); - - return ``; - }) - .join('')} - `; - } - - if (edgeTypeStore.editedSelectedEdgeType.style.color !== null) { - updateInfo.color = { - color: edgeTypeStore.editedSelectedEdgeType.style.color, - highlight: edgeTypeStore.editedSelectedEdgeType.style.color, - hover: edgeTypeStore.editedSelectedEdgeType.style.color - }; - } - - if ( - edgeTypeStore.editedSelectedEdgeType.style.with_arrow !== null - ) { - updateInfo.arrows = - edgeTypeStore.editedSelectedEdgeType.style.with_arrow === true - ? 'to' - : ''; - } - - if ( - edgeTypeStore.editedSelectedEdgeType.style.thickness !== null - ) { - updateInfo.value = - edgeWidthMapping[ - edgeTypeStore.editedSelectedEdgeType.style.thickness - ]; - } - - if (!isEmpty(updateInfo)) { - updateInfo.id = id; - - graphViewStore.visDataSet!.edges.update(updateInfo); - } - await edgeTypeStore.updateEdgeType(); - - if (edgeTypeStore.requestStatus.updateEdgeType === 'failed') { - Message.error({ - content: edgeTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - - return; - } - - if (edgeTypeStore.requestStatus.updateEdgeType === 'success') { - Message.success({ - content: t('addition.operate.modify-success'), - size: 'medium', - showCloseIcon: false - }); - } - - handleCloseDrawer(); - graphViewStore.visNetwork!.unselectAll(); - edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); - } - }} - key="drawer-manipulation" - > - {isEditEdge ? t('addition.common.save') : t('addition.common.edit')} - , - -

- {t('addition.edge.confirm-del-edge-type')} -

-

{t('addition.edge.confirm-del-edge-careful-notice')}

-

{t('addition.message.long-time-notice')}

-
-
- {t('addition.common.confirm')} -
-
{ - switchDeletePop(false); - }} - > - {t('addition.common.cancel')} -
-
- - } - childrenProps={{ - onClick() { - if (isEditEdge) { - handleCloseDrawer(); - return; - } - - switchDeletePop(true); - } - }} - > - -
- ]} - > -
-
-
- {t('addition.menu.base-info')} -
-
-
- {t('addition.common.edge-type-name')}: -
-
- {edgeTypeStore.selectedEdgeType!.name} -
-
- -
-
- - {t('addition.common.edge-style')}: - -
-
- -
-
- -
-
- -
-
-
-
- {t('addition.common.source-type')}: -
-
- {edgeTypeStore.selectedEdgeType!.source_label} -
-
-
-
- {t('addition.common.target-type')}: -
-
- {edgeTypeStore.selectedEdgeType!.target_label} -
-
-
-
- {t('addition.common.allow-multiple-connections')}: -
- -
-
-
- {t('addition.common.association-property')}: -
-
-
- {t('addition.common.property')} - {t('addition.common.allow-null')} -
- {edgeTypeStore.selectedEdgeType!.properties.map( - ({ name, nullable }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditEdge && - edgeTypeStore.editedSelectedEdgeType.append_properties.map( - ({ name }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditEdge && ( -
{ - switchIsAddProperty(!isAddProperty); - }} - > - - {t('addition.common.add-property')} - - toogleAddProperties -
- )} - {isEditEdge && isAddProperty && ( -
- {metadataPropertyStore.metadataProperties - .filter( - (property) => - edgeTypeStore.selectedEdgeType!.properties.find( - ({ name }) => name === property.name - ) === undefined - ) - .map((property) => ( -
- - - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesInSelectedVertextType = - edgeTypeStore.addedPropertiesInSelectedEdgeType; - - addedPropertiesInSelectedVertextType.has( - property.name - ) - ? addedPropertiesInSelectedVertextType.delete( - property.name - ) - : addedPropertiesInSelectedVertextType.add( - property.name - ); - - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_properties: [ - ...addedPropertiesInSelectedVertextType - ].map((propertyName) => { - const currentProperty = edgeTypeStore.newEdgeType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined(currentProperty) - ? currentProperty.nullable - : true - }; - }) - }); - }} - > - {property.name} - - -
- ))} -
- )} -
-
- -
-
- {t('addition.common.distinguishing-key-property')}: -
-
- {edgeTypeStore.selectedEdgeType!.sort_keys.join(';')} -
-
- -
-
- - {t('addition.edge.display-content')}: - -
- {isEditEdge ? ( - - ) : ( -
- {edgeTypeStore.selectedEdgeType?.style.display_fields - .map((field) => - formatVertexIdText( - field, - t('addition.function-parameter.edge-type') - ) - ) - .join('-')} -
- )} -
- -
- {t('addition.edge.index-info')} -
-
-
- {t('addition.menu.type-index')}: -
- -
-
-
- {t('addition.common.property-index')}: -
-
- {(edgeTypeStore.selectedEdgeType!.property_indexes.length !== 0 || - edgeTypeStore.editedSelectedEdgeType.append_property_indexes - .length !== 0) && ( -
- {t('addition.edge.index-name')} - {t('addition.edge.index-type')} - {t('addition.common.property')} -
- )} - {edgeTypeStore - .selectedEdgeType!.property_indexes.filter((propertyIndex) => - isUndefined( - edgeTypeStore.editedSelectedEdgeType.remove_property_indexes.find( - (removedPropertyName) => - removedPropertyName === propertyIndex.name - ) - ) - ) - .map(({ name, type, fields }, index) => { - return ( -
-
{name}
-
{propertyIndexTypeMappings[type]}
-
- - {fields - .map((field, index) => index + 1 + '.' + field) - .join(';')} - - - {isEditEdge && ( - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const removedPropertyIndex = cloneDeep( - edgeTypeStore.editedSelectedEdgeType - .remove_property_indexes - ); - - removedPropertyIndex.push( - edgeTypeStore.selectedEdgeType! - .property_indexes[index].name - ); - - edgeTypeStore.mutateEditedSelectedEdgeType( - { - ...edgeTypeStore.editedSelectedEdgeType, - remove_property_indexes: removedPropertyIndex - } - ); - - setDeleteExistPopIndexInDrawer(null); - edgeTypeStore.validateEditEdgeType(true); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeleteExistPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteExistPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> - )} -
-
- ); - })} - {edgeTypeStore.editedSelectedEdgeType.append_property_indexes.map( - ({ name, type, fields }, index) => { - return ( -
-
- { - const propertyIndexEntities = cloneDeep( - edgeTypeStore.editedSelectedEdgeType - .append_property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - edgeTypeStore.validateEditEdgeType(); - } - }} - /> -
-
- -
-
- - - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const appendPropertyIndexes = cloneDeep( - edgeTypeStore.editedSelectedEdgeType! - .append_property_indexes - ); - - appendPropertyIndexes.splice(index, 1); - - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_property_indexes: appendPropertyIndexes - }); - - setDeleteAddedPopIndexInDrawer(null); - edgeTypeStore.validateEditEdgeType(true); - }} - > - {t('addition.common.confirm')} -
-
{ - edgeTypeStore.resetEditedSelectedEdgeType(); - setDeleteAddedPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteAddedPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> -
-
- ); - } - )} - {isEditEdge && ( -
{ - if ( - edgeTypeStore.editedSelectedEdgeType - .append_property_indexes.length === 0 || - edgeTypeStore.isEditReady - ) { - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - append_property_indexes: [ - ...edgeTypeStore.editedSelectedEdgeType - .append_property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - edgeTypeStore.validateEditEdgeType(true); - } - }} - style={{ - cursor: 'pointer', - color: edgeTypeStore.isEditReady ? '#2b65ff' : '#999' - }} - > - {t('addition.edge.add-group')} -
- )} -
-
- - -
- ); -}); - -export default CheckAndEditEdge; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx deleted file mode 100644 index c8a064209..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx +++ /dev/null @@ -1,1310 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import classnames from 'classnames'; -import { cloneDeep, isUndefined, merge, isEmpty } from 'lodash-es'; -import { - Drawer, - Button, - Input, - Select, - Switch, - Checkbox, - Message -} from 'hubble-ui'; - -import { Tooltip } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import { - mapMetadataProperties, - formatVertexIdText, - vertexRadiusMapping -} from '../../../../stores/utils'; - -import type { - VertexTypeValidatePropertyIndexes, - VertexTypeProperty -} from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; -import i18next from '../../../../i18n'; -import { useTranslation } from 'react-i18next'; - -const IDStrategyMappings: Record = { - PRIMARY_KEY: i18next.t('addition.constant.primary-key-id'), - AUTOMATIC: i18next.t('addition.constant.automatic-generation'), - CUSTOMIZE_STRING: i18next.t('addition.constant.custom-string'), - CUSTOMIZE_NUMBER: i18next.t('addition.constant.custom-number'), - CUSTOMIZE_UUID: i18next.t('addition.constant.custom-uuid') -}; - -const propertyIndexTypeMappings: Record = { - SECONDARY: i18next.t('addition.menu.secondary-index'), - RANGE: i18next.t('addition.menu.range-index'), - SEARCH: i18next.t('addition.menu.full-text-index') -}; - -const CheckAndEditVertex: React.FC = observer(() => { - const { metadataPropertyStore, vertexTypeStore, graphViewStore } = useContext( - MetadataConfigsRootStore - ); - const { t } = useTranslation(); - const [isAddProperty, switchIsAddProperty] = useState(false); - const [isDeletePop, switchDeletePop] = useState(false); - const [ - deleteExistPopIndexInDrawer, - setDeleteExistPopIndexInDrawer - ] = useState(null); - const [ - deleteAddedPopIndexInDrawer, - setDeleteAddedPopIndexInDrawer - ] = useState(null); - - const deleteWrapperRef = useRef(null); - const dropdownWrapperRef = useRef(null); - const deleteWrapperInDrawerRef = useRef(null); - - const isEditVertex = graphViewStore.currentDrawer === 'edit-vertex'; - - const metadataDrawerOptionClass = classnames({ - 'metadata-drawer-options': true, - 'metadata-drawer-options-disabled': isEditVertex - }); - - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - const drawerWrapper = document.querySelector( - '.new-fc-one-drawer-content-wrapper' - ); - - if ( - graphViewStore.currentDrawer === 'check-vertex' && - drawerWrapper && - !drawerWrapper.contains(e.target as Element) - ) { - /* - handleOutSideClick is being called after the value assignment of data and drawer-name, - we need to judge whether a node or edge is being clicked - */ - if (graphViewStore.isNodeOrEdgeClicked) { - // if node/edge is clicked, reset state and prepare for next outside clicks - graphViewStore.switchNodeOrEdgeClicked(false); - } else { - graphViewStore.setCurrentDrawer(''); - } - } - - if ( - isAddProperty && - isEditVertex && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddProperty(false); - return; - } - - if ( - isDeletePop && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - switchDeletePop(false); - } - }, - [graphViewStore, isAddProperty, isEditVertex, isDeletePop] - ); - - const handleCloseDrawer = () => { - switchIsAddProperty(false); - graphViewStore.setCurrentDrawer(''); - vertexTypeStore.selectVertexType(null); - // clear mutations in - vertexTypeStore.resetEditedSelectedVertexType(); - }; - - const handleDeleteVertex = async () => { - // cache vertex name here before it gets removed - const vertexName = vertexTypeStore.selectedVertexType!.name; - const vertexInfo = graphViewStore.visDataSet?.nodes.get(vertexName); - const connectedEdgeInfos = graphViewStore.visDataSet?.edges.get( - graphViewStore.visNetwork?.getConnectedEdges(vertexName) - ); - - // close - handleCloseDrawer(); - switchDeletePop(false); - - // if node > 1, delete node on local before send request - if (graphViewStore.visDataSet!.nodes.length > 1) { - graphViewStore.visDataSet!.nodes.remove(vertexName); - } - - await vertexTypeStore.deleteVertexType([vertexName]); - - if (vertexTypeStore.requestStatus.deleteVertexType === 'success') { - Message.success({ - content: t('addition.common.del-success'), - size: 'medium', - showCloseIcon: false - }); - - vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); - - // if delete the last node, fetch graph data to trigger re-render to reveal - if (graphViewStore.visDataSet?.nodes.length === 1) { - graphViewStore.switchGraphDataEmpty(true); - graphViewStore.fetchGraphViewData(); - } - } - - if (vertexTypeStore.requestStatus.deleteVertexType === 'failed') { - Message.error({ - content: vertexTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - - // if failed, re-add vertex and edges - graphViewStore.visDataSet!.nodes.add(vertexInfo); - graphViewStore.visDataSet!.edges.add(connectedEdgeInfos); - } - }; - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - if (vertexTypeStore.selectedVertexType === null) { - return null; - } - - return ( - { - if (!isEditVertex) { - graphViewStore.setCurrentDrawer('edit-vertex'); - vertexTypeStore.validateEditVertexType(); - } else { - const id = vertexTypeStore.selectedVertexType!.name; - const updateInfo: Record = {}; - - if ( - !isEmpty( - vertexTypeStore.editedSelectedVertexType.append_properties - ) - ) { - const mappedProperties = mapMetadataProperties( - vertexTypeStore.selectedVertexType!.properties, - metadataPropertyStore.metadataProperties - ); - - const newMappedProperties = mapMetadataProperties( - vertexTypeStore.editedSelectedVertexType.append_properties, - metadataPropertyStore.metadataProperties - ); - - const mergedProperties = merge( - mappedProperties, - newMappedProperties - ); - - updateInfo.title = ` - - - ${Object.entries(mergedProperties) - .map(([key, value]) => { - const convertedValue = - value.toLowerCase() === 'text' - ? 'string' - : value.toLowerCase(); - - return ``; - }) - .join('')} - `; - } - - if ( - vertexTypeStore.editedSelectedVertexType.style.color !== null - ) { - updateInfo.color = { - background: - vertexTypeStore.editedSelectedVertexType.style.color, - border: vertexTypeStore.editedSelectedVertexType.style.color - }; - } - - if ( - vertexTypeStore.editedSelectedVertexType.style.size !== null - ) { - updateInfo.value = - vertexRadiusMapping[ - vertexTypeStore.editedSelectedVertexType.style.size - ]; - } - - if (!isEmpty(updateInfo)) { - updateInfo.id = id; - - graphViewStore.visDataSet!.nodes.update(updateInfo); - } - await vertexTypeStore.updateVertexType(); - - if (vertexTypeStore.requestStatus.updateVertexType === 'failed') { - Message.error({ - content: vertexTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - - return; - } - - if ( - vertexTypeStore.requestStatus.updateVertexType === 'success' - ) { - Message.success({ - content: t('addition.operate.modify-success'), - size: 'medium', - showCloseIcon: false - }); - } - - handleCloseDrawer(); - graphViewStore.visNetwork!.unselectAll(); - vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); - } - }} - key="drawer-manipulation" - > - {isEditVertex ? t('addition.common.save') : t('addition.common.edit')} - , - - {vertexTypeStore.vertexTypeUsingStatus && - vertexTypeStore.vertexTypeUsingStatus[ - vertexTypeStore.selectedVertexType!.name - ] ? ( -

- {t('addition.vertex.using-cannot-delete')} -

- ) : ( - <> -

- {t('addition.vertex.del-vertex-confirm')} -

-

{t('addition.edge.confirm-del-edge-careful-notice')}

-

{t('addition.message.long-time-notice')}

-
-
- {t('addition.common.confirm')} -
-
{ - switchDeletePop(false); - }} - > - {t('addition.common.cancel')} -
-
- - )} - - } - childrenProps={{ - onClick() { - if (isEditVertex) { - handleCloseDrawer(); - return; - } - - switchDeletePop(true); - } - }} - > - -
- ]} - > -
-
- {t('addition.menu.base-info')} -
-
-
- {t('addition.vertex.vertex-type-name')}: -
-
- {vertexTypeStore.selectedVertexType!.name} -
-
- -
-
- - {t('addition.vertex.vertex-style')}: - -
-
- -
-
- -
-
-
-
- {t('addition.common.id-strategy')}: -
- {IDStrategyMappings[vertexTypeStore.selectedVertexType!.id_strategy]} -
-
-
- {t('addition.common.association-property')}: -
-
-
- {t('addition.common.property')} - {t('addition.common.allow-null')} -
- {vertexTypeStore.selectedVertexType!.properties.map( - ({ name, nullable }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditVertex && - vertexTypeStore.editedSelectedVertexType.append_properties.map( - ({ name }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditVertex && ( -
{ - switchIsAddProperty(!isAddProperty); - }} - > - - {t('addition.common.add-property')} - - toogleAddProperties -
- )} - {isEditVertex && isAddProperty && ( -
- {metadataPropertyStore.metadataProperties - .filter( - (property) => - vertexTypeStore.selectedVertexType!.properties.find( - ({ name }) => name === property.name - ) === undefined - ) - .map((property) => ( -
- - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesInSelectedVertextType = - vertexTypeStore.addedPropertiesInSelectedVertextType; - - addedPropertiesInSelectedVertextType.has( - property.name - ) - ? addedPropertiesInSelectedVertextType.delete( - property.name - ) - : addedPropertiesInSelectedVertextType.add( - property.name - ); - - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - append_properties: [ - ...addedPropertiesInSelectedVertextType - ].map((propertyName) => { - const currentProperty = vertexTypeStore.newVertexType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined(currentProperty) - ? currentProperty.nullable - : true - }; - }) - }); - }} - > - {property.name} - - -
- ))} -
- )} -
-
-
-
- {t('addition.common.primary-key-property')}: -
-
- {vertexTypeStore.selectedVertexType!.primary_keys.join(';')} -
-
-
-
- - {t('addition.vertex.vertex-display-content')}: - -
- {isEditVertex ? ( - - ) : ( -
- {vertexTypeStore.selectedVertexType?.style.display_fields - .map((field) => - formatVertexIdText( - field, - t('addition.function-parameter.vertex-id') - ) - ) - .join('-')} -
- )} -
-
- {t('addition.edge.index-info')} -
-
-
- {t('addition.menu.type-index')}: -
- -
-
-
- {t('addition.common.property-index')}: -
-
- {(vertexTypeStore.selectedVertexType!.property_indexes.length !== - 0 || - vertexTypeStore.editedSelectedVertexType.append_property_indexes - .length !== 0) && ( -
- {t('addition.edge.index-name')} - {t('addition.edge.index-type')} - {t('addition.common.property')} -
- )} - {vertexTypeStore - .selectedVertexType!.property_indexes.filter((propertyIndex) => - isUndefined( - vertexTypeStore.editedSelectedVertexType.remove_property_indexes.find( - (removedPropertyName) => - removedPropertyName === propertyIndex.name - ) - ) - ) - .map(({ name, type, fields }, index) => { - return ( -
-
{name}
-
{propertyIndexTypeMappings[type]}
-
- - {fields - .map((field, index) => index + 1 + '.' + field) - .join(';')} - - {isEditVertex && ( - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const removedPropertyIndexes = cloneDeep( - vertexTypeStore.editedSelectedVertexType - .remove_property_indexes - ); - - removedPropertyIndexes.push( - vertexTypeStore.selectedVertexType! - .property_indexes[index].name - ); - - vertexTypeStore.mutateEditedSelectedVertexType( - { - ...vertexTypeStore.editedSelectedVertexType, - remove_property_indexes: removedPropertyIndexes - } - ); - - setDeleteExistPopIndexInDrawer(null); - vertexTypeStore.validateEditVertexType( - true - ); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeleteExistPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteExistPopIndexInDrawer(index); - } - }} - /> - )} -
-
- ); - })} - {vertexTypeStore.editedSelectedVertexType.append_property_indexes.map( - ({ name, type, fields }, index) => { - return ( -
-
- { - const propertyIndexEntities = cloneDeep( - vertexTypeStore.editedSelectedVertexType - .append_property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - append_property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - vertexTypeStore.validateEditVertexType(); - } - }} - /> -
-
- -
-
- - - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const appendPropertyIndexes = cloneDeep( - vertexTypeStore.editedSelectedVertexType! - .append_property_indexes - ); - - appendPropertyIndexes.splice(index, 1); - - vertexTypeStore.mutateEditedSelectedVertexType( - { - ...vertexTypeStore.editedSelectedVertexType, - append_property_indexes: appendPropertyIndexes - } - ); - - setDeleteAddedPopIndexInDrawer(null); - vertexTypeStore.validateEditVertexType(true); - }} - > - {t('addition.common.confirm')} -
-
{ - vertexTypeStore.resetEditedSelectedVertexType(); - setDeleteAddedPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteAddedPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> -
-
- ); - } - )} - {isEditVertex && ( -
{ - if ( - vertexTypeStore.editedSelectedVertexType - .append_property_indexes.length === 0 || - vertexTypeStore.isEditReady - ) { - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - append_property_indexes: [ - ...vertexTypeStore.editedSelectedVertexType - .append_property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - vertexTypeStore.validateEditVertexType(true); - } - }} - style={{ - cursor: 'pointer', - color: vertexTypeStore.isEditReady ? '#2b65ff' : '#999' - }} - > - {t('addition.edge.add-group')} -
- )} -
- - -
- ); -}); - -export default CheckAndEditVertex; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx deleted file mode 100644 index 0bcef5713..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import { Drawer, Table, Message } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { Tooltip } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -import type { MetadataProperty } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; -import { signal } from 'codemirror'; - -const CheckProperty: React.FC = observer(() => { - const { metadataPropertyStore, graphViewStore } = useContext( - MetadataConfigsRootStore - ); - const { t } = useTranslation(); - const [popIndex, setPopIndex] = useState(null); - const deleteWrapperRef = useRef(null); - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // note: .new-fc-one-drawer-content-wrapper sometimes only contain one single element? - // however if you capture .new-fc-one-drawer-wrapper-body-container it still returns itself and contains all children - // thus here we capture body-container as drawer - const drawerWrapper = document.querySelector( - '.new-fc-one-drawer-wrapper-body-container' - ); - - const deleteWrapper = document.querySelector('.metadata-graph-tooltips'); - - if ( - graphViewStore.currentDrawer === 'check-property' && - drawerWrapper && - !drawerWrapper.contains(e.target as Element) - ) { - if ( - deleteWrapper === null && - (e.target as Element).className !== - 'metadata-graph-property-manipulation' - ) { - graphViewStore.setCurrentDrawer(''); - } - - if ( - deleteWrapper && - !deleteWrapper.contains(e.target as Element) && - (e.target as Element).className !== - 'metadata-graph-property-manipulation' - ) { - graphViewStore.setCurrentDrawer(''); - } - } - - if ( - popIndex !== null && - deleteWrapper && - !deleteWrapper.contains(e.target as Element) - ) { - setPopIndex(null); - } - }, - [graphViewStore, popIndex] - ); - - const handleCloseDrawer = () => { - graphViewStore.setCurrentDrawer(''); - }; - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, true); - - return () => { - document.removeEventListener('click', handleOutSideClick, true); - }; - }, [handleOutSideClick]); - - const columnConfigs = [ - { - title: t('addition.common.property-name'), - dataIndex: 'name' - }, - { - title: t('addition.common.data-type'), - dataIndex: 'data_type', - render(text: string) { - const realText = text === 'TEXT' ? 'string' : text.toLowerCase(); - - return realText; - } - }, - { - title: t('addition.common.cardinal-number'), - dataIndex: 'cardinality' - }, - { - title: t('addition.operate.operate'), - render(_: any, records: MetadataProperty, index: number) { - return ( - - {metadataPropertyStore.metadataPropertyUsingStatus && - metadataPropertyStore.metadataPropertyUsingStatus[ - records.name - ] ? ( -

- {t('addition.message.property-using-cannot-delete')} -

- ) : ( - <> -

{t('addition.message.property-del-confirm')}

-

{t('addition.edge.confirm-del-edge-careful-notice')}

-
-
{ - setPopIndex(null); - await metadataPropertyStore.deleteMetadataProperty([ - records.name - ]); - if ( - metadataPropertyStore.requestStatus - .deleteMetadataProperty === 'success' - ) { - Message.success({ - content: t('addition.common.del-success'), - size: 'medium', - showCloseIcon: false - }); - metadataPropertyStore.fetchMetadataPropertyList(); - } - if ( - metadataPropertyStore.requestStatus - .deleteMetadataProperty === 'failed' - ) { - Message.error({ - content: metadataPropertyStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('addition.common.confirm')} -
-
{ - setPopIndex(null); - }} - > - {t('addition.common.cancel')} -
-
- - )} - - } - childrenProps={{ - className: 'metadata-graph-property-manipulation', - async onClick() { - await metadataPropertyStore.checkIfUsing([records.name]); - if ( - metadataPropertyStore.requestStatus.checkIfUsing === 'success' - ) { - setPopIndex(index); - } - } - }} - > - {t('addition.common.del')} -
- ); - } - } - ]; - - return ( - -
-
- - - ); -}); - -export default CheckProperty; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx deleted file mode 100644 index 87268d57b..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx +++ /dev/null @@ -1,1177 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import classnames from 'classnames'; -import { cloneDeep, isUndefined } from 'lodash-es'; -import { - Drawer, - Button, - Input, - Select, - Switch, - Checkbox, - Tooltip, - Message -} from 'hubble-ui'; - -import { Tooltip as CustomTooltip } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import { EdgeTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; -import { - mapMetadataProperties, - generateGraphModeId, - edgeWidthMapping, - formatVertexIdText -} from '../../../../stores/utils'; -import { useTranslation } from 'react-i18next'; - -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; -import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; -import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; -import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; -import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; - -const CreateEdge: React.FC = observer(() => { - const { - metadataPropertyStore, - vertexTypeStore, - edgeTypeStore, - graphViewStore - } = useContext(MetadataConfigsRootStore); - const [isAddNewProperty, switchIsAddNewProperty] = useState(false); - const [deletePopIndex, setDeletePopIndex] = useState(null); - const deleteWrapperRef = useRef(null); - const dropdownWrapperRef = useRef(null); - const { t } = useTranslation(); - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // if clicked element is not on dropdown, collpase it - if ( - isAddNewProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddNewProperty(false); - } - - if ( - deletePopIndex && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - setDeletePopIndex(null); - } - }, - [deletePopIndex, isAddNewProperty] - ); - - const handleCloseDrawer = () => { - graphViewStore.setCurrentDrawer(''); - edgeTypeStore.resetNewEdgeType(); - edgeTypeStore.resetAddedPropertiesInSelectedEdgeType(); - }; - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( - { - edgeTypeStore.validateAllNewEdgeType(); - - if (!edgeTypeStore.isCreatedReady) { - return; - } - - const { - name, - source_label, - target_label, - properties, - sort_keys, - style, - ...rest - } = edgeTypeStore.newEdgeType; - - const mappedProperties = mapMetadataProperties( - properties, - metadataPropertyStore.metadataProperties - ); - - graphViewStore.visDataSet!.edges.add({ - ...rest, - id: generateGraphModeId(name, source_label, target_label), - label: name.length <= 15 ? name : name.slice(0, 15) + '...', - from: source_label, - to: target_label, - value: edgeWidthMapping[style.thickness], - font: { size: 16, strokeWidth: 0, color: '#666' }, - arrows: style.with_arrow === true ? 'to' : '', - title: ` - - - ${Object.entries(mappedProperties) - .map(([key, value]) => { - const convertedValue = - value.toLowerCase() === 'text' - ? 'string' - : value.toLowerCase(); - - const sortKeyIndex = sort_keys.findIndex( - (sortKey) => sortKey === key - ); - - return ``; - }) - .join('')} - `, - color: { - color: style.color, - highlight: style.color, - hover: style.color - } - }); - - await edgeTypeStore.addEdgeType(); - - if (edgeTypeStore.requestStatus.addEdgeType === 'success') { - edgeTypeStore.fetchEdgeTypeList(); - edgeTypeStore.resetNewEdgeType(); - edgeTypeStore.resetAddedPropertiesInSelectedEdgeType(); - graphViewStore.setCurrentDrawer(''); - - Message.success({ - content: t('addition.newGraphConfig.create-scuccess'), - size: 'medium', - showCloseIcon: false - }); - } - - if (edgeTypeStore.requestStatus.addEdgeType === 'failed') { - Message.error({ - content: edgeTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('addition.newGraphConfig.create')} - , - - ]} - > -
-
-
-
- {t('addition.menu.base-info')} -
-
-
- * - {t('addition.common.edge-type-name')}: -
- { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - name: e.value - }); - }} - originInputProps={{ - onBlur() { - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType('name'); - } - }} - /> -
-
-
- * - {t('addition.common.edge-style')}: -
-
- -
- -
- -
- -
- -
-
-
-
- * - {t('addition.common.source-type')}: -
- -
- -
-
- * - {t('addition.common.target-type')}: -
- -
- -
-
- * - {t('addition.common.allow-multiple-connections')}: - - hint - -
- { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - link_multi_times: checked - }); - }} - /> -
- -
-
- {edgeTypeStore.newEdgeType.link_multi_times && ( - * - )} - {t('addition.common.association-property')}: -
-
- {edgeTypeStore.newEdgeType.properties.length !== 0 && ( -
-
-
{t('addition.common.property')}
-
{t('addition.common.allow-null')}
-
- {edgeTypeStore.newEdgeType.properties.map( - (property, index) => { - const currentProperties = cloneDeep( - edgeTypeStore.newEdgeType.properties - ); - - return ( -
-
{property.name}
-
- { - currentProperties[index].nullable = - !currentProperties[index].nullable; - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - properties: currentProperties - }); - }} - size="large" - /> -
-
- ); - } - )} -
- )} -
{ - switchIsAddNewProperty(!isAddNewProperty); - }} - > - {t('addition.common.add-property')} - toggleAddProperty -
-
-
- - {isAddNewProperty && ( -
-
-
- {metadataPropertyStore.metadataProperties.map((property) => ( -
- - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesIndexInSelectedEdgeType = - edgeTypeStore.addedPropertiesInSelectedEdgeType; - - addedPropertiesIndexInSelectedEdgeType.has( - property.name - ) - ? addedPropertiesIndexInSelectedEdgeType.delete( - property.name - ) - : addedPropertiesIndexInSelectedEdgeType.add( - property.name - ); - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - properties: [ - ...addedPropertiesIndexInSelectedEdgeType - ].map((propertyName) => { - const currentProperty = - edgeTypeStore.newEdgeType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined(currentProperty) - ? currentProperty.nullable - : true - }; - }) - }); - - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType('properties'); - }} - > - {property.name} - - -
- ))} -
-
- )} - - {edgeTypeStore.newEdgeType.link_multi_times && ( -
-
- * - {t('addition.common.distinguishing-key')}: -
- -
- )} -
-
- * - {t('addition.edge.display-content')}: -
- -
-
- - {t('addition.edge.index-info')} - - - hint - -
- -
-
- * - {t('addition.menu.type-index')}: -
- { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - open_label_index: checked - }); - }} - /> -
- -
-
- {t('addition.common.property-index')}: -
-
- {edgeTypeStore.newEdgeType.property_indexes.length !== 0 && ( -
-
- {t('addition.edge.index-name')} -
-
- {t('addition.edge.index-type')} -
-
{t('addition.common.property')}
-
- )} - {edgeTypeStore.newEdgeType.property_indexes.map( - ({ name, type, fields }, index) => ( -
-
- { - const propertyIndexEntities = cloneDeep( - edgeTypeStore.newEdgeType.property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType( - 'propertyIndexes' - ); - } - }} - /> -
-
- -
-
- -
- - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const propertyIndexEntities = cloneDeep( - edgeTypeStore.newEdgeType.property_indexes - ); - - propertyIndexEntities.splice(index, 1); - - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - property_indexes: propertyIndexEntities - }); - - edgeTypeStore.validateAllNewEdgeType(true); - edgeTypeStore.validateNewEdgeType( - 'propertyIndexes' - ); - - setDeletePopIndex(null); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeletePopIndex(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: closeIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeletePopIndex(index); - } - }} - childrenWrapperElement="img" - /> -
- ) - )} - { - if ( - edgeTypeStore.newEdgeType.property_indexes.length === 0 || - edgeTypeStore.isAddNewPropertyIndexReady - ) { - edgeTypeStore.mutateNewEdgeType({ - ...edgeTypeStore.newEdgeType, - property_indexes: [ - ...edgeTypeStore.newEdgeType.property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - edgeTypeStore.validateAllNewEdgeType(true); - // set isAddNewPropertyIndexReady to false - edgeTypeStore.validateNewEdgeType( - 'propertyIndexes', - true - ); - } - }} - style={{ - cursor: 'pointer', - color: edgeTypeStore.isAddNewPropertyIndexReady - ? '#2b65ff' - : '#999', - lineHeight: '32px' - }} - > - {t('addition.edge.add-group')} - -
-
-
-
- -
- ); -}); - -export default CreateEdge; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx deleted file mode 100644 index b4b2d23c8..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext } from 'react'; -import { observer } from 'mobx-react'; -import { Drawer, Button, Input, Select, Message } from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -const dataTypeOptions = [ - 'string', - 'boolean', - 'byte', - 'int', - 'long', - 'float', - 'double', - 'date', - 'uuid', - 'blob' -]; - -const cardinalityOptions = ['single', 'list', 'set']; - -const CreateProperty: React.FC = observer(() => { - const { metadataPropertyStore, graphViewStore } = useContext( - MetadataConfigsRootStore - ); - const { t } = useTranslation(); - const handleCloseDrawer = () => { - graphViewStore.setCurrentDrawer(''); - metadataPropertyStore.resetNewProperties(); - metadataPropertyStore.resetValidateNewProperty(); - }; - - return ( - { - metadataPropertyStore.validateNewProperty(); - - if (!metadataPropertyStore.isCreatedReady) { - return; - } - - await metadataPropertyStore.addMetadataProperty(); - - if ( - metadataPropertyStore.requestStatus.addMetadataProperty === - 'success' - ) { - graphViewStore.setCurrentDrawer(''); - - Message.success({ - content: t('addition.newGraphConfig.create-scuccess'), - size: 'medium', - showCloseIcon: false - }); - } - - if ( - metadataPropertyStore.requestStatus.addMetadataProperty === - 'failed' - ) { - Message.error({ - content: metadataPropertyStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - - metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); - metadataPropertyStore.resetNewProperties(); - }} - > - {t('addition.newGraphConfig.create')} - , - - ]} - > -
-
-
-
-
- * - {t('addition.common.property-name')}: -
- { - metadataPropertyStore.mutateNewProperty({ - ...metadataPropertyStore.newMetadataProperty, - _name: e.value - }); - - metadataPropertyStore.validateNewProperty(); - }} - originInputProps={{ - // no autofocus here, it will automatically dispatch blur action - onBlur() { - metadataPropertyStore.validateNewProperty(); - } - }} - /> -
-
-
- * - {t('addition.common.data-type')}: -
- -
-
-
- * - {t('addition.common.cardinal-number')}: -
- -
-
-
-
-
- ); -}); - -export default CreateProperty; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx deleted file mode 100644 index 9a40be4ee..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx +++ /dev/null @@ -1,1142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import classnames from 'classnames'; -import { cloneDeep, isUndefined } from 'lodash-es'; -import { - Drawer, - Button, - Input, - Select, - Radio, - Switch, - Checkbox, - Tooltip, - Message -} from 'hubble-ui'; - -import { Tooltip as CustomTooltip } from '../../../common'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import { - vertexRadiusMapping, - mapMetadataProperties, - formatVertexIdText -} from '../../../../stores/utils'; -import { useTranslation } from 'react-i18next'; - -import type { VertexTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; -import { clearObserving } from 'mobx/lib/internal'; - -const CreateVertex: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { metadataPropertyStore, vertexTypeStore, graphViewStore } = useContext( - MetadataConfigsRootStore - ); - const { t } = useTranslation(); - const [isAddNewProperty, switchIsAddNewProperty] = useState(false); - const [deletePopIndex, setDeletePopIndex] = useState(null); - const deleteWrapperRef = useRef(null); - const dropdownWrapperRef = useRef(null); - - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // if clicked element is not on dropdown, collpase it - if ( - isAddNewProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddNewProperty(false); - } - - if ( - deletePopIndex && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - setDeletePopIndex(null); - } - }, - [deletePopIndex, isAddNewProperty] - ); - - const handleCloseDrawer = () => { - graphViewStore.setCurrentDrawer(''); - vertexTypeStore.resetNewVertextType(); - vertexTypeStore.resetAddedPropertiesInSelectedVertextType(); - }; - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( - { - vertexTypeStore.validateAllNewVertexType(); - - if (!vertexTypeStore.isCreatedReady) { - return; - } - - const { - name, - properties, - primary_keys, - style, - ...rest - } = vertexTypeStore.newVertexType; - - const mappedProperties = mapMetadataProperties( - properties, - metadataPropertyStore.metadataProperties - ); - - graphViewStore.visDataSet!.nodes.add({ - ...rest, - id: name, - label: name.length <= 15 ? name : name.slice(0, 15) + '...', - vLabel: name, - properties, - value: vertexRadiusMapping[style.size], - font: { size: 16 }, - title: ` - - - ${Object.entries(mappedProperties) - .map(([key, value]) => { - const convertedValue = - value.toLowerCase() === 'text' - ? 'string' - : value.toLowerCase(); - - const primaryKeyIndex = primary_keys.findIndex( - (primaryKey) => primaryKey === key - ); - - return ``; - }) - .join('')} - `, - color: { - background: style.color, - border: style.color, - highlight: { - background: '#fb6a02', - border: '#fb6a02' - }, - hover: { background: '#ec3112', border: '#ec3112' } - }, - // reveal label when zoom to max - scaling: { - label: { - max: Infinity, - maxVisible: Infinity - } - }, - chosen: { - node( - values: any, - id: string, - selected: boolean, - hovering: boolean - ) { - if (hovering || selected) { - values.shadow = true; - values.shadowColor = 'rgba(0, 0, 0, 0.6)'; - values.shadowX = 0; - values.shadowY = 0; - values.shadowSize = 25; - } - - if (selected) { - values.size += 5; - } - } - } - }); - - await vertexTypeStore.addVertexType(); - - if (vertexTypeStore.requestStatus.addVertexType === 'success') { - vertexTypeStore.fetchVertexTypeList(); - vertexTypeStore.resetNewVertextType(); - vertexTypeStore.resetAddedPropertiesInSelectedVertextType(); - graphViewStore.setCurrentDrawer(''); - - Message.success({ - content: t('addition.newGraphConfig.create-scuccess'), - size: 'medium', - showCloseIcon: false - }); - - // if vertex is empty before, trigger re-render here to reveal - if (graphViewStore.isGraphVertexEmpty) { - graphViewStore.switchGraphDataEmpty(false); - // need to get node colors again since fetchGraphViewData() will cause re-render in - // the graph use graphNode() rather than local added node - await dataAnalyzeStore.fetchAllNodeStyle(); - graphViewStore.fetchGraphViewData( - dataAnalyzeStore.colorMappings, - dataAnalyzeStore.vertexSizeMappings, - dataAnalyzeStore.vertexWritingMappings, - dataAnalyzeStore.edgeColorMappings, - dataAnalyzeStore.edgeThicknessMappings, - dataAnalyzeStore.edgeWithArrowMappings, - dataAnalyzeStore.edgeWritingMappings - ); - } - return; - } - - if (vertexTypeStore.requestStatus.addVertexType === 'failed') { - Message.error({ - content: vertexTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - }} - > - {t('addition.newGraphConfig.create')} - , - - ]} - > -
-
-
-
- {t('addition.menu.base-info')} -
-
-
- * - {t('addition.vertex.vertex-type-name')}: -
- { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - name: e.value - }); - }} - originInputProps={{ - onBlur() { - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType('name'); - } - }} - /> -
-
-
- * - {t('addition.vertex.vertex-style')}: -
-
- -
-
- -
-
-
-
- * - {t('addition.common.id-strategy')}: -
- ) => { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - id_strategy: e.target.value - }); - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType('primaryKeys'); - }} - > - - {t('addition.constant.primary-key-id')} - - - {t('addition.constant.automatic-generation')} - - - {t('addition.constant.custom-string')} - - - {t('addition.constant.custom-number')} - - - {t('addition.constant.custom-uuid')} - - -
-
-
- {vertexTypeStore.newVertexType.id_strategy === - 'PRIMARY_KEY' && ( - * - )} - {t('addition.common.association-property')}: -
-
- {vertexTypeStore.newVertexType.properties.length !== 0 && ( -
-
-
{t('addition.common.property')}
-
{t('addition.common.allow-null')}
-
- {vertexTypeStore.newVertexType.properties.map( - (property, index) => { - const currentProperties = cloneDeep( - vertexTypeStore.newVertexType.properties - ); - - return ( -
-
{property.name}
-
- { - currentProperties[ - index - ].nullable = !currentProperties[index] - .nullable; - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - properties: currentProperties - }); - }} - size="large" - /> -
-
- ); - } - )} -
- )} -
{ - switchIsAddNewProperty(!isAddNewProperty); - }} - > - {t('addition.common.add-property')} - toggleAddProperty -
-
-
- - {isAddNewProperty && ( -
-
-
- {metadataPropertyStore.metadataProperties.map((property) => ( -
- - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesInSelectedVertextType = - vertexTypeStore.addedPropertiesInSelectedVertextType; - - addedPropertiesInSelectedVertextType.has( - property.name - ) - ? addedPropertiesInSelectedVertextType.delete( - property.name - ) - : addedPropertiesInSelectedVertextType.add( - property.name - ); - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - properties: [ - ...addedPropertiesInSelectedVertextType - ].map((propertyName) => { - const currentProperty = vertexTypeStore.newVertexType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined(currentProperty) - ? currentProperty.nullable - : true - }; - }) - }); - - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType('properties'); - }} - > - {property.name} - - -
- ))} -
-
- )} - - {vertexTypeStore.newVertexType.id_strategy === 'PRIMARY_KEY' && ( -
-
- * - {t('addition.common.primary-key-property')}: -
- -
- )} - -
-
- * - {t('addition.vertex.vertex-display-content')}: -
- -
- -
- - {t('addition.edge.index-info')} - - - hint - -
- -
-
- * - {t('addition.menu.type-index')}: -
- { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - open_label_index: !vertexTypeStore.newVertexType - .open_label_index - }); - }} - size="large" - /> -
- -
-
- {t('addition.common.property-index')}: -
-
- {vertexTypeStore.newVertexType.property_indexes.length !== - 0 && ( -
-
- {t('addition.edge.index-name')} -
-
- {t('addition.edge.index-type')} -
-
{t('addition.common.property')}
-
- )} - {vertexTypeStore.newVertexType.property_indexes.map( - ({ name, type, fields }, index) => ( -
-
- { - const propertyIndexEntities = cloneDeep( - vertexTypeStore.newVertexType.property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType( - 'propertyIndexes' - ); - } - }} - /> -
-
- -
-
- -
- - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const propertyIndexEntities = cloneDeep( - vertexTypeStore.newVertexType - .property_indexes - ); - - propertyIndexEntities.splice(index, 1); - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - property_indexes: propertyIndexEntities - }); - - vertexTypeStore.validateAllNewVertexType( - true - ); - vertexTypeStore.validateNewVertexType( - 'propertyIndexes' - ); - - setDeletePopIndex(null); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeletePopIndex(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: closeIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeletePopIndex(index); - } - }} - childrenWrapperElement="img" - /> -
- ) - )} - { - if ( - vertexTypeStore.newVertexType.property_indexes.length === - 0 || - vertexTypeStore.isAddNewPropertyIndexReady - ) { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - property_indexes: [ - ...vertexTypeStore.newVertexType.property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - vertexTypeStore.validateAllNewVertexType(true); - // set isAddNewPropertyIndexReady to false - vertexTypeStore.validateNewVertexType( - 'propertyIndexes', - true - ); - } - }} - style={{ - cursor: 'pointer', - color: vertexTypeStore.isAddNewPropertyIndexReady - ? '#2b65ff' - : '#999', - lineHeight: '32px' - }} - > - {t('addition.edge.add-group')} - -
-
-
-
- -
- ); -}); - -export default CreateVertex; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.less deleted file mode 100644 index 3b01eb15e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.less +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.metadata-graph { - &-drawer-wrapper { - .metadata-graph-drawer { - &-title { - font-family: - 'PingFangSC-Medium', - 'Microsoft YaHei Bold', - '微软雅黑', - Arial, - sans-serif; - width: 115px; - font-weight: bold; - margin-bottom: 16px; - text-align: right; - word-break: keep-all; - } - - &-manipulations, - &-options { - margin-bottom: 32px; - display: flex; - align-items: center; - - &-name { - width: 125px; - margin-right: 43.9px; - text-align: right; - color: #333; - font-size: 14px; - word-break: keep-all; - line-height: 32px; - } - - &-expands { - font-size: 14px; - color: #333; - } - } - } - } - - &-view-wrapper { - height: calc(100vh - 222px); - overflow: hidden; - } - - &-view { - margin: -1px; - } - - &-view-empty-wrapper { - height: calc(100vh - 222px); - display: flex; - justify-content: center; - align-items: center; - } - - &-view-empty { - display: flex; - flex-direction: column; - align-items: center; - font-size: 14px; - color: #333; - } - - &-loading { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - height: 100%; - } - - &-loading-bg { - width: 144px; - height: 144px; - position: relative; - margin-bottom: 10px; - } - - &-loading-back { - position: absolute; - left: 22px; - top: 20px; - } - - &-loading-front { - position: absolute; - left: 57.1px; - top: 52.1px; - animation: loading-rotate 2s linear infinite; - } - - @keyframes loading-rotate { - from { - transform: rotate(0deg); - } - - to { - transform: rotate(360deg); - } - } - - &-property-manipulation { - font-size: 14px; - color: #2b65ff; - cursor: pointer; - - &:hover { - color: #527dff; - } - - &:active { - color: #184bcc; - } - } - - &-tooltips { - background: #fff; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - border-radius: 3px; - padding: 16px; - font-size: 14px; - color: #333; - - &-title { - font-size: 16px; - font-weight: 900; - margin-bottom: 16px; - } - } -} - -/* override */ - -// refer to index.less in root dir, this should be fixed in future -.metadata-graph-drawer-wrapper { - .new-fc-one-input-all-container { - position: relative; - } -} - -.metadata-graph-drawer-options-colors { - margin-left: 12px; -} - -.metadata-graph-drawer-options-color { - width: 20px; - height: 20px; -} - -.metadata-graph-drawer-options .metadata-graph-drawer-options-color { - margin-top: 6px; -} - -// refer to NewVertexType.less, color option style in dropdown -.new-fc-one-select-dropdown-menu-container .metadata-graph-drawer-options-color { - width: 20px; - height: 20px; - margin: 6px auto; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx deleted file mode 100644 index bc2c17536..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx +++ /dev/null @@ -1,477 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import { isEmpty } from 'lodash-es'; -import vis from 'vis-network'; -import 'vis-network/styles/vis-network.min.css'; -import { Button } from 'hubble-ui'; - -import CreateProperty from './CreateProperty'; -import CreateVertex from './CreateVertex'; -import CreateEdge from './CreateEdge'; -import CheckAndEditVertex from './CheckAndEditVertex'; -import CheckAndEditEdge from './CheckAndEditEdge'; -import CheckProperty from './CheckProperty'; - -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import { generateGraphModeId } from '../../../../stores/utils'; - -import AddIcon from '../../../../assets/imgs/ic_add.svg'; -import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; -import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; -import { useTranslation } from 'react-i18next'; - -import '../../data-analyze/DataAnalyze.less'; -import './GraphView.less'; - -const styles = { - marginLeft: '12px' -}; - -const GraphView: React.FC = observer(() => { - const { - metadataPropertyStore, - vertexTypeStore, - edgeTypeStore, - graphViewStore - } = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - useEffect(() => { - metadataPropertyStore.fetchMetadataPropertyList({ - fetchAll: true - }); - - vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); - edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); - - return () => { - metadataPropertyStore.dispose(); - vertexTypeStore.dispose(); - edgeTypeStore.dispose(); - }; - }, [edgeTypeStore, graphViewStore, metadataPropertyStore, vertexTypeStore]); - - return ( -
-
- - - - {/* .outsideClick need id to specify logic here */} - {!isEmpty(metadataPropertyStore.metadataProperties) && ( -
- -
- )} -
- {/* note: components below all have graphView.currentDrawer in render - * if use && at here it will dispatch re-render in this component - * which cause all components below to re-render either - */} - - - - - - - -
- ); -}); - -const GraphDataView: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { - metadataPropertyStore, - vertexTypeStore, - edgeTypeStore, - graphViewStore - } = useContext(MetadataConfigsRootStore); - const [graph, setGraph] = useState(null); - const [showLoadingGraphs, switchShowLoadingGraphs] = useState(true); - const [isGraphDataLoaded, switchIsGraphLoaded] = useState(false); - const { t } = useTranslation(); - const graphWrapper = useRef(null); - const resultWrapper = useRef(null); - - const redrawGraphs = useCallback(() => { - if (graph) { - // list mode may has scrollbar - // when switch to graph mode, scrollbar hides quickly but resize event cannot dispatch - // at this scenario we have to manually calculate the width - // however when set resultWrapper style with overflow: hidden - // window.innerWidth equals to document.body.scrollWidth - // no need to write code below: - - // let width: string; - // if (window.innerWidth - document.body.scrollWidth > 0) { - // width = String(window.innerWidth - 126) + 'px'; - // } else { - // width = getComputedStyle(resultWrapper.current!).width as string; - // } - - if ( - graphViewStore.originalGraphViewData !== null && - graphViewStore.originalGraphViewData.vertices.length === 0 && - graphViewStore.originalGraphViewData.edges.length === 0 - ) { - graph.setSize('0', '0'); - graph.redraw(); - return; - } - - const width = - String( - Number( - (getComputedStyle(resultWrapper.current!).width as string).split( - 'px' - )[0] - ) + 2 - ) + 'px'; - const height = - String( - Number( - (getComputedStyle(resultWrapper.current!).height as string).split( - 'px' - )[0] - ) + 2 - ) + 'px'; - - graph.setSize(width, height); - graph.redraw(); - } - }, [graph, graphViewStore.originalGraphViewData]); - - useEffect(() => { - graphViewStore.fetchGraphViewData( - dataAnalyzeStore.colorMappings, - dataAnalyzeStore.vertexSizeMappings, - dataAnalyzeStore.vertexWritingMappings, - dataAnalyzeStore.edgeColorMappings, - dataAnalyzeStore.edgeThicknessMappings, - dataAnalyzeStore.edgeWithArrowMappings, - dataAnalyzeStore.edgeWritingMappings - ); - - return () => { - graphViewStore.dispose(); - }; - }, [ - dataAnalyzeStore.colorMappings, - dataAnalyzeStore.vertexSizeMappings, - dataAnalyzeStore.vertexWritingMappings, - dataAnalyzeStore.edgeColorMappings, - dataAnalyzeStore.edgeThicknessMappings, - dataAnalyzeStore.edgeWithArrowMappings, - dataAnalyzeStore.edgeWritingMappings, - graphViewStore - ]); - - useEffect(() => { - const graphNodes = new vis.DataSet(graphViewStore.graphNodes); - const graphEdges = new vis.DataSet(graphViewStore.graphEdges); - - if (!graph) { - const data = { - nodes: graphNodes, - edges: graphEdges - }; - - const layout: vis.Options = { - nodes: { - shape: 'dot' - }, - edges: { - arrowStrikethrough: false, - color: { - color: 'rgba(92, 115, 230, 0.8)', - hover: 'rgba(92, 115, 230, 1)', - highlight: 'rgba(92, 115, 230, 1)' - }, - scaling: { - min: 1, - max: 3, - label: { - enabled: false - } - } - }, - interaction: { - hover: true - }, - physics: { - maxVelocity: 50, - solver: 'forceAtlas2Based', - forceAtlas2Based: { - avoidOverlap: 0 - }, - timestep: 0.3, - stabilization: { iterations: 150 } - } - }; - - if (graphWrapper.current !== null) { - const network = new vis.Network(graphWrapper!.current, data, layout); - - network.on('click', ({ nodes, edges }) => { - // click on node, note that edges(related) also has value - if (!isEmpty(nodes)) { - // note: cannot abstract switchClickOn...() and clearTimeout - // as common callings with node and edge, since click event - // would be dispatched even if click is not on node and edge - // dataAnalyzeStore.switchClickOnNodeOrEdge(true); - // clearTimeout(timer); - - // caution: nodeId is automatically converted to number - const nodeId = nodes[0]; - - if (graphViewStore.graphViewData !== null) { - const index = vertexTypeStore.vertexTypes.findIndex( - (vertex) => vertex.name === String(nodeId) - ); - - if (index === -1) { - return; - } - - vertexTypeStore.selectVertexType(index); - - // check also needs style infos - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - style: { - color: vertexTypeStore.selectedVertexType!.style.color, - icon: null, - size: vertexTypeStore.selectedVertexType!.style.size, - display_fields: vertexTypeStore.selectedVertexType!.style - .display_fields - } - }); - - graphViewStore.setCurrentDrawer('check-vertex'); - graphViewStore.switchNodeOrEdgeClicked(true); - - // check if vertex type being used - vertexTypeStore.checkIfUsing([ - vertexTypeStore.selectedVertexType!.name - ]); - } - - return; - } - - if (!isEmpty(edges)) { - const edgeId = edges[0]; - - if (graphViewStore.graphViewData !== null) { - const index = edgeTypeStore.edgeTypes.findIndex( - (edge) => - generateGraphModeId( - edge.name, - edge.source_label, - edge.target_label - ) === edgeId - ); - - if (index === -1) { - return; - } - - edgeTypeStore.selectEdgeType(index); - // check also needs style infos - edgeTypeStore.mutateEditedSelectedEdgeType({ - ...edgeTypeStore.editedSelectedEdgeType, - style: { - color: edgeTypeStore.selectedEdgeType!.style.color, - icon: null, - with_arrow: edgeTypeStore.selectedEdgeType!.style.with_arrow, - thickness: edgeTypeStore.selectedEdgeType!.style.thickness, - display_fields: edgeTypeStore.selectedEdgeType!.style - .display_fields - } - }); - - graphViewStore.setCurrentDrawer('check-edge'); - graphViewStore.switchNodeOrEdgeClicked(true); - } - } - }); - - network.on('dragEnd', (e) => { - if (!isEmpty(e.nodes)) { - network.unselectAll(); - } - }); - - network.once('stabilizationIterationsDone', () => { - switchShowLoadingGraphs(false); - }); - - setGraph(network); - graphViewStore.setVisNetwork(network); - } - } else { - // if graph view data arrives, init to graph - if (graphViewStore.originalGraphViewData !== null && !isGraphDataLoaded) { - // switchIsGraphLoaded(true); - - graph.setData({ - nodes: graphNodes, - edges: graphEdges - }); - - graphViewStore.setVisDataSet({ - nodes: graphNodes, - edges: graphEdges - }); - } - - redrawGraphs(); - } - }, [ - graph, - graphViewStore.graphEdges, - graphViewStore.graphNodes, - redrawGraphs, - vertexTypeStore, - edgeTypeStore, - graphViewStore, - isGraphDataLoaded - ]); - - useEffect(() => { - window.addEventListener('resize', redrawGraphs, false); - - return () => { - window.removeEventListener('resize', redrawGraphs); - }; - }, [redrawGraphs]); - - return ( - <> -
-
- {graphViewStore.requestStatus.fetchGraphViewData === 'pending' && ( -
-
- {t('addition.operate.load-background')} - {t('addition.operate.load-spinner')} -
- {t('addition.message.data-loading')}... -
- )} - {graphViewStore.requestStatus.fetchGraphViewData === 'success' && - showLoadingGraphs && - (!isEmpty(graphViewStore.originalGraphViewData!.vertices) || - !isEmpty(graphViewStore.originalGraphViewData!.edges)) && ( -
-
- {t('addition.operate.load-background')} - {t('addition.operate.load-spinner')} -
- {t('addition.operate.rendering')}... -
- )} - {graphViewStore.requestStatus.fetchGraphViewData === 'success' && - graphViewStore.isGraphVertexEmpty && - isEmpty(graphViewStore.originalGraphViewData!.vertices) && - isEmpty(graphViewStore.originalGraphViewData!.edges) && ( - - )} -
- - ); -}); - -const EmptyGraphDataView: React.FC<{ hasProeprties: boolean }> = observer( - ({ hasProeprties }) => { - const { t } = useTranslation(); - return ( -
-
- {t('addition.message.no-metadata-notice')} -
- {hasProeprties - ? t('addition.message.no-vertex-or-edge-notice') - : t('addition.message.no-metadata-notice')} -
-
-
- ); - } -); - -export default GraphView; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/index.ts deleted file mode 100644 index 22850d2f3..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/graph-view/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import GraphView from './GraphView'; - -export { GraphView }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/index.ts deleted file mode 100644 index b242a5f99..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import MetadataConfigs from './MetadataConfigs'; - -export { MetadataConfigs }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less deleted file mode 100644 index a3329baee..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.vertex-index-wrapper { - width: 100%; - background: #fff; - border-radius: 0 3px 3px 3px; - padding: 16px; -} - -.vertex-index-tab-wrapper { - display: flex; - width: 100%; - margin-top: 16px; - - & > .vertex-index-tab-index { - padding: 10px 25px; - height: 40px; - color: #333; - font-size: 14px; - text-align: center; - line-height: 20px; - cursor: pointer; - - &.active { - background-color: #fff; - color: #2b65ff; - border-radius: 3px 3px 0 0; - } - } -} - -.vertex-index-search-highlights { - background: transparent; - color: #2b65ff; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx deleted file mode 100644 index 02502337d..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx +++ /dev/null @@ -1,307 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useState, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import Highlighter from 'react-highlight-words'; -import { motion } from 'framer-motion'; -import { Input, Table } from 'hubble-ui'; - -import { LoadingDataView } from '../../../common'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import './PropertyIndex.less'; -import i18next from '../../../../i18n'; -import { useTranslation } from 'react-i18next'; - -const variants = { - initial: { - opacity: 0 - }, - animate: { - opacity: 1, - transition: { - duration: 0.7 - } - }, - exit: { - opacity: 0, - transition: { - duration: 0.3 - } - } -}; - -const IndexTypeMappings: Record = { - SECONDARY: i18next.t('addition.menu.secondary-index'), - RANGE: i18next.t('addition.menu.range-index'), - SEARCH: i18next.t('addition.menu.full-text-index') -}; - -const PropertyIndex: React.FC = observer(() => { - const { metadataPropertyIndexStore } = useContext(MetadataConfigsRootStore); - const [preLoading, switchPreLoading] = useState(true); - const [currentTab, switchCurrentTab] = useState<'vertex' | 'edge'>('vertex'); - const { t } = useTranslation(); - const isLoading = - preLoading || - metadataPropertyIndexStore.requestStatus.fetchMetadataPropertIndexes === - 'pending'; - - const handleSearchChange = (e: React.ChangeEvent) => { - metadataPropertyIndexStore.mutateSearchWords(e.target.value); - }; - - const handleSearch = () => { - metadataPropertyIndexStore.mutatePageNumber(1); - metadataPropertyIndexStore.switchIsSearchedStatus(true); - metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); - }; - - const handleClearSearch = () => { - metadataPropertyIndexStore.mutateSearchWords(''); - metadataPropertyIndexStore.mutatePageNumber(1); - metadataPropertyIndexStore.switchIsSearchedStatus(false); - metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); - }; - - const handlePageNumberChange = (e: React.ChangeEvent) => { - metadataPropertyIndexStore.mutatePageNumber(Number(e.target.value)); - metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); - }; - - useEffect(() => { - setTimeout(() => { - switchPreLoading(false); - }, 500); - }, [currentTab]); - - useEffect(() => { - metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); - - return () => { - metadataPropertyIndexStore.dispose(); - }; - }, [currentTab, metadataPropertyIndexStore]); - - const columnConfigs = [ - { - title: - currentTab === 'vertex' - ? t('addition.vertex.vertex-type-name') - : t('addition.common.edge-type-name'), - dataIndex: 'owner', - render(text: string, records: any[], index: number) { - if (metadataPropertyIndexStore.collpaseInfo === null) { - // need highlighter here since searched result could be one row - return ( - - ); - } - - const [collpaseStartIndexes, collpaseNumbers] = - metadataPropertyIndexStore.collpaseInfo; - - const startIndex = collpaseStartIndexes.findIndex( - (indexNumber) => indexNumber === index - ); - - return startIndex !== -1 - ? { - children: ( -
- -
- ), - props: { - rowSpan: collpaseNumbers[startIndex] - } - } - : { - children: ( -
- -
- ), - props: { - rowSpan: 0 - } - }; - } - }, - { - title: t('addition.edge.index-name'), - dataIndex: 'name', - render(text: string) { - return ( -
- -
- ); - } - }, - { - title: t('addition.edge.index-type'), - dataIndex: 'type', - render(text: string) { - return IndexTypeMappings[text]; - } - }, - { - title: t('addition.common.property'), - dataIndex: 'fields', - render(properties: string[]) { - return ( -
- -
- ); - } - } - ]; - - return ( - -
-
{ - if (currentTab !== 'vertex') { - metadataPropertyIndexStore.fetchMetadataPropertIndexes('vertex'); - } - - metadataPropertyIndexStore.mutateSearchWords(''); - metadataPropertyIndexStore.mutatePageNumber(1); - metadataPropertyIndexStore.switchIsSearchedStatus(false); - switchCurrentTab('vertex'); - switchPreLoading(true); - }} - className={ - currentTab === 'vertex' - ? 'vertex-index-tab-index active' - : 'vertex-index-tab-index' - } - > - {t('addition.vertex.vertex-index')} -
-
{ - if (currentTab !== 'edge') { - metadataPropertyIndexStore.fetchMetadataPropertIndexes('edge'); - } - - metadataPropertyIndexStore.mutateSearchWords(''); - metadataPropertyIndexStore.mutatePageNumber(1); - metadataPropertyIndexStore.switchIsSearchedStatus(false); - switchCurrentTab('edge'); - switchPreLoading(true); - }} - className={ - currentTab === 'edge' - ? 'vertex-index-tab-index active' - : 'vertex-index-tab-index' - } - > - {t('addition.edge.edge-index')} -
-
-
-
- -
-
{t('addition.common.no-result')} - ) : ( - {t('addition.message.no-index-notice')} - ) - } - /> - ) - }} - dataSource={ - isLoading ? [] : metadataPropertyIndexStore.metadataPropertyIndexes - } - pagination={ - isLoading - ? null - : { - hideOnSinglePage: false, - pageNo: - metadataPropertyIndexStore.metadataPropertyIndexPageConfig - .pageNumber, - pageSize: 10, - showSizeChange: false, - showPageJumper: false, - total: - metadataPropertyIndexStore.metadataPropertyIndexPageConfig - .pageTotal, - onPageNoChange: handlePageNumberChange - } - } - /> - - - ); -}); - -export default PropertyIndex; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/index.ts deleted file mode 100644 index e851e9b3d..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property-index/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import PropertyIndex from './PropertyIndex'; - -export { PropertyIndex }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.less deleted file mode 100644 index cdcdbff7f..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.less +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.metadata-configs { - .metadata-properties { - &-selected-reveals { - width: 100%; - height: 40px; - padding: 0 16px; - display: flex; - background: #2b65ff; - border-radius: 3px 3px 0 0; - font-size: 14px; - align-items: center; - color: #fff; - - & > div { - margin-right: 12px; - } - - & > img { - margin-left: auto; - cursor: pointer; - } - } - - &-manipulation { - font-size: 14px; - color: #2b65ff; - cursor: pointer; - - &:hover { - color: #527dff; - } - - &:active { - color: #184bcc; - } - } - - &-search-highlights { - background: transparent; - color: #2b65ff; - cursor: pointer; - } - } -} - -.metadata-properties-modal { - &-title { - display: flex; - justify-content: space-between; - margin-bottom: 20px; - - & > img { - cursor: pointer; - } - } - - &-description { - margin-bottom: 16px; - color: #333; - } -} - -.property-status-not-used { - width: 58px; - height: 28px; - background: #f2fff4; - border: 1px solid #7ed988; - border-radius: 2px; - font-size: 14px; - color: #39bf45; - letter-spacing: 0; - line-height: 28px; - text-align: center; -} - -.property-status-is-using { - width: 58px; - height: 28px; - background: #fff2f2; - border: 1px solid #ff9499; - border-radius: 2px; - font-size: 14px; - color: #e64552; - letter-spacing: 0; - line-height: 28px; - text-align: center; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx deleted file mode 100644 index 52537647b..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx +++ /dev/null @@ -1,912 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import { intersection, size, without, values } from 'lodash-es'; -import { motion } from 'framer-motion'; -import { - Input, - Button, - Table, - Modal, - Select, - Message, - Loading -} from 'hubble-ui'; -import Highlighter from 'react-highlight-words'; - -import { Tooltip, LoadingDataView } from '../../../common'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -import type { MetadataProperty } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import AddIcon from '../../../../assets/imgs/ic_add.svg'; -import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; -import WhiteCloseIcon from '../../../../assets/imgs/ic_close_white.svg'; -import './MetadataProperties.less'; -import ReuseProperties from './ReuseProperties'; -import { useTranslation } from 'react-i18next'; - -const styles = { - button: { - marginLeft: '12px', - width: 78 - }, - extraMargin: { - marginRight: 4 - }, - deleteWrapper: { - display: 'flex', - justifyContent: 'flex-end' - }, - loading: { - padding: 0, - marginRight: 4 - } -}; - -const dataTypeOptions = [ - 'string', - 'boolean', - 'byte', - 'int', - 'long', - 'float', - 'double', - 'date', - 'uuid', - 'blob' -]; - -const cardinalityOptions = ['single', 'list', 'set']; - -const variants = { - initial: { - opacity: 0 - }, - animate: { - opacity: 1, - transition: { - duration: 0.7 - } - }, - exit: { - opacity: 0, - transition: { - duration: 0.3 - } - } -}; - -const MetadataProperties: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { t } = useTranslation(); - const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); - const { metadataPropertyStore, graphViewStore } = metadataConfigsRootStore; - const [preLoading, switchPreLoading] = useState(true); - const [sortOrder, setSortOrder] = useState(''); - const [selectedRowKeys, mutateSelectedRowKeys] = useState([]); - const [isShowModal, switchShowModal] = useState(false); - - const isLoading = - preLoading || - metadataPropertyStore.requestStatus.fetchMetadataPropertyList === 'pending'; - - const currentSelectedRowKeys = intersection( - selectedRowKeys, - metadataPropertyStore.metadataProperties.map(({ name }) => name) - ); - - const printError = () => { - Message.error({ - content: metadataPropertyStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - }; - - const handleSearchChange = (e: React.ChangeEvent) => { - metadataPropertyStore.mutateSearchWords(e.target.value); - }; - - const handleSearch = async () => { - metadataPropertyStore.mutatePageNumber(1); - metadataPropertyStore.switchIsSearchedStatus(true); - await metadataPropertyStore.fetchMetadataPropertyList(); - - if ( - metadataPropertyStore.requestStatus.fetchMetadataPropertyList === 'failed' - ) { - printError(); - } - }; - - const handleClearSearch = () => { - metadataPropertyStore.mutateSearchWords(''); - metadataPropertyStore.mutatePageNumber(1); - metadataPropertyStore.switchIsSearchedStatus(false); - metadataPropertyStore.fetchMetadataPropertyList(); - }; - - const handleSelectedTableRow = ( - newSelectedRowKeys: string[], - selectedRows: MetadataProperty[] - ) => { - mutateSelectedRowKeys(newSelectedRowKeys); - // mutateSelectedRowKeys(selectedRows.map(({ name }) => name)); - }; - - const handleSortClick = () => { - switchPreLoading(true); - - if (sortOrder === 'descend') { - metadataPropertyStore.mutatePageSort('asc'); - setSortOrder('ascend'); - } else { - metadataPropertyStore.mutatePageSort('desc'); - setSortOrder('descend'); - } - - metadataPropertyStore.fetchMetadataPropertyList(); - }; - - const handlePageChange = async (e: React.ChangeEvent) => { - // mutateSelectedRowKeys([]); - metadataPropertyStore.mutatePageNumber(Number(e.target.value)); - await metadataPropertyStore.fetchMetadataPropertyList(); - - if ( - metadataPropertyStore.requestStatus.fetchMetadataPropertyList === 'failed' - ) { - printError(); - } - }; - - const batchDeleteProperties = async () => { - if ( - values(currentSelectedRowKeys).every( - (key) => metadataPropertyStore.metadataPropertyUsingStatus?.[key] - ) - ) { - Message.error({ - content: t('addition.message.no-property-can-delete'), - size: 'medium', - showCloseIcon: false - }); - - return; - } - - switchShowModal(false); - // need to set a copy in store since local row key state would be cleared - metadataPropertyStore.mutateSelectedMetadataProperyNames( - currentSelectedRowKeys - ); - // mutateSelectedRowKeys([]); - await metadataPropertyStore.deleteMetadataProperty(currentSelectedRowKeys); - // metadataPropertyStore.mutateSelectedMetadataProperyNames([]); - - if ( - metadataPropertyStore.requestStatus.deleteMetadataProperty === 'success' - ) { - Message.success({ - content: t('addition.common.del-success'), - size: 'medium', - showCloseIcon: false - }); - - mutateSelectedRowKeys( - without(selectedRowKeys, ...currentSelectedRowKeys) - ); - - await metadataPropertyStore.fetchMetadataPropertyList(); - - // fetch previous page data if it's empty - if ( - metadataPropertyStore.requestStatus.fetchMetadataPropertyList === - 'success' && - size(metadataPropertyStore.metadataProperties) === 0 && - metadataPropertyStore.metadataPropertyPageConfig.pageNumber > 1 - ) { - metadataPropertyStore.mutatePageNumber( - metadataPropertyStore.metadataPropertyPageConfig.pageNumber - 1 - ); - - metadataPropertyStore.fetchMetadataPropertyList(); - } - - return; - } - - if ( - metadataPropertyStore.requestStatus.deleteMetadataProperty === 'failed' - ) { - printError(); - } - }; - - // hack: need to call @observable at here to dispatch re-render by mobx - // since @action in onBlur() in doesn't dispatch re-render - metadataPropertyStore.validateNewPropertyErrorMessage.name.toLowerCase(); - - const columnConfigs = [ - { - title: t('addition.common.property-name'), - dataIndex: 'name', - width: '45%', - sorter: true, - sortOrder, - render(text: string, records: any, index: number) { - if (metadataPropertyStore.isCreateNewProperty === true && index === 0) { - return ( - { - metadataPropertyStore.mutateNewProperty({ - ...metadataPropertyStore.newMetadataProperty, - _name: e.value - }); - - metadataPropertyStore.validateNewProperty(); - }} - originInputProps={{ - autoFocus: 'autoFocus', - onBlur() { - metadataPropertyStore.validateNewProperty(); - } - }} - /> - ); - } - - return ( -
- {metadataPropertyStore.isSearched.status ? ( - - ) : ( - {text} - )} -
- ); - } - }, - { - title: t('addition.common.data-type'), - dataIndex: 'data_type', - width: '20%', - render(text: string, records: any, index: number) { - if (metadataPropertyStore.isCreateNewProperty === true && index === 0) { - return ( - - ); - } - - const realText = text === 'TEXT' ? 'string' : text.toLowerCase(); - - return ( -
- {realText} -
- ); - } - }, - { - title: t('addition.common.cardinal-number'), - dataIndex: 'cardinality', - width: '20%', - render(text: string, records: any, index: number) { - if (metadataPropertyStore.isCreateNewProperty === true && index === 0) { - return ( - - ); - } - - return ( -
- {text.toLowerCase()} -
- ); - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '15%', - align: 'right', - render(_: any, records: any, index: number) { - return ( - - ); - } - } - ]; - - useEffect(() => { - setTimeout(() => { - switchPreLoading(false); - }, 500); - }, [sortOrder]); - - useEffect(() => { - if (metadataConfigsRootStore.currentId !== null) { - metadataPropertyStore.fetchMetadataPropertyList(); - } - - return () => { - metadataPropertyStore.dispose(); - }; - }, [ - metadataPropertyStore, - metadataConfigsRootStore.currentId, - graphViewStore - ]); - - // these would be called before rendered, pre-load some data here - // useEffect(() => { - // dataAnalyzeStore.fetchAllNodeStyle(); - // dataAnalyzeStore.fetchAllEdgeStyle(); - // }, [dataAnalyzeStore]); - - if (metadataPropertyStore.currentTabStatus === 'reuse') { - return ; - } - - return ( - -
-
- - - -
- {size(currentSelectedRowKeys) !== 0 && ( -
-
- {t('addition.message.selected')} - {size(currentSelectedRowKeys)} - {t('addition.common.term')} -
- - {t('addition.common.close')} { - mutateSelectedRowKeys([]); - }} - /> -
- )} -
rowData.name} - locale={{ - emptyText: ( - {t('addition.common.no-result')} - ) : ( - - ) - } - /> - ) - }} - rowSelection={{ - selectedRowKeys, - onChange: handleSelectedTableRow - }} - onSortClick={handleSortClick} - dataSource={ - isLoading - ? [] - : metadataPropertyStore.isCreateNewProperty - ? metadataPropertyStore.reunionMetadataProperty - : metadataPropertyStore.metadataProperties - } - pagination={ - isLoading - ? null - : { - hideOnSinglePage: false, - pageNo: - metadataPropertyStore.metadataPropertyPageConfig.pageNumber, - pageSize: 10, - showSizeChange: false, - showPageJumper: false, - total: - metadataPropertyStore.metadataPropertyPageConfig.pageTotal, - onPageNoChange: handlePageChange - } - } - /> - { - switchShowModal(false); - }} - > -
-
- {t('addition.common.del-comfirm')} - {t('addition.common.close')} { - switchShowModal(false); - }} - /> -
-
- {t('addition.message.del-unused-property-notice')} -
-
) { - return ( - - {text} - - ); - } - }, - { - title: t('addition.common.status'), - dataIndex: 'status', - render(isUsing: boolean) { - return ( -
- {isUsing - ? t('addition.common.in-use') - : t('addition.common.not-used')} -
- ); - } - } - ]} - dataSource={currentSelectedRowKeys.map((name) => { - return { - name, - status: - metadataPropertyStore.metadataPropertyUsingStatus !== - null && - // data may have some delay which leads to no matching propety value - !!metadataPropertyStore.metadataPropertyUsingStatus[name] - }; - })} - pagination={false} - /> - - - - - ); -}); - -export interface MetadataPropertiesManipulationProps { - propertyName: string; - propertyIndex: number; - // allSelectedKeys: number[]; -} - -const MetadataPropertiesManipulation: React.FC = - observer(({ propertyName, propertyIndex }) => { - const { metadataPropertyStore } = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - const [isPopDeleteModal, switchPopDeleteModal] = useState(false); - const [isDeleting, switchDeleting] = useState(false); - const deleteWrapperRef = useRef(null); - const isDeleteOrBatchDeleting = - isDeleting || - (metadataPropertyStore.requestStatus.deleteMetadataProperty === - 'pending' && - metadataPropertyStore.selectedMetadataPropertyNames.includes( - propertyName - )); - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - if ( - isPopDeleteModal && - deleteWrapperRef && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - switchPopDeleteModal(false); - } - }, - [deleteWrapperRef, isPopDeleteModal] - ); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - if ( - metadataPropertyStore.isCreateNewProperty === true && - propertyIndex === 0 - ) { - return ( -
- { - metadataPropertyStore.validateNewProperty(); - - if (!metadataPropertyStore.isCreatedReady) { - return; - } - - metadataPropertyStore.switchIsCreateNewProperty(false); - await metadataPropertyStore.addMetadataProperty(); - - if ( - metadataPropertyStore.requestStatus.addMetadataProperty === - 'success' - ) { - Message.success({ - content: t('addition.newGraphConfig.create-scuccess'), - size: 'medium', - showCloseIcon: false - }); - } - - if ( - metadataPropertyStore.requestStatus.addMetadataProperty === - 'failed' - ) { - Message.error({ - content: metadataPropertyStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - - metadataPropertyStore.fetchMetadataPropertyList(); - metadataPropertyStore.resetNewProperties(); - }} - > - {t('addition.newGraphConfig.create')} - - { - metadataPropertyStore.switchIsCreateNewProperty(false); - metadataPropertyStore.resetNewProperties(); - metadataPropertyStore.resetValidateNewProperty(); - - if (metadataPropertyStore.metadataProperties.length === 0) { - metadataPropertyStore.changeCurrentTabStatus('empty'); - } - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- {isDeleteOrBatchDeleting && ( - - )} - - {metadataPropertyStore.metadataPropertyUsingStatus && - metadataPropertyStore.metadataPropertyUsingStatus[ - propertyName - ] ? ( -

- {t('addition.message.property-using-cannot-delete')} -

- ) : ( - <> -

- {t('addition.message.property-del-confirm')} -

-

{t('addition.message.property-del-confirm-again')}

-

{t('addition.message.long-time-notice')}

-
- - -
- - )} -
- } - childrenProps={{ - className: 'metadata-properties-manipulation no-line-break', - style: styles.extraMargin, - title: isDeleteOrBatchDeleting - ? t('addition.operate.del-ing') - : t('addition.common.del'), - async onClick() { - if (isDeleteOrBatchDeleting) { - return; - } - - await metadataPropertyStore.checkIfUsing([propertyName]); - - if ( - metadataPropertyStore.requestStatus.checkIfUsing === 'success' - ) { - switchPopDeleteModal(true); - } - } - }} - > - {isDeleteOrBatchDeleting - ? t('addition.operate.del-ing') - : t('addition.common.del')} - - - ); - }); - -const EmptyPropertyHints: React.FC = observer(() => { - const { metadataPropertyStore } = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - return ( -
- Add new property -
- {t('addition.message.property-create-desc')} -
-
- - -
-
- ); -}); - -export default MetadataProperties; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.less deleted file mode 100644 index 71698137e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.less +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.reuse-properties-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 16px; - - .reuse-steps { - width: 860px; - margin: 16px auto 18px; - } - - .reuse-properties { - &-row { - display: flex; - align-items: center; - margin: 18px 0 32px; - font-size: 14px; - color: #333; - - &:last-child { - margin-bottom: 24px; - } - - &-name { - width: 98px; - text-align: right; - margin-right: 13.9px; - } - } - - &-manipulations { - display: flex; - justify-content: center; - margin-bottom: 88px; - } - - &-validate { - &-duplicate, - &-exist, - &-pass { - width: 58px; - margin: 0 auto; - border-radius: 2px; - letter-spacing: 0; - line-height: 22px; - text-align: center; - } - - &-duplicate { - background: #fff2f2; - border: 1px solid #ff9499; - color: #e64552; - } - - &-exist, - &-pass { - background: #f2fff4; - border: 1px solid #7ed988; - color: #39bf45; - } - } - - &-complete-hint { - display: flex; - flex-direction: column; - justify-content: center; - margin: 88px auto 327px; - - &-description { - display: flex; - justify-content: center; - - & > div { - margin-left: 20px; - } - } - - &-manipulations { - margin: 42px auto 0; - } - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx deleted file mode 100644 index 032257db3..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx +++ /dev/null @@ -1,542 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useState, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { - Select, - Steps, - Transfer, - Button, - Table, - Input, - Message -} from 'hubble-ui'; -import { cloneDeep } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; - -import { GraphManagementStoreContext } from '../../../../stores'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -import PassIcon from '../../../../assets/imgs/ic_pass.svg'; - -import './ReuseProperties.less'; - -const ReuseProperties: React.FC = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); - const { metadataPropertyStore } = metadataConfigsRootStore; - const { t } = useTranslation(); - const [currentStatus, setCurrentStatus] = useState(1); - // acutally the name, not id in database - const [selectedId, mutateSelectedId] = useState<[] | string>([]); - const [selectedList, mutateSelectedList] = useState([]); - - // step 2 - const [editIndex, setEditIndex] = useState(null); - - // hack: need to call @observable at here to dispatch re-render by mobx - // since @action in onBlur() in doesn't dispatch re-render - metadataPropertyStore.validateRenameReusePropertyErrorMessage.name.toUpperCase(); - - const columnConfigs = [ - { - title: t('addition.common.property-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (editIndex !== index) { - return ( -
- {text} -
- ); - } - - return ( - { - const editedCheckedReusableProperties = cloneDeep( - metadataPropertyStore.editedCheckedReusableProperties! - ); - - editedCheckedReusableProperties.propertykey_conflicts[ - index - ].entity.name = e.value; - - metadataPropertyStore.mutateEditedReusableProperties( - editedCheckedReusableProperties - ); - }} - originInputProps={{ - onBlur() { - metadataPropertyStore.validateRenameReuseProperty(index); - } - }} - /> - ); - } - }, - { - title: t('addition.common.data-type'), - dataIndex: 'data_type', - width: '15%', - render(text: string) { - if (text === 'TEXT') { - return ( -
- string -
- ); - } - - return ( -
- {text.toLowerCase()} -
- ); - } - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - align: 'center', - width: '15%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if ( - metadataPropertyStore.reusablePropertyNameChangeIndexes.has(index) - ) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return
{text}
; - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - if (index === editIndex) { - return ( -
- { - const isReady = metadataPropertyStore.validateRenameReuseProperty( - index - ); - - if (isReady) { - setEditIndex(null); - - metadataPropertyStore.mutateReusablePropertyNameChangeIndexes( - index - ); - } - }} - > - {t('addition.common.save')} - - { - setEditIndex(null); - metadataPropertyStore.resetValidateRenameReuseProperty(); - metadataPropertyStore.resetEditedReusablePropertyName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (editIndex !== null) { - return; - } - - setEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (editIndex !== null) { - return; - } - - setEditIndex(null); - - const editedCheckedReusableProperties = cloneDeep( - metadataPropertyStore.editedCheckedReusableProperties! - ); - - editedCheckedReusableProperties.propertykey_conflicts.splice( - index, - 1 - ); - - // remove selected status of the property in - mutateSelectedList( - [...selectedList].filter( - (property) => - property !== - metadataPropertyStore.editedCheckedReusableProperties! - .propertykey_conflicts[index].entity.name - ) - ); - - // remove property in Table - metadataPropertyStore.mutateEditedReusableProperties( - editedCheckedReusableProperties - ); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - useEffect(() => { - return () => { - // reset validate error message before unmount to avoid conflict with other component validation - metadataPropertyStore.resetValidateRenameReuseProperty(); - }; - }, [metadataPropertyStore]); - - return ( -
-
- {t('addition.operate.reuse-property')} -
-
- - {[ - t('addition.menu.select-reuse-item'), - t('addition.menu.confirm-reuse-item'), - t('addition.menu.complete-reuse') - ].map((title: string, index: number) => ( - index + 1 - ? 'finish' - : 'wait' - } - key={title} - /> - ))} - - - {currentStatus === 1 && ( - <> -
-
- * - {t('addition.newGraphConfig.id')}: -
- -
-
-
- * - {t('addition.operate.reuse-property')}: -
- name - )} - selectedList={selectedList} - showSearchBox={false} - candidateTreeStyle={{ - width: 359, - fontSize: 14 - }} - selectedTreeStyle={{ - width: 359, - fontSize: 14 - }} - handleSelect={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleSelectAll={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleDelete={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleDeleteAll={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - /> -
-
- - -
- - )} - - {currentStatus === 2 && ( - <> -
- {t('addition.common.selected-property')} -
-
({ - name: entity.name, - data_type: entity.data_type, - status - }) - ) - : [] - } - pagination={false} - /> -
- - -
- - )} - - {currentStatus === 3 && ( -
-
- {t('addition.message.reuse-complete')} -
-
{t('addition.message.reuse-complete')}
-
{t('addition.message.reuse-property-success')}
-
-
-
- - -
-
- )} - - - ); -}); - -export default ReuseProperties; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/index.ts deleted file mode 100644 index f83cd5d41..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/property/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import MetadataProperties from './MetadataProperties'; -import ReuseProperties from './ReuseProperties'; - -export { MetadataProperties, ReuseProperties }; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less deleted file mode 100644 index 362db1ec2..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less +++ /dev/null @@ -1,1637 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.new-vertex-type-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 30px 0; - display: flex; - flex-direction: column; - align-items: center; - - .new-vertex-type { - &-title { - // prettier-ignore - font-family: - 'PingFangSC-Medium', - 'Microsoft YaHei Bold', - '微软雅黑', - Arial, - sans-serif; - width: 115px; - font-weight: bold; - margin-bottom: 16px; - text-align: right; - word-break: keep-all; - } - - &-manipulations, - &-options { - margin-bottom: 32px; - display: flex; - align-items: center; - - &-name { - width: 125px; - margin-right: 43.9px; - text-align: right; - color: #333; - font-size: 14px; - word-break: keep-all; - line-height: 32px; - } - - &-expands { - font-size: 14px; - color: #333; - } - } - } -} - -.metadata-drawer-options-name-edit { - line-height: 34px; -} - -// retrive from parent since drawer doesn't hangs on body element -.new-vertex-type-options-colors, -.new-vertex-type-options-sizes, -.new-vertex-type-options-arrows { - margin-right: 12px; -} - -.new-vertex-type-options-color { - width: 23px; - height: 23px; - line-height: 23px; -} - -.new-vertex-type-select { - width: 20px; - height: 20px; - line-height: 20px; -} - -.new-vertex-type-options-border { - border: #dae7fb solid 2px; -} - -.new-vertex-type-options-no-border { - border: white solid 2px; -} - -.new-vertex-type-options-no-border:hover { - border: #f5f5f5 solid 2px; -} - -.new-vertex-type-options { - margin-top: 5px; -} - -.new-fc-one-select-dropdown-menu-container .new-vertex-type-options-color { - width: 14px; - height: 14px; - margin: auto; -} - -/* override */ -.new-vertex-type-options-sizes .new-fc-one-select-dropdown-menu-container { - padding: 4px 0; -} - -/* stylelint-disable */ - -/** - * Colors - */ - -/* Brand colors */ - -/* Contextual colors */ - -/* Gray scale colors */ - -/** - * Typography - */ - -/** - * Spacing - */ - -/** - * Background colors - */ - -/** - * Borders - */ - -/* Border colors */ - -/* Separator colors */ - -/* Border radii */ - -/* Shadows */ - -/* Icons */ - -/* Font sizes */ - -/* Metrics */ - -/* Stylistic variants */ - -/* Focus rings */ - -/* Button group separator */ - -/* Font sizes */ - -/* Text decorations */ - -/* Stylistic variants */ - -/* Typography */ - -/* Metrics */ - -/* Colors */ - -/* Focus ring */ - -/* Checkbox group */ - -/* Typography */ - -/* Metrics */ - -/* Colors */ - -/* Focus ring */ - -/* Strong variant */ - -/* Checkbox group */ - -/* Metrics */ - -/* Colors */ - -/* Typography */ - -/* Font sizes */ - -/* Metrics */ - -/* Colors & states */ - -/* Focus rings */ - -/* Typography */ - -/* Metrics */ - -/* Character count */ - -/* Metrics */ - -/* Font sizes */ - -/* Metrics */ - -/* States */ - -/* Option group title */ - -/* Option dropdown */ - -/* Widths */ - -/* Metrics */ - -/* Colors */ - -/* Metrics */ - -/* Colors */ - -/* Typography */ - -/* Markers */ - -/* Spacing */ - -/* Statuses */ - -/* Metrics */ - -/* Colors */ - -/* Typography */ - -/* Metrics */ - -/* Colors */ - -/* Metrics */ - -/* Colors & States */ - -/* Metrics */ - -/* Headers */ - -/* Colors */ - -/* Metrics */ - -/* Typography */ - -/* Container */ - -/* Metrics */ - -/* Colors */ - -/* Indicators */ - -/* Stylistic variants */ - -/* Metrics */ - -/* Colors */ - -/* Metrics */ - -/* Colors */ - -/* Metrics */ - -/* Stylistic variants */ - -/* Metrics */ - -/* Colors */ - -/* Metrics */ - -/* Colors */ - -/* Pages */ - -/* Indicators */ - -/* Controls */ - -/* Pages */ -button::-moz-focus-inner, -input[type='reset']::-moz-focus-inner, -input[type='button']::-moz-focus-inner, -input[type='submit']::-moz-focus-inner, -input[type='file'] > input[type='button']::-moz-focus-inner { - border: none; -} - -@keyframes loadingCircle { - 0% { - transform-origin: 50% 50%; - transform: rotate(0deg); - } - - 100% { - transform-origin: 50% 50%; - transform: rotate(360deg); - } -} - -@font-face { - font-family: 'new-fc-one-icon'; - src: url('data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBk0AAAC8AAAAYGNtYXDSvtNiAAABHAAAAGxnYXNwAAAAEAAAAYgAAAAIZ2x5ZgPgaIMAAAGQAAAuDGhlYWQWOP+LAAAvnAAAADZoaGVhCAsEPgAAL9QAAAAkaG10eMUSBrgAAC/4AAAA0GxvY2EkaxgIAAAwyAAAAGptYXhwAD8BCQAAMTQAAAAgbmFtZV3n5/sAADFUAAABenBvc3QAAwAAAAAy0AAAACAAAwPxAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpMgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAUAAAABAAEAADAAAAAQAg6SHpI+kr6TL//f//AAAAAAAg6QDpI+kl6S3//f//AAH/4xcEFwMXAhcBAAMAAQAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACAEv/wAPLA6sAGwApAAABERQGIyImNREBBiYnJjY3ATYyFwEeAQcOAScBJSImNTQ2MyEyFhUUBiMCNRkREhn+pw4jCwwCDgGgDCAMAaANAgsMIw3+pv5LEhkZEgMVEhkZEgK4/TMSGRkSAs3+0wwCDg0jDAFqCwv+lgwjDQ4CDAEtnRkSEhkZEhIZAAMAAAA9BAADqwBEAHkAngAANxYUBwYiJyYnLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgcGIicmNDc2Nz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxYXNx4BBw4BJy4BNTQ3PgE3NjMyFx4BFxYVFAYHBiYnJjY3PgE1NCcuAScmIyIHDgEHBhUUFhc3FgYHBiYnLgE1NDYzMhYVFAYHDgEnLgE3PgE1NCYjIgYVFBYX0wwMDSMNJBscJwoKKCiLXl1qal1eiygoCgonHRwlDCQMDAwfFxghCAkiIXROTlhYTk50ISIJCCAXGB58DQENDCMNMjcbGl0+PkdHPj5dGhs4NA0jDAwCDCcqFBRGLi81NS8uRhQUKSZyCwIODSQLFRZkR0dkGRYMJA0MAgwMDDIjIzILC3wNIw0MDCQqKlwyMTRqXl2LKCkpKItdXmo0MjJdKiokDA0MJAweIyNNKiorWU1OdCIhISJ0Tk1ZKykqTSMiHn0MIw0NAQwwfkZGPT5bGxoaG1s+PUZHgC8MAQ0NJAwjXzU0Li5EFBQUFEQuLjQ0XiRxDSMMCwIOFzwgSWZmSSI+GA0BDAwjDQwhESY0NCYRHg0AAAMAKwFzA9UCFQALABgAJAAAASImNTQ2MzIWFRQGISImNTQ2MzIWFRQGIyEiJjU0NjMyFhUUBgOEITAwISIvL/5aIi8vIiIvLyL+fCIvLyIhMDABczAhIi8vIiEwMCEiLy8iITAwISIvLyIhMAAAAAADAAAAQAQAA0AADgAVACUAABMRFBYzITI2NREBBiInASUhARYyNwElITIWFREUBiMhIiY1ETQ2VRkSAwASGf6oJF4k/qgDFP0uAU4MHgwBTv0XAwA1S0s1/QA1S0sCsv4OEhkZEgHy/tgfHwEoOf7fCgoBIVVLNf4ANUtLNQIANUsAAAADAAD/wAQAA8AAIAA8AFkAAAE3NjIXFhQPARcWFAcGIi8BBwYiJyY0PwEnJjQ3NjIfAQMiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMwILrA0jDQwMra0MDA0jDaytDCQMDQ2srA0NDCQMrQtqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpYTk50ISIiIXROTlhYTk50ISIiIXROTlgB8qwNDQwkDK2sDSMNDAytrQwMDSMNrK0MJAwNDaz9zigoi15dampdXosoKCgoi15dampdXosoKFUiIXROTlhYTk50ISIiIXROTlhYTk50ISIABAAA/8AEAAPAABsAOABHAFYAAAUiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMwM0NjMyFhURFAYjIiY1ERE0NjMyFh0BFAYjIiY9AQIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YKxkSEhkZEhIZGRISGRkSEhlAKCiLXl1qal1eiygoKCiLXl1qal1eiygoVSIhdE5OWFhOTnQhIiIhdE5OWFhOTnQhIgKrEhkZEv6rEhkZEgFV/isRGRkRFhEZGREWAAAABQAr/8AD1QPAABIAGQAuAD0ASwAAASEiBhURFBYzITI2NREjIiY9AQUnFRQWOwEBITIWFwUeARURFAYjISImNRE0NjMTIiY1NDYzITIWFRQGIyETIiY1NDY7ATIWFRQGIwJV/lYSGRkSAqoSGcQrPAEAqgoHmf1WAdwIDgYBJAcHSzX9VjVLSzViERkZEQH7EhkZEv4FAxIZGRLjERkZEQNrGRL9ABIZGRICFTwrr8CTggcKARUFBf0GEQn9pzVLSzUDADVL/Y4ZEhIZGRISGQEAGRISGRkSEhkAAAIAQP/AA8ADwAApADgAADcVMzIWFRQGKwEiJjU0NjMRNDYzMhYVITIWHwEzMhYVERQGKwEiJi8BITUhMhYfATMRIyImLwEhEcAVEhkZEmoSGRkSGRESGQG+BQoEPZ0jMjIjpwUKBD3+TAG+BQoEPZ2nBQoEPf5MzbgZERIZGRIRGQOAEhkZEgICHjIk/eMjMgICHlYCAx4CHQIDHv3jAAADAAAAAAP+A2sAIwA6AEIAAAEzMhYVFAYHAw4BIyEiJjU8ATcuATURNDY7ATIWHwEhMhYdASM1NCYjISImLwEuASsBIgYVETc+ATMhAR4BMyETIQMDlSkbJQEBegYiFv0HGyUBBgZLNbcbOhFAATg1S1UZEv60CREGTAYYCLcSGSkFIxYChP0oBQwHArNv/StlAlUlGwQIBP4rFRslGwMFAg0bDgJrNUsbFElLNR4eERkIB1gGCxkR/pGoFhv+CAQEAav+XQAAAAIAAAAABAADawAYAC4AABMRFBYzITI2NRE0JiMhIiYvAS4BIyEiBhUlITIWFREUBiMhIiY1ETQ2MyEyFh8BVRkSAwASGRkS/rQJEQZMBhgJ/t8SGQHzATg1S0s1/QA1S0s1ASEbOhJAAuv9lRIZGRIB8hIZCAdYBgsZEQhMNf4ONUtLNQJrNUsbFEkAAgAO/+sD8gNwAB0APgAAJTI2NRE0NjsBCQEzMhYVERQWOwE1NDY7ATIWHQEzExEUBisBIiY9ASMVFAYrASImNREjIiY3ATYyFwEWBisBAwASGRkREv6Z/pkSERkZEmsyI4AjMmuASzWVEhmAGRKVNUtVHhUWAbkYQhgBuRYVHlVAGRIBVRIZAUb+uhkS/qsSGasjMjIjqwFV/tY1SxkR1tYRGUs1ASo3FAGQFhb+cBQ3AAAABAAA/8AEAAPAABsAOABHAFYAAAEiBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYHMhceARcWFRQHDgEHBiMiJy4BJyY1NDc+ATc2MwMUFjMyNjURNCYjIgYVEREUFjMyNj0BNCYjIgYdAQIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YKxkSEhkZEhIZGRISGRkSEhkDwCgoi15dampdXosoKCgoi15dampdXosoKFUiIXROTlhYTk50ISIiIXROTlhYTk50ISL9VRIZGRIBVRIZGRL+qwHVERkZERYRGRkRFgAAAQHVAZUEAAPAABoAAAEUBiMiJjU0Jy4BJyYjIiY1NDYzMhceARcWFQQAGRIRGSIhdE5OWBIZGRJqXV6LKCgBwBIZGRJYTk50ISIZERIZKCiLXl1qAAAAAAEAKwGVA9UB6wAOAAATIiY1NDYzITIWFRQGIyFVERkZEQNWERkZEfyqAZUZEhIZGRISGQABABX/1QPrA6sAIAAAARE0NjMyFhURITIWFRQGIyERFAYjIiY1ESEiJjU0NjMhAdUZEhIZAZUSGRkS/msZEhIZ/msSGRkSAZUB6wGVEhkZEv5rGRISGf5rEhkZEgGVGRISGQAABAAA/8AEAAPAABsAOABcAGsAAAUiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMxMVFAYjIiY9ATQ2MzI2NTQmIyIGFRQGIyImNTQ2MzIWFRQGBwc0NjMyFh0BFAYjIiY9AQIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YKxkSEhkZEiw/PywsPxkREhlxT09xVUBWGRISGRkSEhlAKCiLXl1qal1eiygoKCiLXl1qal1eiygoVSIhdE5OWFhOTnQhIiIhdE5OWFhOTnQhIgF6VhIZGRJ8ERk8Kio8PCoSGRkSTm1tTkNlDs8SGRkSFRIZGRIVAAAAAgAA/8wD9APAACsASAAAJRcWFAcGIi8BBgcOAQcGIyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgcFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMwNQpAwMDSMNox8kI04qKixjWFeDJSYmJYNXWGNjWFeDJSYIBx0VFRr+kFJISGsfHx8fa0hIUlJISGsfHx8fa0hIUqyjDSMNDAykGhUVHQcIJiWDV1hjY1hXgyUmJiWDV1hjLCoqTiMkH1cfH2tISFJSSEhrHx8fH2tISFJSSEhrHx8AAAMAAP/ABAADwAAbADgASwAABSInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBicyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxYzAwE2MhcWFAcBBiIvASY0NzYyFwIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YVQE3DCQMDQ3+qw0jDaoNDQwkDEAoKIteXWpqXV6LKCgoKIteXWpqXV6LKChVIiF0Tk5YWE5OdCEiIiF0Tk5YWE5OdCEiAT0BNwwMDSMN/qsMDKsMJAwNDQACAAv/1QP1A6sANgBtAAA3FRQGIyImNRE0NjM6ARc2MjMyFhUUFx4BFxYzMjc+ATc2Nz4BFx4BBwYHDgEHBiMiJy4BJyYnATU0NjMyFhURFAYjKgEnBiIjIiY1NCcuAScmIyIHDgEHBgcOAScuATc2Nz4BNzYzMhceARcWF2AZEhEZGRECAgIBAwESGSAfbkpKVDw5OGAmJxgHIRARDAceLi51RERJQj09aywsIQNAGRIRGRkRAgICAQMBEhkgH25KSlQ8OThgJicYByEQEQwHHi4udURESUI9PWssLCG8ZxEZGREBaxIZAQEZElRKSm4fIBERPywsNhANBwghEEE2NUwVFREQPSorNAIIZxEZGRH+lRIZAQEZElRKSm4fIBERPywsNhANBwghEEE2NUwVFREQPSorNAAIAAD/wAQAA8AAGwA3ADsAQABOAFwAagB5AAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgEhESETESERIRczMjY1NCYrASIGFRQWFzMyNjU0JisBIgYVFBYXMzI2NTQmKwEiBhUUFhczMjY1NCYrASIGFRQWMwIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qY1dYgiUmJiWCWFdjY1dYgiUmJiWCWFf+1wGM/nQhAUr+tkLGBwoKB8YHCgoHxgcKCgfGBwoKB8YHCgoHxgcKCgd3BwkJB3cHCgoHQCgoi15dampdXosoKCgoi15dampdXosoKCEmJYJYV2NjV1iCJSYmJYJYV2NjV1iCJSYC1/4QAc/+UgGubgkHBwoKBwcJVwoHBwkJBwcKVgoHBgoKBgcKVgkHBwoKBwcJAAAIAAD/wAQAA8AAGwA3AEsAWgBpAHgAlACwAAAlMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgMuAQcOAR8BFjI/ATYmJyYGDwEnBzMyNjU0JisBIgYVFBYzFTMyNjU0JisBIgYVFBYzNxUUFjMyNj0BNCYjIgYVEzI3PgE3NjU0Jy4BJyYjIgcOAQcGFRQXHgEXFjciJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYCADMtLkMTFBQTQy4tMzMtLkMTFBQTQy4tMywoJzoREREROicoLCwoJzoREREROicodAQOBQUBBVQFDgVUBQEFBQ4ESEgXvgYKCga+BgoKBr4GCgoGvgYKCgZOCgcHCgoHBwoRal1eiygoKCiLXl1qal1eiygoKCiLXl1qY1dYgiUmJiWCWFdjY1dYgiUmJiWCWFfIFBNDLi0zMy0uQxMUFBNDLi0zMy0uQxMUIREROicoLCwoJzoREREROicoLCwoJzoREQFrBQEFBQ0FXwUFXwUNBQUBBVFRegkHBwoKBwcJVQoHBwkJBwcKZb0HCgoHvQcKCgf91igoi15dampdXosoKCgoi15dampdXosoKCEmJYJYV2NjV1iCJSYmJYJYV2NjV1iCJSYAAAAHAAD/wAQAA8AAJgAqAC4AMgBKAGYAggAAJSImNRE0NjMhMhYdARQGIyImPQE0JiMhIgYVERQWOwEyFhUUBisBEzMVIxUzFSM1MxUjFyImLwEmNDc2Mh8BNz4BFx4BDwEOASsBAzI3PgE3NjU0Jy4BJyYjIgcOAQcGFRQXHgEXFjciJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYBRxMbGxMBMRMbCQYGCQkH/s8GCQkGTAcJCQdML9jYPj6amsgDBQNcBAQFDAVPjwQNBQUCBJkCBgQBPmpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhX2RsTAXITGxsTfQcJCQd9BgkJBv6OBgkJBwYJAXIfmh57H/YCA1wEDQUEBFDJBQIEBAwF2AIE/uYoKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAAcAAP/ABAADwAAbADcAbgB4AIoAmgCrAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBhMhIgYVFBY7ARUUFjsBBwYWFxQyMxY2PwE+ATUzFBYfAR4BNz4BJzA0IyczMjY9ATMyNjU0JiMDFAYjISImPQEhBSMiJj0BNDY7ATIWHQEUBiMxMyMiJj0BNDY7ATIWHQEUBisBIiY9ATQ2OwEyFh0BFAYjAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpjV1iCJSYmJYJYV2NjV1iCJSYmJYJYV2z+WAYICAYOEAx6IwMCBQEBBQwEJwEBHQEBJwQMBgQEAgEjegwQDwYICAYrCAb+yQYIAVP++gYEBgYEBgUGBgW8BgQHBwQGBAcHYgYEBwcEBgUGBgVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoISYlglhXY2NXWIIlJiYlglhXY2NXWIIlJgKlCQYFCP8MEEEECgMBAwMFSAEDAgIDAUgFAwMCCQUCQRAM/wgGBgj+8wYICAbx+gUDVQQEBARVAwUGBKMEBQUEowQGBQO+AwUFA74DBQAFAAD/wAQAA8AAGwA3AFwAgQC8AAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgEVFAYjIiY9ATQ2MzIWFRQXHgEXFjMyNjc+ARceAQcOASMiJiclNTQ2MzIWHQEUBiMiJjU0Jy4BJyYjIgYHDgEnLgE3PgEzMhYXByMiJjU0NjsBJyY0NzYWHwE3PgEXHgEPATMyFhUUBisBFTMyFhUUBisBFRQGIyImPQEjIiY1NDY7ATUCAGpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhX/sYJBwcKCgcHCREROicoLEBqGgMNBgYFAx56SkVyIAGuCQcHCgoHBwkRETonKCxAahoDDQYGBQMeekpFciDfUAcKCgc7PQQFBQ4FSUoEDgUFAQU9PAcJCQdQUAcJCQdQCgcHCVAHCgoHUEAoKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAXQ6BwoKB7YGCgoGLScnOhERRToGBQMDDQZCUEQ49zoHCgoHtQcKCgcsJyc6ERFFOgYFAwMNBkJQRDhyCgYHCkQFDgQFAQVSUgUBBQQOBUQKBwYKNAoGBwpaBgoKBloKBwYKNAAFAAD/wAQAA8AAGwBLAIsAyAEGAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmEw4BBw4BIyImJy4BJy4BJy4BNTQ2Nz4BNz4BNz4BMzIWFx4BFx4BFx4BFRQGBw4BAQczLgEnLgE1MxQGBzMuATczHgEXNQ4BKwE1NDY3PgE1LgEnHgEdASM1NDY3PgE1LgEnHgEdASMGJicVPgE7AQE1PgE3PgEzNQ4BJyMiJicuASMVMz4BOwEOAQcVIwYmJxU+ATM+ATsBFRYGJx4BFz4BNzUzMhYXNQ4BKwElPgE3BjY/ATMyFhc1DgEnIz4BNz4BNycuAScOAQcjBiYnIiY1FTM+ATsBDgEHHgEXMz4BNxUUBgczLgE3NQIAal1eiygoKCiLXl1qal1eiygoKCiLXl3SH0coKVgtLVgpKEcfHzARERISEREwHx9HKClYLS1YKShHHx8wERESEhERMP4gBUMBAwECAZEDA0MEAwJbGykPCykfWwMCAgEDIyADA5EEBAECBCMfAwJDHS0REi0cQwEaGCQMCx4VESkZtAsZDwkOBAgTJBKWEicVYB4pDAYPCAcbFGADJyoKDQQzNAJNGCkQCCkgTf75AwsICxAMH/waKxAQLR7bBAwIAgQCJgYPCAMNC3sYKhECAQUSKBdgL2Q2DRYKAR8tDwMCQwQDAQPAKCiLXl1qal1eiygoKCiLXl1qal1eiygo/MQfMBEREhIRETAfH0coKVgtLVgpKEcfHzARERISEREwHx9HKClYLS1YKShHAec1AQcFCxQJFRsFDBoPAQMBNQIDDQsTCAMEAQEDAQUYExAQCREGAgICAQQDCxgODQECBDUCA/7SEg8UBQYFOAQCAQECAQE1AwIKFQklAgMENgIBAQJOEQsHDyISBhYPewMDNgMCWwQMCA8VDygCAzYEAwEIDgUBBAMLAgYCCRwTAQEDAQI2AwI/WxwLFgwYLRamHCcLByUf3AAAAAAKAAD/wAQAA8AAFwAlADwASgBeAG0AfACKAKYAwgAAJTI3PgE3NjU0Ji8BIwcOARUUFx4BFxYzAzMeARUUBiMiJjU0Njc/ATYWDwEOASsBIiYvASY2HwE3NjIfAQczNwcGIi8BBwYiLwEXFyYiBwYUHwEWMj8BNiYnJiIPAScHMzI2NTQmKwEiBhUUFjMVMzI2NTQmKwEiBhUUFjM3FRQWMzI2PQE0JiMiBhMyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxY3IicuAScmNTQ3PgE3NjMyFx4BFxYVFAcOAQcGAgA1Li1CExNVVASVBFRWExNCLS41QYFMS3leXnlLS3xECw4FMgIIBJUFCAIxBQ4KRSwDBwMsc4AcJgIGAysrAgYDJhwTBQ0FBgQ6BQ8FOQUBBQUOBC4tHZUGCgoGlQcKCgeVBgoKBpUHCgoHOgkHBwoKBwcJCGpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhXuA4ONCUkLTFyQQMCNnI9LSQlNA4OAYw7ZCdKW1tKMmQwbxUDEQpjBAUFBGMKEQMVFAEBFE44CwECExMCAQs4aQYEBQ0FQgYGQgUNBQQGMzNlCQcHCgoHBwlTCgcGCgoGBwpbhAcKCgeEBwkJ/hooKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAAAFAAD/wAQAA8AAGwA3AFIAfQCbAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBhMHBiInJjQ/ASMiJjU0NjsBMhYdARQGIyImNScyFhUUBiMiBhUUFjMyNjU0NjMyFhUUBw4BBwYjIicuAScmNTQ3PgE3NjMHNhYXFAYHDgEVFBYzMjY3PgEXHgEHDgEjIiY1NDYCAGpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhXPowFDwUFBYo+CAoKCGsHCwsHCAqhBwsLB0ppaUpKaQoIBwsRETonKCwsKCc6ERERETonKCwNBwwBCQcbJCoeGykDAQwHBwoBBT0pLD81QCgoi15dampdXosoKCgoi15dampdXosoKCEmJYJYV2NjV1iCJSYmJYJYV2NjV1iCJSYCaIwFBQUPBYsLBwcLCwdsBwsLB5ALBwgKaUpKaWlKBwsLBywoJzoREREROicoLCwoJzoREWwBCQcICwEEKBseKiQbBwkBAQsIKDY/LSg9AAAABQAA/8AEAAPAABwAPwBKAFkAaAAAARUUBiMiJj0BIRUUBiMiJj0BIyIGHQEhNTQmKwE1MzIWFREUBiMhIiY1ETQ2OwE1NDYzMhYdASE1NDYzMhYdAQERFBYzITI2NREhBSImNTQ2MyEyFhUUBiMhFSImNTQ2MyEyFhUUBiMhAuAZEhEZ/uoZERIZoBIZA1YZEqCgNUtLNf0ANUtLNaAZEhEZARYZERIZ/XUZEgMAEhn8qgEAERkZEQFWERkZEf6qERkZEQFWERkZEf6qAxUqEhkZEioqEhkZEioZEaCgERlWSzX9VTVLSzUCqzVLKhIZGRIqKhIZGRIq/or+SxIZGRIBtdUZEhEZGRESGZUZERIZGRIRGQAAAAEAOv/AA8YDqwAiAAAbAR4BFREUBiMiJjURAyY2MyEyFgcDERQGIyImNRE0NjcTIaXDAwMZEREZ4AwYGANEGBgM4BkRERkDA8P9SgNY/qIFCgX+8REZGREBBAGSFSkpFf5u/g8SGBgSAfwFCgUBXgAIAAD/wAQAA8AAGwA3AEcAWABoAHkAiQCZAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgMiBhURFBY7ATI2NRE0JiMnMzIWFREUBisBIiY1ETQ2MyEzMhYdARQGKwEiJj0BNDYXIgYdARQWOwEyNj0BNCYrARMzMhYdARQGKwEiJj0BNDYXIgYdARQWOwEyNj0BNCYjAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpjV1iCJSYmJYJYV2NjV1iCJSYmJYJYVw0IDAwIXAgMDAhYVRchIRdVGCEhGP73ZhggIBhmFyEhFAkLCwltCAsLCG0DZhggIBhmFyEhFAkLCwltCAsLCEAoKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAqULCf6cCQsLCQFkCQshIhj+phgiIhgBWhgiIhikGSIiGaQYIiEMCK4JDAwJrggM/uciGR4YIyMYHhkiIQ0KJAkODgkkCg0AAAEAAP/AA9QDvwBQAAABNDYzMhYVMRUUBicmJy4BJyYjIgcOAQcGFRQXHgEXFjMyNz4BNzY/AT4BMzIWFRQGBzEGBw4BBwYjIicuAScmNTQ3PgE3NjMyFx4BFxYfATUDixUPEBU5DRopKWc9PEJbUFB3IiMjIndQUFtAOztmKCkbAQURCw8VAgIgLzB2RUVLal1diygpKSiLXV1qPDc4ZSssIwEDUg8VFQ/LHQ0bOS8uRBISIiJ4T1BbW1BQdyIjEhFALC01AwkLFRAECARANDRLFRQoKIteXWpqXV2LKCgNDTAiIisBTQADAAD/wAQAA8AAGwA4AEwAAAUiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMxMzMhYVFAYrASImNRE0NjMyFh0BAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpYTk50ISIiIXROTlhYTk50ISIiIXROTlgVlhEZGRHAEhkZEhEZQCgoi15dampdXosoKCgoi15dampdXosoKFUiIXROTlhYTk50ISIiIXROTlhYTk50ISIBqxkSERkZEQEWERkZEesAAAIADP/AA/QDwAAYADEAAAUxIiYnASY0NzYyHwERNDYzMhYVERQGIzEBMTIWFwEWFAcGIi8BERQGIyImNRE0NjMxAUwJEAb+3wwNDSMM2BkSERkZEQFoCRAGASEMDQ0jDNgZEhEZGRFABgcBKwwkDAwN3wNBEhkZEvxWEhkEAAYH/tUMJAwMDd/8vxIZGRIDqhIZAAABAAH/xgRHA8AALgAAASIGBy4BIyIHDgEHBhUUFhcWFx4BFxYXHgEzMjY3Njc+ATc2Nz4BNTQnLgEnJiMDE0Z+Kyt+Rz84OFMZGDseLEVFhDIyBQgVCgoUCQUxMoVFRSsePBkYUzg4QAPAQzs7QxsaXD09RlN5L0RISHkoKAMHBwcHAygoeUhIRC95U0Y9PVwaGwAABAAA/8AD1wOoAAcADQARABUAACUhESMRIREjARc3JwcXNzMRIxMRIxEDhfzNUgPXUv5nrzrp6jqHUVFRURIBcf49AcMBsbA66uo6wf1xAo/9cQKPAAAAAAEACwCjA/UC3wATAAATLgEHDgEXARYyNwE2JicmBgcJAUoMIw0NAgwB1gwmDAHWDAINDSMM/kr+SgLdDQEMCyQN/gAODgIADSQLDAEN/iIB3gAAAAEA4//LAx8DtQATAAAlHgEHDgEnASY0NwE2FhcWBgcJAQMdDQEMCyQN/gAODgIADSQLDAEN/iIB3goMIw0NAgwB1gwmDAHWDAINDSMM/kr+SgAAAAEA4f/LAx0DtQATAAA3DgEXHgE3ATY0JwEmBgcGFhcJAeMNAQwLJA0CAA4O/gANJAsMAQ0B3v4iCgwjDQ0CDAHWDCYMAdYMAg0NIwz+Sv5KAAAAAAEACwChA/UC3QATAAA3DgEnLgE3ATYyFwEWBgcGJicJAUoMIw0NAgwB1gwmDAHWDAINDSMM/kr+SqMNAQwLJA0CAA4O/gANJAsMAQ0B3v4iAAAAAAEAUwA7A6QDKwBRAAABMQEGBwYUFxYXFhcWMjc2NwE2NCcmIgcBBhQXFjY3ATYyFxYUBzEBBiInJjQ3ATY3NjIXFhcWFxYUBwYHAQYHBiInJicmJyY0NzY3ATYyFx4BAdP+6B4QDw8QHh4mJ08mJh8BbCgoKXIp/qAUFBU6FAEMCRoJCQj+9CduJycnAWAdJSVNJiUdHg4PDw4e/pQnMjJnMjIoJxQUFBQnARgKGQkJAQLg/ugeJyZPJiceHg8QEA8eAWwocygpKf6hFToUFQEUAQwICQkZCv70JiYnbicBYB0PDw8PHR4lJU0lJR7+lSgUExMUKCcyMmcyMigBFwkJCRoAAQAM/80CiQPAABsAACURNDYzMhYVETc2MhceAQcBBiInASY0NzYyHwEBIBkSERnXDCQMDQEN/t8MJA3+4QwNDSMM11MDQhIZGRL8wN4NDAwkDP7VDQ0BKQwkDAwN3gAAAQC3/8ADNAOzABsAAAERFAYjIiY1EQcGIicuATcBNjIXARYUBwYiLwECIBkSERnXDCQMDQENASEMJA0BHwwNDSMM1wMt/L4SGRkSA0DeDQwMJAwBKw0N/tcMJAwMDd4AAQAMAHgD9AMJABMAAAE+ARcWFAcBBiInASY0NzYWFwkBA7cMIw0NDP27DSQM/poMDQ0jDAFHAicDCA0BDQwjDf2rDQ0Bbw0jDA0BDP6vAjYAAAAAAQA3//cDyQOJACAAAAkBJjQ3NjIXCQE2MhcWFAcJARYUBwYiJwkBBiInJjQ3AQHE/nMMDA0jDAGNAY0MIw0MDP5zAY0MDA0jDP5z/nMMIw0MDAGNAcABjQwjDQwM/nMBjQwMDSMM/nP+cwwjDQwMAY3+cwwMDSMMAY0AAAMAL//fA9EDggAUACkAWgAAEyIGFTERFBYzMSEyNjUxETQmIzEhNSEyFhUxERQGIzEhIiY1MRE0NjMxBRQGIyImNTE1NDYzITIWFREUBisBIiY1NDY7ATgBMTI2NRE0JiM4ATEhMCIxIgYdAYwNEhINAbINEhIN/k4Bsic2Nif+Tic2NicBFxINDRIwIgHJITAwIU0MExMMTQgLCwj+NwEICwJrEwz98A0SEg0CEAwTPjcm/fAmNzcmAhAmNw8MExMMlyEwMCH92CEwEg0NEgsIAigICwsIlwAAAAAJAAD/wAQAA8AAGwA3AEcAVwBoAHkAhQCRAJ0AAAUyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxY3IicuAScmNTQ3PgE3NjMyFx4BFxYVFAcOAQcGEzI2PQE0JiMhIgYdARQWMyU1NCYjISIGHQE+ATMhMhYlITIWFREUBiMhIiY1ETQ2MxEiBh0BFBYzITI2PQE0JiMhNyImNTQ2MzIWFRQGByImNTQ2MzIWFRQGByImNTQ2MzIWFRQGAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpjV1iCJSYmJYJYV2NjV1iCJSYmJYJYV3QHCQkH/mMHCgoHAa0JB/5jBwoECAUBnQQI/lcBnRQdHRT+YxUdHRUHCgoHAZ0HCQkH/mNCDhMTDg4TEw4OExMODhMTDg4TEw4OExNAKCiLXl1qal1eiygoKCiLXl1qal1eiygoISYlglhXY2NXWIIlJiYlglhXY2NXWIIlJgGdCgZkBgoKBmQGCqJ3BwkJB3cCAQGmHRT+UhQdHRQBrhQd/pUKB2MHCQkHYwcK5xMODhMTDg4TpRMODhMTDg4TpRMODhMTDg4TAAAAAAQAAP/ABAADwAAgAFIAYQBwAAABERQGIyEiJjURNCYjIgYVMREUFjMhMjY1ETQmIyIGFTEDLgEjOAEjISIGDwEjIgYVFBYzMSEyNjcxNz4BMyEyFh8BHgEzOAExITI2NTQmIzEhJwERFBYzMjY1ETQmIyIGFSERFBYzMjY1ETQmIyIGFQOgLCD9eCAsEw0NE1I6Aog6UhMNDRPUBi8fAf73Hy8GCPINExMNAQ4MEgEMAQwIAQoHDAILAhIMASgNExMN/vQI/okTDQ4SEg4NEwEgEw0OEhIODRMCYP3rHywsHwIVDRMTDf3rOlFROgIVDRMTDQEaHigmHjwTDQ0TEAxWBQkJB1QMEBMNDRM6/s7+ZA4SEg4BnA4SEg7+ZA4SEg4BnA4SEg4AAgAA/8AESQPAADwAggAAASIHDgEHBhUUFhcWFx4BFxYXHgEfAR4BFx4BMzI2Nz4BNz4BNwc2Nz4BNzY3PgE1NCcuAScmIyIGBy4BIwUyFx4BFxYVFAYHBgcOAQcGBw4BDwEOAQ8BDgEjMTAiMSImJzEuAScXLgEnFyYnLgEnJicuATU0Nz4BNzYzMhYfATc+ATMBQ0M7O1caGSovExkZPCMkJxk1GwYRHQYMHhAPHg0FHREgNxoCJyQjPBkZEy8qGRpXOztDQHQtLXVAAcM0Li9FFBQjKxEYFzoiIiUYNBsFChcNBAMJBAEECAMQGgwDHjYaAiYhIjoXGBEqJBQURS8uNDpoJBscJWg5A8AcG2A/QEhHbUoeHx9DIiMjFy4WBQ4XBAoKCgoEFw8ZMBgCJCIjQh8fHkptR0hAP2AbHDQvLzRFFhZMMzQ6Ol1CGx4dPyEhIhYtFgQIEwoDAwMDAgwVCgIZLhgDIyEhPx0eG0JdOjo0M0wWFjYxJiUyNgAAAQAAAAEAAKb8EWdfDzz1AAsEAAAAAADZaF2HAAAAANloXYcAAP/ABEkDwAAAAAgAAgAAAAAAAAABAAADwP/AAAAESQAAAAAESQABAAAAAAAAAAAAAAAAAAAANAQAAAAAAAAAAAAAAAIAAAAEAABLBAAAAAQAACsEAAAABAAAAAQAAAAEAAArBAAAQAQAAAAEAAAABAAADgQAAAAEAAHVBAAAKwQAABUEAAAABAAAAAQAAAAEAAALBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAOgQAAAAEAAAABAAAAAQAAAwESQABA+AAAAQAAAsEAADjBAAA4QQAAAsEAABTAqAADAQAALcEAAAMBAAANwQAAC8EAAAABAAAAARJAAAAAAAAAAoAFAAeAGQBSAGAAcICSALGAzQDhAPoBC4EiAUGBTIFTAV+BhQGggb2B5IIQAk8CfQK2gvcDVAOZA8+D8oQAhDSEUYRthIAEkoSdhKgEsoS9BMeE6AT0BQAFCoUaBTWFbIWRhcGAAAAAQAAADQBBwAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAYAAAABAAAAAAACAAcAVwABAAAAAAADAAYAMwABAAAAAAAEAAYAbAABAAAAAAAFAAsAEgABAAAAAAAGAAYARQABAAAAAAAKABoAfgADAAEECQABAAwABgADAAEECQACAA4AXgADAAEECQADAAwAOQADAAEECQAEAAwAcgADAAEECQAFABYAHQADAAEECQAGAAwASwADAAEECQAKADQAmG9uZXVpSQBvAG4AZQB1AGkASVZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMG9uZXVpSQBvAG4AZQB1AGkASW9uZXVpSQBvAG4AZQB1AGkASVJlZ3VsYXIAUgBlAGcAdQBsAGEAcm9uZXVpSQBvAG4AZQB1AGkASUZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=') - format('truetype'); - font-weight: normal; - font-style: normal; -} - -.new-fc-one-icon { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'new-fc-one-icon' !important; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.new-fc-one-icon-arrow-to-top::before { - content: '\e900'; -} - -.new-fc-one-icon-bullseye::before { - content: '\e901'; -} - -.new-fc-one-icon-calendar::before { - content: '\e91b'; -} - -.new-fc-one-icon-time::before { - content: '\e91f'; -} - -.new-fc-one-icon-ellipsis::before { - content: '\e902'; -} - -.new-fc-one-icon-envelope::before { - content: '\e903'; -} - -.new-fc-one-icon-fail::before { - content: '\e904'; -} - -.new-fc-one-icon-warning::before { - content: '\e905'; -} - -.new-fc-one-icon-file::before { - content: '\e906'; -} - -.new-fc-one-icon-flag::before { - content: '\e907'; -} - -.new-fc-one-icon-folder-open::before { - content: '\e908'; -} - -.new-fc-one-icon-folder::before { - content: '\e909'; -} - -.new-fc-one-icon-home::before { - content: '\e90a'; -} - -.new-fc-one-icon-info::before { - content: '\e90b'; -} - -.new-fc-one-icon-loading::before { - content: '\e90c'; -} - -.new-fc-one-icon-minus::before { - content: '\e90d'; -} - -.new-fc-one-icon-plus::before { - content: '\e90e'; -} - -.new-fc-one-icon-question::before { - content: '\e90f'; -} - -.new-fc-one-icon-search::before { - content: '\e910'; -} - -.new-fc-one-icon-success::before { - content: '\e911'; -} - -.new-fc-one-icon-sync-alt::before { - content: '\e912'; -} - -.new-fc-one-icon-heart-active::before { - content: '\e921'; - color: #f85d5d; -} - -.new-fc-one-icon-recommend::before { - content: '\e918'; -} - -.new-fc-one-icon-material::before { - content: '\e91d'; -} - -.new-fc-one-icon-delete::before { - content: '\e931'; - color: #666; -} - -.new-fc-one-icon-heart-o::before { - content: '\e932'; - color: #999; -} - -.new-fc-one-icon-fund::before { - content: '\e917'; -} - -.new-fc-one-icon-volume::before { - content: '\e930'; -} - -.new-fc-one-icon-suggest::before { - content: '\e913'; -} - -.new-fc-one-icon-budget::before { - content: '\e914'; -} - -.new-fc-one-icon-verify::before { - content: '\e915'; -} - -.new-fc-one-icon-accumulate::before { - content: '\e916'; -} - -.new-fc-one-icon-cost::before { - content: '\e919'; -} - -.new-fc-one-icon-transform::before { - content: '\e91a'; -} - -.new-fc-one-icon-filter::before { - content: '\e91c'; -} - -.new-fc-one-icon-refresh::before { - content: '\e91e'; -} - -.new-fc-one-icon-sorting::before { - content: '\e920'; -} - -.new-fc-one-icon-upload::before { - content: '\e923'; -} - -.new-fc-one-icon-angle-down::before { - content: '\e925'; -} - -.new-fc-one-icon-angle-left::before { - content: '\e926'; -} - -.new-fc-one-icon-angle-right::before { - content: '\e927'; -} - -.new-fc-one-icon-angle-up::before { - content: '\e928'; -} - -.new-fc-one-icon-append::before { - content: '\e929'; -} - -.new-fc-one-icon-arrow-down::before { - content: '\e92a'; -} - -.new-fc-one-icon-arrow-up::before { - content: '\e92b'; -} - -.new-fc-one-icon-check::before { - content: '\e92d'; -} - -.new-fc-one-icon-close::before { - content: '\e92e'; -} - -.new-fc-one-icon-copy::before { - content: '\e92f'; -} - -.new-fc-one-select-another-xsmall { - font-size: 12px; - border-radius: 2px; -} - -.new-fc-one-select-another-xsmall .new-fc-one-select-another-selection { - border-radius: 2px; -} - -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection-text-error { - font-size: 12px; -} - -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection__rendered { - line-height: 22px; -} - -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection--multiple { - min-height: 22px; -} - -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__choice { - height: 16px; - line-height: 16px; - margin-top: 4px; - margin-bottom: 4px; -} - -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__clear, -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-arrow { - top: 12px; -} - -.new-fc-one-select-another-xsmall - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-search__field__wrap - input { - font-size: 12px; -} - -.new-fc-one-select-another-dropdown-xsmall - .new-fc-one-select-another-dropdown-menu-item { - height: 24px; - line-height: 24px; - font-size: 12px; -} - -.new-fc-one-select-another-dropdown-xsmall - .new-fc-one-select-another-dropdown-menu-item - .new-fc-one-checkbox-wrapper - + span { - font-size: 12px; -} - -.new-fc-one-select-another-dropdown-xsmall - .new-fc-one-select-another-dropdown-menu-item-group-title { - height: 24px; - line-height: 24px; - font-size: 12px; -} - -.new-fc-one-select-another-small { - font-size: 12px; - border-radius: 2px; -} - -.new-fc-one-select-another-small .new-fc-one-select-another-selection { - border-radius: 2px; -} - -.new-fc-one-select-another-small - .new-fc-one-select-another-selection-text-error { - font-size: 12px; -} - -.new-fc-one-select-another-small - .new-fc-one-select-another-selection__rendered { - line-height: 26px; -} - -.new-fc-one-select-another-small - .new-fc-one-select-another-selection--multiple { - min-height: 26px; -} - -.new-fc-one-select-another-small - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__choice { - height: 20px; - line-height: 20px; - margin-top: 4px; - margin-bottom: 4px; -} - -.new-fc-one-select-another-small - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__clear, -.new-fc-one-select-another-small - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-arrow { - top: 14px; -} - -.new-fc-one-select-another-small - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-search__field__wrap - input { - font-size: 12px; -} - -.new-fc-one-select-another-dropdown-small - .new-fc-one-select-another-dropdown-menu-item { - height: 28px; - line-height: 28px; - font-size: 12px; -} - -.new-fc-one-select-another-dropdown-small - .new-fc-one-select-another-dropdown-menu-item - .new-fc-one-checkbox-wrapper - + span { - font-size: 12px; -} - -.new-fc-one-select-another-dropdown-small - .new-fc-one-select-another-dropdown-menu-item-group-title { - height: 28px; - line-height: 28px; - font-size: 12px; -} - -.new-fc-one-select-another-medium { - font-size: 14px; - border-radius: 3px; -} - -.new-fc-one-select-another-medium .new-fc-one-select-another-selection { - border-radius: 3px; -} - -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection-text-error { - font-size: 14px; -} - -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection__rendered { - line-height: 30px; -} - -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection--multiple { - min-height: 30px; -} - -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__choice { - height: 24px; - line-height: 24px; - margin-top: 4px; - margin-bottom: 4px; -} - -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__clear, -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-arrow { - top: 16px; -} - -.new-fc-one-select-another-medium - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-search__field__wrap - input { - font-size: 14px; -} - -.new-fc-one-select-another-dropdown-medium - .new-fc-one-select-another-dropdown-menu-item { - height: 32px; - line-height: 32px; - font-size: 14px; -} - -.new-fc-one-select-another-dropdown-medium - .new-fc-one-select-another-dropdown-menu-item - .new-fc-one-checkbox-wrapper - + span { - font-size: 14px; -} - -.new-fc-one-select-another-dropdown-medium - .new-fc-one-select-another-dropdown-menu-item-group-title { - height: 32px; - line-height: 32px; - font-size: 14px; -} - -.new-fc-one-select-another-large { - font-size: 16px; - border-radius: 4px; -} - -.new-fc-one-select-another-large .new-fc-one-select-another-selection { - border-radius: 4px; -} - -.new-fc-one-select-another-large - .new-fc-one-select-another-selection-text-error { - font-size: 16px; -} - -.new-fc-one-select-another-large - .new-fc-one-select-another-selection__rendered { - line-height: 34px; -} - -.new-fc-one-select-another-large - .new-fc-one-select-another-selection--multiple { - min-height: 34px; -} - -.new-fc-one-select-another-large - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__choice { - height: 28px; - line-height: 28px; - margin-top: 4px; - margin-bottom: 4px; -} - -.new-fc-one-select-another-large - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__clear, -.new-fc-one-select-another-large - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-arrow { - top: 18px; -} - -.new-fc-one-select-another-large - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-search__field__wrap - input { - font-size: 16px; -} - -.new-fc-one-select-another-dropdown-large - .new-fc-one-select-another-dropdown-menu-item { - height: 36px; - line-height: 36px; - font-size: 16px; -} - -.new-fc-one-select-another-dropdown-large - .new-fc-one-select-another-dropdown-menu-item - .new-fc-one-checkbox-wrapper - + span { - font-size: 16px; -} - -.new-fc-one-select-another-dropdown-large - .new-fc-one-select-another-dropdown-menu-item-group-title { - height: 36px; - line-height: 36px; - font-size: 16px; -} - -.new-fc-one-select-another-disabled { - border: 1px solid #eee; - background-color: #fafafa; - color: #ccc; - cursor: not-allowed; -} - -.new-fc-one-select-another-disabled:hover, -.new-fc-one-select-another-disabled:active, -.new-fc-one-select-another-disabled:focus { - border-color: #eee; -} - -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple[type='list'] { - cursor: not-allowed; -} - -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice { - cursor: not-allowed; - background-color: #fafafa; - border: 1px solid #eee; -} - -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice:hover, -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice:active, -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice:focus { - background-color: #fafafa; -} - -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice__remove { - cursor: not-allowed; -} - -.new-fc-one-select-another:not(.new-fc-one-select-another-disabled) { - border: 1px solid #e0e0e0; - background-color: #fff; - color: #333; - cursor: pointer; -} - -.new-fc-one-select-another:not(.new-fc-one-select-another-disabled):hover, -.new-fc-one-select-another:not(.new-fc-one-select-another-disabled):active { - border-color: #999; -} - -.new-fc-one-select-another:not(.new-fc-one-select-another-disabled):focus { - border-color: #3d88f2; -} - -.new-fc-one-select-another { - line-height: 1; - box-sizing: border-box; - margin: 0; - padding: 0; - list-style: none; - display: inline-block; - position: relative; - outline: 0; - width: 120px; - padding: 0 12px; -} - -.new-fc-one-select-another-focused { - border-color: #3d88f2; -} - -.new-fc-one-select-another-open { - border-color: #999; -} - -.new-fc-one-select-another-open .new-fc-one-select-another-arrow { - transform: scale(0.7, 0.7) rotate(180deg); -} - -.new-fc-one-select-another ul, -.new-fc-one-select-another ol { - margin: 0; - padding: 0; - list-style: none; -} - -.new-fc-one-select-another > ul > li > a { - padding: 0; - background-color: #fff; -} - -.new-fc-one-select-another-error-line { - border: 1px solid #e64552 !important; -} - -.new-fc-one-select-another-error-line:hover, -.new-fc-one-select-another-error-line:focus, -.new-fc-one-select-another-error-line:active { - border-color: #e64552 !important; -} - -.new-fc-one-select-another-error-line:focus { - box-shadow: 0 0 0 2px rgba(230, 69, 82, 0.2); -} - -.new-fc-one-select-another-selection__clear, -.new-fc-one-select-another-custom-key, -.new-fc-one-select-another-arrow { - position: absolute; - top: 50%; - right: 0; - line-height: 1; - margin-top: -6px; - color: #666; - font-size: calc(1em - 4px); - transition: transform 0.3s; - width: 1em; - height: 1em; - background: #fff; -} - -.new-fc-one-select-another-arrow { - transform: scale(0.7, 0.7); -} - -.new-fc-one-select-another-selection__clear { - transform: scale(1); - color: #999; - z-index: 1; - opacity: 0; -} - -.new-fc-one-select-another-selection { - position: relative; - outline: none; - user-select: none; - box-sizing: border-box; - display: block; - border-radius: 0; - transition: all 0.3s ease-in-out; -} - -.new-fc-one-select-another-selection:hover - .new-fc-one-select-another-selection__clear { - opacity: 1; -} - -.new-fc-one-select-another-selection-selected-value { - float: left; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 100%; -} - -.new-fc-one-select-another-selection-text-error { - color: #e64552; - margin-top: 4px; -} - -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection__clear { - display: none; - visibility: hidden; - pointer-events: none; -} - -.new-fc-one-select-another-disabled - .new-fc-one-select-another-selection--multiple - .new-fc-one-select-another-selection__choice__remove { - display: none; -} - -.new-fc-one-select-another-selection--single { - position: relative; -} - -.new-fc-one-select-another-selection__rendered { - display: block; - position: relative; - padding-right: 14px; -} - -.new-fc-one-select-another-selection__rendered::after { - content: '.'; - visibility: hidden; - pointer-events: none; - display: inline-block; - width: 0; - height: 0; -} - -.new-fc-one-select-another-selection__placeholder, -.new-fc-one-select-another-search__field__placeholder { - position: absolute; - left: 0; - right: 14px; - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - text-align: left; - color: #999; -} - -.new-fc-one-select-another-search__field__placeholder { - left: 8px; -} - -.new-fc-one-select-another-search__field__mirror { - position: absolute; - top: -2px; - left: 0; - white-space: pre; - pointer-events: none; - opacity: 0; - color: #333; -} - -.new-fc-one-select-another-search--inline { - position: absolute; - height: 100%; - width: 100%; -} - -.new-fc-one-select-another-search--inline - .new-fc-one-select-another-search__field__wrap { - width: 100%; - height: 100%; -} - -.new-fc-one-select-another-search--inline - .new-fc-one-select-another-search__field { - border-width: 0; - height: 100%; - width: calc(100% - 12px); - background: transparent; - outline: 0; - border-radius: 0; - line-height: 1; - color: #333; -} - -.new-fc-one-select-another-search--inline > i { - float: right; -} - -.new-fc-one-select-another-selection--multiple[type='list'] { - cursor: text; - zoom: 1; - position: relative; -} - -.new-fc-one-select-another-selection--multiple[type='list']::before, -.new-fc-one-select-another-selection--multiple[type='list']::after { - content: ' '; - display: table; -} - -.new-fc-one-select-another-selection--multiple[type='list']::after { - clear: both; - visibility: hidden; - font-size: 0; - height: 0; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-search--inline { - float: left; - position: relative; - top: 1px; - left: 0; - width: auto; - padding: 0; - max-width: calc(100% - 12px); -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-search--inline - .new-fc-one-select-another-search__field { - max-width: 100%; - width: 0.75em; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-search-hidden { - height: 0; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-search-ul { - padding: 0; - margin: 0; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-search-ul::after { - content: ' '; - display: table; - clear: both; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__rendered { - height: auto; - padding-right: 40px; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__rendered::after { - display: none; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice { - color: #333; - background-color: #f5f5f5; - border-radius: 2px; - float: left; - margin-right: 4px; - max-width: 99%; - position: relative; - overflow: hidden; - transition: padding 0.3s ease-in-out; - padding: 0 26px 0 8px; - cursor: pointer; - border: 1px solid #e0e0e0; - box-sizing: border-box; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice:hover { - background-color: #eee; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice:focus { - background-color: #eee; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice:active { - background-color: #e0e0e0; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice__disabled { - cursor: not-allowed; - background-color: #fafafa; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice__content { - display: inline-block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 100%; - transition: margin 0.3s ease-in-out; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__choice__remove { - color: #666; - line-height: inherit; - cursor: pointer; - display: inline-block; - font-weight: bold; - transition: all 0.3s; - position: absolute; - right: 8px; - transform: scale(0.7, 0.7); - top: 1px; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__clear { - top: 16px; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__total_count { - right: 0; - position: absolute; - color: #999; - bottom: 4px; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__total_count-error { - color: #e64552; -} - -.new-fc-one-select-another-selection--multiple[type='list'] - .new-fc-one-select-another-selection__total_count-min { - right: 20px; - top: 50%; - transform: translateY(-50%); - height: 20px; - line-height: 20px; -} - -.new-fc-one-select-another-hidden { - display: none; -} - -.new-fc-one-select-another-multiple .new-fc-one-select-another { - width: 300px; -} - -.new-fc-one-select-another-dropdown { - line-height: 1; - margin: 0; - padding: 0; - list-style: none; - font-variant: initial; - background-color: #fff; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); - border-radius: 3px; - box-sizing: border-box; - z-index: 1051; - left: -9999px; - top: -9999px; - position: absolute; - outline: none; -} - -.new-fc-one-select-another-dropdown.slide-up-enter.slide-up-enter-active.new-fc-one-select-another-dropdown-placement-topLeft, -.new-fc-one-select-another-dropdown.slide-up-appear.slide-up-appear-active.new-fc-one-select-another-dropdown-placement-topLeft { - animation-name: oneUISlideDownInEffect; -} - -.new-fc-one-select-another-dropdown.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-dropdown-placement-bottomLeft { - animation-name: oneUISlideUpOutEffect; -} - -.new-fc-one-select-another-dropdown.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-dropdown-placement-topLeft { - animation-name: oneUISlideDownOutEffect; -} - -.new-fc-one-select-another-dropdown-hidden { - display: none; -} - -.new-fc-one-select-another-dropdown-menu { - outline: none; - margin: 0; - padding-left: 0; - list-style: none; - overflow: auto; -} - -.new-fc-one-select-another-dropdown-menu-item-group-list { - margin: 0; - padding: 0; -} - -.new-fc-one-select-another-dropdown-menu-item-group-list - > .new-fc-one-select-another-dropdown-menu-item { - padding-left: 8px; -} - -.new-fc-one-select-another-dropdown-menu-item-group-title { - color: #999; - padding: 0 8px; -} - -.new-fc-one-select-another-dropdown-menu-item-group-list - .new-fc-one-select-another-dropdown-menu-item:first-child:not(:last-child), -.new-fc-one-select-another-dropdown-menu-item-group:not(:last-child) - .new-fc-one-select-another-dropdown-menu-item-group-list - .new-fc-one-select-another-dropdown-menu-item:last-child { - border-radius: 0; -} - -.new-fc-one-select-another-dropdown-menu-item-group:not(:last-child) { - padding-bottom: 2px; - border-bottom: 1px solid #999; -} - -.new-fc-one-select-another-dropdown-menu-item[type='custom'] { - position: relative; - display: block; - padding: 0 8px; -} - -.new-fc-one-select-another-dropdown-menu-item { - position: relative; - display: block; - padding: 0 8px; - white-space: nowrap; - cursor: pointer; - overflow: hidden; - text-overflow: ellipsis; - transition: background 0.3s ease; - background-color: #fff; - color: #333; -} - -.new-fc-one-select-another-dropdown-menu-item:hover { - background-color: #f5f5f5; - color: #000; -} - -.new-fc-one-select-another-dropdown-menu-item:active { - background-color: #eee; - color: #000; -} - -.new-fc-one-select-another-dropdown-menu-item:focus { - background-color: #f2f7ff; - color: #000; -} - -.new-fc-one-select-another-dropdown-menu-item-selected { - background-color: #fff; - color: #3d88f2; -} - -.new-fc-one-select-another-dropdown-menu-item-selected:hover { - background-color: #f5f5f5; - color: #3d88f2; -} - -.new-fc-one-select-another-dropdown-menu-item-selected:active { - background-color: #eee; - color: #3d88f2; -} - -.new-fc-one-select-another-dropdown-menu-item-selected:focus { - background-color: #f2f7ff; - color: #3d88f2; -} - -.new-fc-one-select-another-dropdown-menu-item-divider { - height: 1px; - margin: 1px 0; - overflow: hidden; - background-color: #eee; - line-height: 0; -} - -.new-fc-one-select-another-dropdown-menu-item-disabled { - background-color: #fafafa; - color: #ccc; - cursor: not-allowed; -} - -.new-fc-one-select-another-dropdown-menu-item-disabled:hover { - background-color: #fafafa; - color: #ccc; -} - -.new-fc-one-select-another-dropdown-menu-item-disabled:active { - background-color: #fafafa; - color: #ccc; -} - -.new-fc-one-select-another-dropdown-menu-item-disabled:focus { - background-color: #fafafa; - color: #ccc; -} - -.new-fc-one-select-another-dropdown-menu-container { - width: 172px; - height: 152px; - overflow: auto; -} - -.new-fc-one-select-another-dropdown-menu .new-fc-one-checkbox-wrapper { - font-size: inherit; -} - -.new-fc-one-select-another-dropdown--multiple - .new-fc-one-select-another-dropdown-menu-item-selected - .new-fc-one-checkbox-wrapper - + span { - background-color: transparent; - color: #333; -} - -.new-fc-one-select-another-dropdown--multiple - .new-fc-one-select-another-dropdown-menu-item-selected - .new-fc-one-checkbox-wrapper - + span:hover { - background-color: transparent; - color: #000; -} - -.new-fc-one-select-another-dropdown--multiple - .new-fc-one-select-another-dropdown-menu-item-selected - .new-fc-one-checkbox-wrapper - + span:active { - background-color: transparent; - color: #000; -} - -.new-fc-one-select-another-dropdown--multiple - .new-fc-one-select-another-dropdown-menu-item-selected - .new-fc-one-checkbox-wrapper - + span:focus { - background-color: transparent; - color: #000; -} - -.new-fc-one-select-another-dropdown-xsmall - .new-fc-one-select-another-dropdown-menu { - max-height: 248px; -} - -.new-fc-one-select-another-dropdown-small - .new-fc-one-select-another-dropdown-menu { - max-height: 288px; -} - -.new-fc-one-select-another-dropdown-medium - .new-fc-one-select-another-dropdown-menu { - max-height: 328px; -} - -.new-fc-one-select-another-dropdown-large - .new-fc-one-select-another-dropdown-menu { - max-height: 368px; -} - -.new-fc-one-select-another-search-text-highlight { - color: #f27c49; -} - -.new-fc-one-single-select { - background: #fff; - cursor: pointer; - position: relative; - color: #333; - border: 1px solid #dbdbdb; - padding-right: 20px; - box-sizing: border-box; - height: 32px; - line-height: 1; - display: inline-block; - vertical-align: middle; -} - -.new-fc-one-single-select-text { - font-size: 12px; - padding: 0 10px; - display: inline-block; - line-height: 30px; - height: 30px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - width: 100%; -} - -.new-fc-one-single-select:hover { - border: 1px solid #999; -} - -.new-fc-one-select-another-focused .new-fc-one-single-select, -.new-fc-one-single-select:focus, -.new-fc-one-single-select:active { - border: 1px solid #999; -} - -.new-fc-one-single-select-open .new-fc-one-icon { - transform: rotate(180deg) scale(0.7); -} - -.new-fc-one-single-select-disabled { - background: #eee; - cursor: not-allowed; - color: #b8b8b8; -} - -.new-fc-one-single-select-disabled:hover { - border: 1px solid #dbdbdb; -} - -.new-fc-one-select-another-focused .new-fc-one-single-select-disabled, -.new-fc-one-single-select-disabled:focus, -.new-fc-one-single-select-disabled:active { - border: 1px solid #dbdbdb; -} - -.new-fc-one-multiple-select { - position: relative; -} - -.new-fc-one-multiple-select-open .new-fc-one-icon { - transform: rotate(180deg) scale(0.7); -} - -.new-fc-one-multiple-select-text-label { - display: inline-block; -} - -.new-fc-one-select-another-popover { - line-height: 1; - margin: 0; - padding: 0; - list-style: none; - padding: 8px; - font-variant: initial; - background-color: #fff; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); - border-radius: 0; - box-sizing: border-box; - z-index: 1051; - left: -9999px; - top: -9999px; - position: absolute; - outline: none; -} - -.new-fc-one-select-another-popover.slide-up-enter.slide-up-enter-active.new-fc-one-select-another-popover-placement-topLeft, -.new-fc-one-select-another-popover.slide-up-appear.slide-up-appear-active.new-fc-one-select-another-popover-placement-topLeft { - animation-name: oneUISlideDownInEffect; -} - -.new-fc-one-select-another-popover.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-popover-placement-bottomLeft { - animation-name: oneUISlideUpOutEffect; -} - -.new-fc-one-select-another-popover.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-popover-placement-topLeft { - animation-name: oneUISlideDownOutEffect; -} - -.new-fc-one-select-another-popover-hidden { - display: none; -} - -.new-fc-one-select-another-popover-container { - width: 288px; -} - -.new-fc-one-select-another-popover-container-open - .new-fc-one-select-another-arrow { - transform: scale(0.7, 0.7) rotate(180deg); -} - -.new-fc-one-select-another-popover-container - .new-fc-one-select-another-selection__total { - top: 0 !important; - left: 8px !important; -} - -.new-fc-one-select-another-popover-container - .new-fc-one-select-another-selection { - cursor: auto; -} - -.new-fc-one-select-another-popover-inner { - width: 100%; -} - -.new-fc-one-select-another-popover-inner-container { - display: inline-block; - width: 100%; -} - -.new-fc-one-select-another-popover-inner-container-custom { - margin-bottom: 8px; -} - -.new-fc-one-select-another-popover-inner-container-button-item { - margin-right: 8px; -} - -.new-fc-one-select-another-pop { - line-height: 1; - margin: 0; - padding: 0; - list-style: none; - font-variant: initial; - background-color: #fff; - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); - border-radius: 0; - box-sizing: border-box; - z-index: 1051; - left: -9999px; - top: -9999px; - position: absolute; - outline: none; -} - -.new-fc-one-select-another-pop.slide-up-enter.slide-up-enter-active.new-fc-one-select-another-pop-placement-topLeft, -.new-fc-one-select-another-pop.slide-up-appear.slide-up-appear-active.new-fc-one-select-another-pop-placement-topLeft { - animation-name: oneUISlideDownInEffect; -} - -.new-fc-one-select-another-pop.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-pop-placement-bottomLeft { - animation-name: oneUISlideUpOutEffect; -} - -.new-fc-one-select-another-pop.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-pop-placement-topLeft { - animation-name: oneUISlideDownOutEffect; -} - -.new-fc-one-select-another-pop-hidden { - display: none; -} - -.new-fc-one-select-another-container { - display: inline-block; -} - -.new-fc-one-select-another-selection-item { - position: relative; - top: -10px; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx deleted file mode 100644 index 7bf17bd6d..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx +++ /dev/null @@ -1,1023 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import classnames from 'classnames'; -import { cloneDeep, isUndefined } from 'lodash-es'; -import { - Input, - Radio, - Select, - Button, - Switch, - Tooltip, - Checkbox, - Message -} from 'hubble-ui'; -import { useTranslation } from 'react-i18next'; - -import { Tooltip as CustomTooltip } from '../../../common/'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { formatVertexIdText } from '../../../../stores/utils'; - -import type { VertexTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; - -import './NewVertexType.less'; - -const NewVertexType: React.FC = observer(() => { - const dataAnalyzeStore = useContext(DataAnalyzeStore); - const { metadataPropertyStore, vertexTypeStore } = useContext( - MetadataConfigsRootStore - ); - const { t } = useTranslation(); - const [isAddNewProperty, switchIsAddNewProperty] = useState(false); - const [deletePopIndex, setDeletePopIndex] = useState(null); - const deleteWrapperRef = useRef(null); - const dropdownWrapperRef = useRef(null); - - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // if clicked element is not on dropdown, collpase it - if ( - isAddNewProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddNewProperty(false); - } - - if ( - deletePopIndex && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - setDeletePopIndex(null); - } - }, - [deletePopIndex, isAddNewProperty] - ); - - useEffect(() => { - metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); - vertexTypeStore.validateAllNewVertexType(true); - }, [metadataPropertyStore, vertexTypeStore]); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( -
-
-
- {t('addition.menu.base-info')} -
-
-
- * - {t('addition.vertex.vertex-type-name')}: -
- { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - name: e.value - }); - }} - originInputProps={{ - onBlur() { - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType('name'); - } - }} - /> -
- -
-
- * - {t('addition.vertex.vertex-style')}: -
-
- -
-
- -
-
- -
-
- * - {t('addition.common.id-strategy')}: -
- ) => { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - id_strategy: e.target.value - }); - - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType('primaryKeys'); - }} - > - - {t('addition.constant.primary-key-id')} - - - {t('addition.constant.automatic-generation')} - - - {t('addition.constant.custom-string')} - - - {t('addition.constant.custom-number')} - - - {t('addition.constant.custom-uuid')} - - -
-
-
- {vertexTypeStore.newVertexType.id_strategy === 'PRIMARY_KEY' && ( - * - )} - {t('addition.common.association-property')}: -
-
- {vertexTypeStore.newVertexType.properties.length !== 0 && ( -
-
-
{t('addition.common.property')}
-
{t('addition.common.allow-null')}
-
- {vertexTypeStore.newVertexType.properties.map( - (property, index) => { - const currentProperties = cloneDeep( - vertexTypeStore.newVertexType.properties - ); - - return ( -
-
{property.name}
-
- { - currentProperties[index].nullable = checked; - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - properties: currentProperties - }); - - // remove primary keys since it could be empty value - if (checked) { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - primary_keys: - vertexTypeStore.newVertexType.primary_keys.filter( - (key) => key !== property.name - ) - }); - } - }} - size="large" - /> -
-
- ); - } - )} -
- )} -
{ - switchIsAddNewProperty(!isAddNewProperty); - }} - > - {t('addition.common.add-property')} - toggleAddProperty -
-
-
- {isAddNewProperty && ( -
-
-
- {metadataPropertyStore.metadataProperties.map((property) => ( -
- - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesInSelectedVertextType = - vertexTypeStore.addedPropertiesInSelectedVertextType; - - addedPropertiesInSelectedVertextType.has(property.name) - ? addedPropertiesInSelectedVertextType.delete( - property.name - ) - : addedPropertiesInSelectedVertextType.add( - property.name - ); - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - properties: [ - ...addedPropertiesInSelectedVertextType - ].map((propertyName) => { - const currentProperty = - vertexTypeStore.newVertexType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined(currentProperty) - ? currentProperty.nullable - : true - }; - }) - }); - - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType('properties'); - }} - > - {property.name} - - -
- ))} -
-
- )} - {vertexTypeStore.newVertexType.id_strategy === 'PRIMARY_KEY' && ( -
-
- * - {t('addition.common.primary-key-property')}: -
- -
- )} - -
-
- * - {t('addition.vertex.vertex-display-content')}: -
- -
- -
- - {t('addition.edge.index-info')} - - - hint - -
-
-
- * - {t('addition.menu.type-index')}: -
- { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - open_label_index: - !vertexTypeStore.newVertexType.open_label_index - }); - }} - size="large" - /> -
-
-
- {t('addition.common.property-index')}: -
-
- {vertexTypeStore.newVertexType.property_indexes.length !== 0 && ( -
-
- {t('addition.edge.index-name')} -
-
- {t('addition.edge.index-type')} -
-
{t('addition.common.property')}
-
- )} - {vertexTypeStore.newVertexType.property_indexes.map( - ({ name, type, fields }, index) => ( -
-
- { - const propertyIndexEntities = cloneDeep( - vertexTypeStore.newVertexType.property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType( - 'propertyIndexes' - ); - } - }} - /> -
-
- -
-
- -
- - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const propertyIndexEntities = cloneDeep( - vertexTypeStore.newVertexType.property_indexes - ); - - propertyIndexEntities.splice(index, 1); - - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - property_indexes: propertyIndexEntities - }); - - vertexTypeStore.validateAllNewVertexType(true); - vertexTypeStore.validateNewVertexType( - 'propertyIndexes' - ); - - setDeletePopIndex(null); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeletePopIndex(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: closeIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeletePopIndex(index); - } - }} - childrenWrapperElement="img" - /> -
- ) - )} - { - if ( - vertexTypeStore.newVertexType.property_indexes.length === 0 || - vertexTypeStore.isAddNewPropertyIndexReady - ) { - vertexTypeStore.mutateNewProperty({ - ...vertexTypeStore.newVertexType, - property_indexes: [ - ...vertexTypeStore.newVertexType.property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - vertexTypeStore.validateAllNewVertexType(true); - // set isAddNewPropertyIndexReady to false - vertexTypeStore.validateNewVertexType( - 'propertyIndexes', - true - ); - } - }} - style={{ - cursor: 'pointer', - color: vertexTypeStore.isAddNewPropertyIndexReady - ? '#2b65ff' - : '#999', - lineHeight: '32px' - }} - > - {t('addition.edge.add-group')} - -
-
- -
-
- - -
-
- - ); -}); - -export default NewVertexType; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less deleted file mode 100644 index 71698137e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.reuse-properties-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 16px; - - .reuse-steps { - width: 860px; - margin: 16px auto 18px; - } - - .reuse-properties { - &-row { - display: flex; - align-items: center; - margin: 18px 0 32px; - font-size: 14px; - color: #333; - - &:last-child { - margin-bottom: 24px; - } - - &-name { - width: 98px; - text-align: right; - margin-right: 13.9px; - } - } - - &-manipulations { - display: flex; - justify-content: center; - margin-bottom: 88px; - } - - &-validate { - &-duplicate, - &-exist, - &-pass { - width: 58px; - margin: 0 auto; - border-radius: 2px; - letter-spacing: 0; - line-height: 22px; - text-align: center; - } - - &-duplicate { - background: #fff2f2; - border: 1px solid #ff9499; - color: #e64552; - } - - &-exist, - &-pass { - background: #f2fff4; - border: 1px solid #7ed988; - color: #39bf45; - } - } - - &-complete-hint { - display: flex; - flex-direction: column; - justify-content: center; - margin: 88px auto 327px; - - &-description { - display: flex; - justify-content: center; - - & > div { - margin-left: 20px; - } - } - - &-manipulations { - margin: 42px auto 0; - } - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx deleted file mode 100644 index ba1540f2f..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx +++ /dev/null @@ -1,1052 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { useContext, useState, useEffect } from 'react'; -import { observer } from 'mobx-react'; -import { - Select, - Steps, - Transfer, - Button, - Table, - Input, - Message -} from 'hubble-ui'; - -import { GraphManagementStoreContext } from '../../../../stores'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; - -import PassIcon from '../../../../assets/imgs/ic_pass.svg'; - -import './ReuseVertexTypes.less'; -import { cloneDeep } from 'lodash-es'; -import { useTranslation } from 'react-i18next'; - -const ReuseVertexTypes: React.FC = observer(() => { - const graphManagementStore = useContext(GraphManagementStoreContext); - const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); - const { vertexTypeStore } = metadataConfigsRootStore; - const { t } = useTranslation(); - const [currentStatus, setCurrentStatus] = useState(1); - // acutally the name, not id in database - const [selectedId, mutateSelectedId] = useState<[] | string>([]); - const [selectedList, mutateSelectedList] = useState([]); - - // step 2 - const [vertexTypeEditIndex, setVertexTypeEditIndex] = useState( - null - ); - const [propertyEditIndex, setPropertyEditIndex] = useState( - null - ); - const [propertyIndexEditIndex, setPropertyIndexEditIndex] = useState< - number | null - >(null); - - // hack: need to call @observable at here to dispatch re-render by mobx - // since @action in onBlur() in doesn't dispatch re-render - vertexTypeStore.validateReuseErrorMessage.vertexType.toUpperCase(); - vertexTypeStore.validateReuseErrorMessage.property.toUpperCase(); - vertexTypeStore.validateReuseErrorMessage.property_index.toUpperCase(); - - const vertexTypeColumnConfigs = [ - { - title: t('addition.common.vertex-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (index !== vertexTypeEditIndex) { - return ( -
- {text} -
- ); - } - - return ( - { - // remove validate message after user input changes - vertexTypeStore.resetValidateReuseErrorMessage('vertexType'); - - const editedCheckedReusableData = cloneDeep( - vertexTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.vertexlabel_conflicts[ - index - ].entity.name = e.value; - - vertexTypeStore.mutateEditedReusableData( - editedCheckedReusableData - ); - }} - originInputProps={{ - onBlur() { - vertexTypeStore.validateReuseData( - 'vertexType', - vertexTypeStore.checkedReusableData!.vertexlabel_conflicts[ - index - ].entity.name, - vertexTypeStore.editedCheckedReusableData! - .vertexlabel_conflicts[index].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - width: '30%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (vertexTypeStore.reusableVertexTypeNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return ( -
- {text} -
- ); - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - if (index === vertexTypeEditIndex) { - const originalName = vertexTypeStore.checkedReusableData! - .vertexlabel_conflicts[index].entity.name; - const changedName = vertexTypeStore.editedCheckedReusableData! - .vertexlabel_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - return ( -
- { - if ( - !isChanged || - !vertexTypeStore.validateReuseData( - 'vertexType', - originalName, - changedName - ) - ) { - return; - } - - vertexTypeStore.mutateReuseData( - 'vertexType', - originalName, - changedName - ); - setVertexTypeEditIndex(null); - vertexTypeStore.mutateReusableVertexTypeChangeIndexes(index); - }} - > - {t('addition.common.save')} - - { - vertexTypeStore.resetValidateReuseErrorMessage('vertexType'); - setVertexTypeEditIndex(null); - vertexTypeStore.resetEditedReusableVertexTypeName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (vertexTypeEditIndex !== null) { - return; - } - - setVertexTypeEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (vertexTypeEditIndex !== null) { - return; - } - - setPropertyEditIndex(null); - - // remove selected status of the property in - const newSelectedList = [...selectedList].filter( - (property) => - property !== - vertexTypeStore.editedCheckedReusableData! - .vertexlabel_conflicts[index].entity.name - ); - - mutateSelectedList(newSelectedList); - - // notice: useState hooks cannot sync updated state value, so the length is still 1 - if (selectedList.length === 1) { - setCurrentStatus(1); - // remove edit status after return previous - vertexTypeStore.clearReusableNameChangeIndexes(); - return; - } - - vertexTypeStore.deleteReuseData('vertexlabel_conflicts', index); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - const metadataPropertyColumnConfigs = [ - { - title: t('addition.common.property-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (index !== propertyEditIndex) { - return text; - } - - return ( - { - // remove validate message after user input changes - vertexTypeStore.resetValidateReuseErrorMessage('property'); - - const editedCheckedReusableData = cloneDeep( - vertexTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.propertykey_conflicts[ - index - ].entity.name = e.value; - - vertexTypeStore.mutateEditedReusableData( - editedCheckedReusableData - ); - }} - originInputProps={{ - onBlur() { - vertexTypeStore.validateReuseData( - 'property', - vertexTypeStore.checkedReusableData!.propertykey_conflicts[ - index - ].entity.name, - vertexTypeStore.editedCheckedReusableData! - .propertykey_conflicts[index].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.common.data-type'), - dataIndex: 'data_type', - width: '15%', - render(text: string) { - if (text === 'TEXT') { - return 'string'; - } - - return text.toLowerCase(); - } - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - align: 'center', - width: '15%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (vertexTypeStore.reusablePropertyNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return
{text}
; - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - if (index === propertyEditIndex) { - const originalName = vertexTypeStore.checkedReusableData! - .propertykey_conflicts[index].entity.name; - const changedName = vertexTypeStore.editedCheckedReusableData! - .propertykey_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - return ( -
- { - if ( - !isChanged || - !vertexTypeStore.validateReuseData( - 'property', - originalName, - changedName - ) - ) { - return; - } - - vertexTypeStore.mutateReuseData( - 'property', - originalName, - changedName - ); - - setPropertyEditIndex(null); - vertexTypeStore.mutateReusablePropertyNameChangeIndexes( - index - ); - }} - > - {t('addition.common.save')} - - { - vertexTypeStore.resetValidateReuseErrorMessage('property'); - setPropertyEditIndex(null); - vertexTypeStore.resetEditedReusablePropertyName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (propertyEditIndex !== null) { - return; - } - - setPropertyEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (propertyEditIndex !== null) { - return; - } - - setPropertyEditIndex(null); - - vertexTypeStore.deleteReuseData('propertykey_conflicts', index); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - const metadataPropertyIndexColumnConfigs = [ - { - title: t('addition.common.property-index-name'), - dataIndex: 'name', - width: '50%', - render(text: string, records: any, index: number) { - if (index !== propertyIndexEditIndex) { - return text; - } - - return ( - { - vertexTypeStore.resetValidateReuseErrorMessage('property_index'); - - const editedCheckedReusableData = cloneDeep( - vertexTypeStore.editedCheckedReusableData! - ); - - editedCheckedReusableData.propertyindex_conflicts[ - index - ].entity.name = e.value; - - vertexTypeStore.mutateEditedReusableData( - editedCheckedReusableData - ); - }} - originInputProps={{ - onBlur() { - vertexTypeStore.validateReuseData( - 'property_index', - vertexTypeStore.checkedReusableData!.propertyindex_conflicts[ - index - ].entity.name, - vertexTypeStore.editedCheckedReusableData! - .propertyindex_conflicts[index].entity.name - ); - } - }} - /> - ); - } - }, - { - title: t('addition.vertex.corresponding-vertex-type'), - dataIndex: 'owner', - width: '15%' - }, - { - title: t('addition.edge.verification-result'), - dataIndex: 'status', - align: 'center', - width: '15%', - render(value: string, records: any, index: number) { - let classname = ''; - let text = ''; - - if (vertexTypeStore.reusablePropertyIndexNameChangeIndexes.has(index)) { - return ( -
- {t('addition.edge.be-verified')} -
- ); - } - - switch (value) { - case 'DUPNAME': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.duplicate-name'); - break; - - case 'DEP_CONFLICT': - classname = 'reuse-properties-validate-duplicate'; - text = t('addition.message.dependency-conflict'); - break; - - case 'EXISTED': - classname = 'reuse-properties-validate-exist'; - text = t('addition.message.already-exist'); - break; - - case 'PASSED': - classname = 'reuse-properties-validate-pass'; - text = t('addition.message.pass'); - break; - } - - return
{text}
; - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '20%', - render(_: never, records: any, index: number) { - if (index === propertyIndexEditIndex) { - const originalName = vertexTypeStore.checkedReusableData! - .propertyindex_conflicts[index].entity.name; - const changedName = vertexTypeStore.editedCheckedReusableData! - .propertyindex_conflicts[index].entity.name; - const isChanged = changedName !== originalName; - - return ( -
- { - if ( - !isChanged || - !vertexTypeStore.validateReuseData( - 'property_index', - originalName, - changedName - ) - ) { - return; - } - - vertexTypeStore.mutateReuseData( - 'property_index', - originalName, - changedName - ); - - setPropertyIndexEditIndex(null); - vertexTypeStore.mutateReusablePropertyIndexNameChangeIndexes( - index - ); - }} - > - {t('addition.common.save')} - - { - vertexTypeStore.resetValidateReuseErrorMessage( - 'property_index' - ); - setPropertyIndexEditIndex(null); - vertexTypeStore.resetEditedReusablePropertyIndexName(index); - }} - > - {t('addition.common.cancel')} - -
- ); - } - - return ( -
- { - if (propertyIndexEditIndex !== null) { - return; - } - - setPropertyIndexEditIndex(index); - }} - > - {t('addition.operate.rename')} - - { - if (propertyIndexEditIndex !== null) { - return; - } - - setPropertyIndexEditIndex(null); - - vertexTypeStore.deleteReuseData( - 'propertyindex_conflicts', - index - ); - }} - > - {t('addition.common.del')} - -
- ); - } - } - ]; - - useEffect(() => { - // unlike metadata properties, all vertex types only needs here(in reuse) - vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); - }, [vertexTypeStore]); - - return ( -
-
- {t('addition.operate.reuse-vertex-type')} -
-
- {t('addition.message.reuse-vertex-type-notice')} -
-
- - {[ - t('addition.menu.select-reuse-item'), - t('addition.menu.confirm-reuse-item'), - t('addition.menu.complete-reuse') - ].map((title: string, index: number) => ( - index + 1 - ? 'finish' - : 'wait' - } - key={title} - /> - ))} - - - {currentStatus === 1 && ( - <> -
-
- * - {t('addition.newGraphConfig.id')}: -
- -
-
-
- * - {t('addition.operate.reuse-vertex-type')}: -
- name - )} - selectedList={selectedList} - showSearchBox={false} - candidateTreeStyle={{ - width: 355, - fontSize: 14 - }} - selectedTreeStyle={{ - width: 355, - fontSize: 14 - }} - handleSelect={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleSelectAll={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleDelete={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - handleDeleteAll={(selectedList: string[]) => { - mutateSelectedList(selectedList); - }} - /> -
-
- - -
- - )} - - {currentStatus === 2 && ( - <> -
- {t('addition.common.selected-vertex-type')} -
-
({ - name: entity.name, - status - }) - ) - : [] - } - pagination={false} - /> - -
- {t('addition.common.selected-property')} -
-
({ - name: entity.name, - data_type: entity.data_type, - status - }) - ) - : [] - } - pagination={false} - /> - -
- {t('addition.common.selected-property-index')} -
-
({ - name: entity.name, - owner: entity.owner, - status - }) - ) - : [] - } - pagination={false} - /> - -
- - -
- - )} - - {currentStatus === 3 && ( -
-
- {t('addition.message.reuse-complete')} -
-
{t('addition.message.reuse-complete')}
-
{t('addition.message.vertex-type-reuse-success')}
-
-
-
- - -
-
- )} - - - ); -}); - -export default ReuseVertexTypes; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less deleted file mode 100644 index 20b083faa..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -.vertex-type-list-wrapper { - width: 100%; - background: #fff; - margin-top: 16px; - padding: 16px; -} diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx deleted file mode 100644 index eaa7197c6..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx +++ /dev/null @@ -1,1888 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React, { - useContext, - useState, - useEffect, - useRef, - useCallback -} from 'react'; -import { observer } from 'mobx-react'; -import { - cloneDeep, - intersection, - size, - without, - isEmpty, - isUndefined, - values -} from 'lodash-es'; -import { useLocation } from 'wouter'; -import classnames from 'classnames'; -import { motion } from 'framer-motion'; -import { - Button, - Table, - Switch, - Modal, - Drawer, - Input, - Select, - Checkbox, - Message, - Loading -} from 'hubble-ui'; - -import { Tooltip, LoadingDataView } from '../../../common'; -import NewVertexType from './NewVertexType'; -import ReuseVertexTypes from './ReuseVertexTypes'; -import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; -import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import { formatVertexIdText } from '../../../../stores/utils'; - -import type { - VertexTypeValidatePropertyIndexes, - VertexType -} from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; - -import AddIcon from '../../../../assets/imgs/ic_add.svg'; -import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; -import WhiteCloseIcon from '../../../../assets/imgs/ic_close_white.svg'; -import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; -import i18next from '../../../../i18n'; -import { useTranslation } from 'react-i18next'; - -import './VertexTypeList.less'; - -const styles = { - button: { - marginLeft: 12, - width: 78 - }, - header: { - marginBottom: 16 - }, - manipulation: { - marginRight: 12 - }, - deleteWrapper: { - display: 'flex', - justifyContent: 'flex-end' - }, - loading: { - padding: 0, - marginRight: 4 - } -}; - -const variants = { - initial: { - opacity: 0 - }, - animate: { - opacity: 1, - transition: { - duration: 0.7 - } - }, - exit: { - opacity: 0, - transition: { - duration: 0.3 - } - } -}; - -const IDStrategyMappings: Record = { - PRIMARY_KEY: i18next.t('addition.constant.primary-key-id'), - AUTOMATIC: i18next.t('addition.constant.automatic-generation'), - CUSTOMIZE_STRING: i18next.t('addition.constant.custom-string'), - CUSTOMIZE_NUMBER: i18next.t('addition.constant.custom-number'), - CUSTOMIZE_UUID: i18next.t('addition.constant.custom-uuid') -}; - -const propertyIndexTypeMappings: Record = { - SECONDARY: i18next.t('addition.menu.secondary-index'), - RANGE: i18next.t('addition.menu.range-index'), - SEARCH: i18next.t('addition.menu.full-text-index') -}; - -const VertexTypeList: React.FC = observer(() => { - const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - const { metadataPropertyStore, vertexTypeStore } = metadataConfigsRootStore; - const [preLoading, switchPreLoading] = useState(true); - const [sortOrder, setSortOrder] = useState(''); - const [selectedRowKeys, mutateSelectedRowKeys] = useState([]); - const [isShowModal, switchShowModal] = useState(false); - const [isAddProperty, switchIsAddProperty] = useState(false); - const [isEditVertex, switchIsEditVertex] = useState(false); - const [ - deleteExistPopIndexInDrawer, - setDeleteExistPopIndexInDrawer - ] = useState(null); - const [ - deleteAddedPopIndexInDrawer, - setDeleteAddedPopIndexInDrawer - ] = useState(null); - const [, setLocation] = useLocation(); - - const dropdownWrapperRef = useRef(null); - const deleteWrapperInDrawerRef = useRef(null); - - const isLoading = - preLoading || - vertexTypeStore.requestStatus.fetchVertexTypeList === 'pending'; - - const currentSelectedRowKeys = intersection( - selectedRowKeys, - vertexTypeStore.vertexTypes.map(({ name }) => name) - ); - - // need useCallback to stop infinite callings of useEffect - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - // if clicked element is not on dropdown, collpase it - if ( - isEditVertex && - isAddProperty && - dropdownWrapperRef.current && - !dropdownWrapperRef.current.contains(e.target as Element) - ) { - switchIsAddProperty(false); - } - - if ( - (deleteExistPopIndexInDrawer || deleteAddedPopIndexInDrawer) && - deleteWrapperInDrawerRef.current && - !deleteWrapperInDrawerRef.current.contains(e.target as Element) - ) { - setDeleteExistPopIndexInDrawer(null); - setDeleteAddedPopIndexInDrawer(null); - } - }, - [deleteExistPopIndexInDrawer, deleteAddedPopIndexInDrawer, isAddProperty] - ); - - const handleSelectedTableRow = (newSelectedRowKeys: string[]) => { - mutateSelectedRowKeys(newSelectedRowKeys); - }; - - const handleCloseDrawer = () => { - switchIsAddProperty(false); - switchIsEditVertex(false); - vertexTypeStore.selectVertexType(null); - // clear mutations in - vertexTypeStore.resetEditedSelectedVertexType(); - }; - - const handleSortClick = () => { - switchPreLoading(true); - - if (sortOrder === 'descend') { - vertexTypeStore.mutatePageSort('asc'); - setSortOrder('ascend'); - } else { - vertexTypeStore.mutatePageSort('desc'); - setSortOrder('descend'); - } - - vertexTypeStore.fetchVertexTypeList(); - }; - - const batchDeleteProperties = async () => { - if ( - values(currentSelectedRowKeys).every( - (key) => vertexTypeStore.vertexTypeUsingStatus?.[key] - ) - ) { - Message.error({ - content: t('addition.message.no-can-delete-vertex-type'), - size: 'medium', - showCloseIcon: false - }); - - return; - } - - switchShowModal(false); - // need to set a copy in store since local row key state would be cleared - vertexTypeStore.mutateSelectedVertexTypeNames(currentSelectedRowKeys); - // mutateSelectedRowKeys([]); - await vertexTypeStore.deleteVertexType(currentSelectedRowKeys); - - if (vertexTypeStore.requestStatus.deleteVertexType === 'success') { - Message.success({ - content: t('addition.common.del-success'), - size: 'medium', - showCloseIcon: false - }); - - mutateSelectedRowKeys( - without(selectedRowKeys, ...currentSelectedRowKeys) - ); - - await vertexTypeStore.fetchVertexTypeList(); - - // fetch previous page data if it's empty - if ( - vertexTypeStore.requestStatus.fetchVertexTypeList === 'success' && - size(vertexTypeStore.vertexTypes) === 0 && - vertexTypeStore.vertexListPageConfig.pageNumber > 1 - ) { - vertexTypeStore.mutatePageNumber( - vertexTypeStore.vertexListPageConfig.pageNumber - 1 - ); - - vertexTypeStore.fetchVertexTypeList(); - } - - return; - } - - if (vertexTypeStore.requestStatus.deleteVertexType === 'failed') { - Message.error({ - content: vertexTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - } - }; - - const columnConfigs = [ - { - title: t('addition.vertex.vertex-type-name'), - dataIndex: 'name', - sorter: true, - sortOrder, - width: '20%', - render(text: string, records: any[], index: number) { - return ( -
{ - vertexTypeStore.selectVertexType(index); - - // check also need style infos - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - style: { - color: vertexTypeStore.selectedVertexType!.style.color, - icon: null, - size: vertexTypeStore.selectedVertexType!.style.size, - display_fields: vertexTypeStore.selectedVertexType!.style - .display_fields - } - }); - }} - > - {text} -
- ); - } - }, - { - title: t('addition.common.association-property'), - dataIndex: 'properties', - width: '20%', - render(properties: { name: string; nullable: boolean }[]) { - const joinedProperties = - properties.length !== 0 - ? properties.map(({ name }) => name).join('; ') - : '-'; - - return ( -
- {joinedProperties} -
- ); - } - }, - { - title: t('addition.common.id-strategy'), - dataIndex: 'id_strategy', - width: '10%', - render(text: string) { - return ( -
- {IDStrategyMappings[text]} -
- ); - } - }, - { - title: t('addition.common.primary-key-property'), - dataIndex: 'primary_keys', - width: '10%', - render(properties: string[]) { - const joinedProperties = - properties.length !== 0 ? properties.join('; ') : '-'; - - return ( -
- {joinedProperties} -
- ); - } - }, - { - title: t('addition.menu.type-index'), - dataIndex: 'open_label_index', - width: '10%', - render(value: boolean) { - return ( - - ); - } - }, - { - title: t('addition.common.property-index'), - dataIndex: 'property_indexes', - width: '17%', - render(indexes: { name: string; type: string; fields: string[] }[]) { - const joindedIndexes = - indexes.length !== 0 - ? indexes.map(({ name }) => name).join('; ') - : '-'; - - return ( -
- {joindedIndexes} -
- ); - } - }, - { - title: t('addition.operate.operate'), - dataIndex: 'manipulation', - width: '13%', - render(_: any, records: VertexType, index: number) { - return ( - - ); - } - } - ]; - - const metadataDrawerOptionClass = classnames({ - 'metadata-drawer-options': true, - 'metadata-drawer-options-disabled': isEditVertex - }); - - useEffect(() => { - setTimeout(() => { - switchPreLoading(false); - }, 500); - }, [sortOrder]); - - useEffect(() => { - return () => { - const messageComponents = document.querySelectorAll( - '.new-fc-one-message' - ) as NodeListOf; - - messageComponents.forEach((messageComponent) => { - messageComponent.style.display = 'none'; - }); - }; - }); - - useEffect(() => { - if (metadataConfigsRootStore.currentId !== null) { - metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); - vertexTypeStore.fetchVertexTypeList(); - } - - return () => { - vertexTypeStore.dispose(); - }; - }, [ - metadataPropertyStore, - metadataConfigsRootStore.currentId, - vertexTypeStore - ]); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - if (vertexTypeStore.currentTabStatus === 'new') { - return ; - } - - if (vertexTypeStore.currentTabStatus === 'reuse') { - return ; - } - - return ( - -
-
- - -
- {size(currentSelectedRowKeys) !== 0 && ( -
-
- {t('addition.message.selected')} - {size(currentSelectedRowKeys)} - {t('addition.common.term')} -
- - {t('addition.common.close')} { - mutateSelectedRowKeys([]); - }} - /> -
- )} -
rowData.name} - locale={{ - emptyText: ( - } - /> - ) - }} - rowSelection={{ - selectedRowKeys, - onChange: handleSelectedTableRow - }} - onSortClick={handleSortClick} - dataSource={isLoading ? [] : vertexTypeStore.vertexTypes} - pagination={ - isLoading - ? null - : { - hideOnSinglePage: false, - pageNo: vertexTypeStore.vertexListPageConfig.pageNumber, - pageSize: 10, - showSizeChange: false, - showPageJumper: false, - total: vertexTypeStore.vertexListPageConfig.pageTotal, - onPageNoChange: (e: React.ChangeEvent) => { - // mutateSelectedRowKeys([]); - vertexTypeStore.mutatePageNumber(Number(e.target.value)); - vertexTypeStore.fetchVertexTypeList(); - } - } - } - /> - - { - switchShowModal(false); - }} - > -
-
- {t('addition.common.del-comfirm')} - {t('addition.common.close')} { - switchShowModal(false); - }} - /> -
-
- {t('addition.vertex.using-cannot-delete-confirm')} -
-
- {t('addition.message.long-time-notice')} -
-
) { - return ( - - {text} - - ); - } - }, - { - title: t('addition.common.status'), - dataIndex: 'status', - render(isUsing: boolean) { - return ( -
- {isUsing - ? t('addition.common.in-use') - : t('addition.common.not-used')} -
- ); - } - } - ]} - dataSource={currentSelectedRowKeys.map((name) => { - return { - name, - status: - vertexTypeStore.vertexTypeUsingStatus !== null && - // data may have some delay which leads to no matching propety value - !!vertexTypeStore.vertexTypeUsingStatus[name] - }; - })} - pagination={false} - /> - - - - { - if (!isEditVertex) { - switchIsEditVertex(true); - vertexTypeStore.validateEditVertexType(); - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - style: { - color: vertexTypeStore.selectedVertexType!.style.color, - icon: null, - size: vertexTypeStore.selectedVertexType!.style.size, - display_fields: vertexTypeStore.selectedVertexType!.style - .display_fields - } - }); - } else { - await vertexTypeStore.updateVertexType(); - - if ( - vertexTypeStore.requestStatus.updateVertexType === 'failed' - ) { - Message.error({ - content: vertexTypeStore.errorMessage, - size: 'medium', - showCloseIcon: false - }); - - return; - } - - if ( - vertexTypeStore.requestStatus.updateVertexType === 'success' - ) { - if ( - isEmpty( - vertexTypeStore.editedSelectedVertexType - .append_property_indexes - ) - ) { - Message.success({ - content: t('addition.operate.modify-success'), - size: 'medium', - showCloseIcon: false - }); - } else { - Message.success({ - content: ( -
-
- {t('addition.common.save-scuccess')} -
-
- {t('addition.message.index-long-time-notice')} -
-
{ - setLocation( - `/graph-management/${metadataConfigsRootStore.currentId}/async-tasks` - ); - }} - > - {t('addition.operate.view-task-management')} -
-
- ), - duration: 60 * 60 * 24 - }); - } - } - - switchIsEditVertex(false); - vertexTypeStore.selectVertexType(null); - vertexTypeStore.fetchVertexTypeList(); - vertexTypeStore.resetEditedSelectedVertexType(); - } - }} - key="drawer-manipulation" - > - {isEditVertex - ? t('addition.common.save') - : t('addition.common.edit')} - , - - ]} - > - {!isEmpty(vertexTypeStore.selectedVertexType) && ( -
-
- {t('addition.menu.base-info')} -
-
-
- {t('addition.vertex.vertex-type-name')}: -
-
- {vertexTypeStore.selectedVertexType!.name} -
-
-
-
- - {t('addition.vertex.vertex-style')}: - -
-
- -
-
- -
-
-
-
- {t('addition.common.id-strategy')}: -
- { - IDStrategyMappings[ - vertexTypeStore.selectedVertexType!.id_strategy - ] - } -
-
-
- {t('addition.common.association-property')}: -
-
-
- {t('addition.common.property')} - {t('addition.common.allow-null')} -
- {vertexTypeStore.selectedVertexType!.properties.map( - ({ name, nullable }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditVertex && - vertexTypeStore.editedSelectedVertexType.append_properties.map( - ({ name }) => ( -
-
{name}
-
- -
-
- ) - )} - {isEditVertex && ( -
{ - switchIsAddProperty(!isAddProperty); - }} - > - - {t('addition.common.add-property')} - - toogleAddProperties -
- )} - {isEditVertex && isAddProperty && ( -
- {metadataPropertyStore.metadataProperties - .filter( - (property) => - vertexTypeStore.selectedVertexType!.properties.find( - ({ name }) => name === property.name - ) === undefined - ) - .map((property) => ( -
- - - propertyIndex === property.name - ) !== -1 - } - onChange={() => { - const addedPropertiesInSelectedVertextType = - vertexTypeStore.addedPropertiesInSelectedVertextType; - - addedPropertiesInSelectedVertextType.has( - property.name - ) - ? addedPropertiesInSelectedVertextType.delete( - property.name - ) - : addedPropertiesInSelectedVertextType.add( - property.name - ); - - vertexTypeStore.mutateEditedSelectedVertexType( - { - ...vertexTypeStore.editedSelectedVertexType, - append_properties: [ - ...addedPropertiesInSelectedVertextType - ].map((propertyName) => { - const currentProperty = vertexTypeStore.newVertexType.properties.find( - ({ name }) => name === propertyName - ); - - return { - name: propertyName, - nullable: !isUndefined( - currentProperty - ) - ? currentProperty.nullable - : true - }; - }) - } - ); - }} - > - {property.name} - - -
- ))} -
- )} -
-
-
-
- {t('addition.common.primary-key-property')}: -
- {vertexTypeStore.selectedVertexType!.primary_keys.join(';')} -
-
-
- - {t('addition.vertex.vertex-display-content')}: - -
- {isEditVertex ? ( - - ) : ( -
- {vertexTypeStore.selectedVertexType?.style.display_fields - .map((field) => - formatVertexIdText( - field, - t('addition.function-parameter.vertex-id') - ) - ) - .join('-')} -
- )} -
- -
- {t('addition.edge.index-info')} -
-
-
- {t('addition.menu.type-index')}: -
- -
-
-
- {t('addition.common.property-index')}: -
-
- {(vertexTypeStore.selectedVertexType!.property_indexes - .length !== 0 || - vertexTypeStore.editedSelectedVertexType - .append_property_indexes.length !== 0) && ( -
- {t('addition.edge.index-name')} - {t('addition.edge.index-type')} - {t('addition.common.property')} -
- )} - {vertexTypeStore - .selectedVertexType!.property_indexes.filter( - (propertyIndex) => - isUndefined( - vertexTypeStore.editedSelectedVertexType.remove_property_indexes.find( - (removedPropertyName) => - removedPropertyName === propertyIndex.name - ) - ) - ) - .map(({ name, type, fields }, index) => { - return ( -
-
{name}
-
{propertyIndexTypeMappings[type]}
-
- - {fields - .map((field, index) => index + 1 + '.' + field) - .join(';')} - - - {isEditVertex && ( - -

- {t( - 'addition.message.property-del-confirm' - )} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const removedPropertyIndexes = cloneDeep( - vertexTypeStore - .editedSelectedVertexType - .remove_property_indexes - ); - - removedPropertyIndexes.push( - vertexTypeStore.selectedVertexType! - .property_indexes[index].name - ); - - vertexTypeStore.mutateEditedSelectedVertexType( - { - ...vertexTypeStore.editedSelectedVertexType, - remove_property_indexes: removedPropertyIndexes - } - ); - - setDeleteExistPopIndexInDrawer(null); - vertexTypeStore.validateEditVertexType( - true - ); - }} - > - {t('addition.common.confirm')} -
-
{ - setDeleteExistPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteExistPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> - )} -
-
- ); - })} - {vertexTypeStore.editedSelectedVertexType.append_property_indexes.map( - ({ name, type, fields }, index) => { - return ( -
-
- { - const propertyIndexEntities = cloneDeep( - vertexTypeStore.editedSelectedVertexType - .append_property_indexes - ); - - propertyIndexEntities[index].name = e.value; - - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - append_property_indexes: propertyIndexEntities - }); - }} - originInputProps={{ - onBlur() { - // check is ready to create - vertexTypeStore.validateEditVertexType(); - } - }} - /> -
-
- -
-
- - - -

- {t('addition.message.property-del-confirm')} -

-

- {t('addition.message.index-del-confirm')} -

-
-
{ - const appendPropertyIndexes = cloneDeep( - vertexTypeStore.editedSelectedVertexType! - .append_property_indexes - ); - - appendPropertyIndexes.splice(index, 1); - - vertexTypeStore.mutateEditedSelectedVertexType( - { - ...vertexTypeStore.editedSelectedVertexType, - append_property_indexes: appendPropertyIndexes - } - ); - - setDeleteAddedPopIndexInDrawer(null); - vertexTypeStore.validateEditVertexType( - true - ); - }} - > - {t('addition.common.confirm')} -
-
{ - vertexTypeStore.resetEditedSelectedVertexType(); - setDeleteAddedPopIndexInDrawer(null); - }} - > - {t('addition.common.cancel')} -
-
-
- } - childrenProps={{ - src: CloseIcon, - alt: 'close', - style: { cursor: 'pointer' }, - onClick() { - setDeleteAddedPopIndexInDrawer(index); - } - }} - childrenWrapperElement="img" - /> -
-
- ); - } - )} - {isEditVertex && ( - { - if ( - vertexTypeStore.editedSelectedVertexType - .append_property_indexes.length === 0 || - vertexTypeStore.isEditReady - ) { - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - append_property_indexes: [ - ...vertexTypeStore.editedSelectedVertexType - .append_property_indexes, - { - name: '', - type: '', - fields: [] - } - ] - }); - - vertexTypeStore.validateEditVertexType(true); - } - }} - style={{ - cursor: 'pointer', - color: vertexTypeStore.isEditReady ? '#2b65ff' : '#999' - }} - > - {t('addition.edge.add-group')} - - )} -
- - - )} -
- - - ); -}); - -export interface VertexTypeListManipulation { - vertexName: string; - vertexIndex: number; - switchIsEditVertex: (flag: boolean) => void; -} - -const VertexTypeListManipulation: React.FC = observer( - ({ vertexName, vertexIndex, switchIsEditVertex }) => { - const { vertexTypeStore } = useContext(MetadataConfigsRootStore); - const [isPopDeleteModal, switchPopDeleteModal] = useState(false); - const [isDeleting, switchDeleting] = useState(false); - const { t } = useTranslation(); - const deleteWrapperRef = useRef(null); - const isDeleteOrBatchDeleting = - isDeleting || - (vertexTypeStore.requestStatus.deleteVertexType === 'pending' && - vertexTypeStore.selectedVertexTypeNames.includes(vertexName)); - - const handleOutSideClick = useCallback( - (e: MouseEvent) => { - if ( - isPopDeleteModal && - deleteWrapperRef && - deleteWrapperRef.current && - !deleteWrapperRef.current.contains(e.target as Element) - ) { - switchPopDeleteModal(false); - } - }, - [deleteWrapperRef, isPopDeleteModal] - ); - - useEffect(() => { - document.addEventListener('click', handleOutSideClick, false); - - return () => { - document.removeEventListener('click', handleOutSideClick, false); - }; - }, [handleOutSideClick]); - - return ( -
- { - vertexTypeStore.selectVertexType(vertexIndex); - vertexTypeStore.validateEditVertexType(true); - switchIsEditVertex(true); - - vertexTypeStore.mutateEditedSelectedVertexType({ - ...vertexTypeStore.editedSelectedVertexType, - style: { - color: vertexTypeStore.selectedVertexType!.style.color, - icon: null, - size: vertexTypeStore.selectedVertexType!.style.size, - display_fields: vertexTypeStore.selectedVertexType!.style - .display_fields - } - }); - }} - > - {t('addition.common.edit')} - -
- {isDeleteOrBatchDeleting && ( - - )} - - {vertexTypeStore.vertexTypeUsingStatus && - vertexTypeStore.vertexTypeUsingStatus[vertexName] ? ( -

- {t('addition.vertex.using-cannot-delete')} -

- ) : ( - <> -

- {t('addition.vertex.del-vertex-confirm')} -

-

{t('addition.vertex.del-vertex-confirm-again')}

-

{t('addition.message.long-time-notice')}

-
- - -
- - )} -
- } - childrenProps={{ - className: 'metadata-properties-manipulation', - title: isDeleteOrBatchDeleting - ? t('addition.operate.del-ing') - : t('addition.common.del'), - async onClick() { - if (isDeleteOrBatchDeleting) { - return; - } - - await vertexTypeStore.checkIfUsing([vertexName]); - - if (vertexTypeStore.requestStatus.checkIfUsing === 'success') { - switchPopDeleteModal(true); - } - } - }} - > - {isDeleteOrBatchDeleting - ? t('addition.operate.del-ing') - : t('addition.common.del')} - -
- - ); - } -); - -const EmptyVertxTypeHints: React.FC = observer(() => { - const { vertexTypeStore } = useContext(MetadataConfigsRootStore); - const { t } = useTranslation(); - - return ( -
- Add new property -
- {t('addition.vertex.no-vertex-type-desc')} -
-
- - -
-
- ); -}); - -export default VertexTypeList; diff --git a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/index.ts b/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/index.ts deleted file mode 100644 index acd50f8f0..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/graph-management/metadata-configs/vertex-type/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import VertexTypeList from './VertexTypeList'; -import NewVertexType from './NewVertexType'; - -export { NewVertexType, VertexTypeList }; diff --git a/hugegraph-hubble/hubble-fe/src/components/hubble-ui/index.tsx b/hugegraph-hubble/hubble-fe/src/components/hubble-ui/index.tsx deleted file mode 100644 index f856514e6..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/hubble-ui/index.tsx +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/* eslint-disable */ -import { - Transfer as TransferAntD, - Popover, - Pagination as PaginationAntD, - Steps as StepsAntD, - Progress as ProgressAntD, - Checkbox as CheckboxAntD, - Menu as MenuAntD, - Spin, - Breadcrumb as BreadcrumbAntD, - Calendar as CalendarAntD, - InputNumber, - Switch as SwitchAntd, - Table as TableAntD, - Radio as RadioAntD, - Tooltip as TooltipAntD, - Alert as AlertAntD, - Button as ButtonAntD, - Modal as ModalAntD, - Drawer as DrawerAntD, - Input as InputAntD, - message, - Select as SelectAntD, - Dropdown as DropdownAntd -} from 'antd'; -import * as React from 'react'; - -// In order to make the project run, let the components of antd replace baiduUI -// Special Note: All check boxes can be selected, but some check boxes cannot see -// the selection content, but it does not affect the submission. If you need to see -// the selection, you need to modify the value property of the corresponding Select -// component. There is no uniform modification here - -const changeSize = (props: any): any => { - let _size = props.size; - if (_size === 'medium') { - _size = 'middle'; - } - if (!_size) { - _size = 'small'; - } - return { - ...props, - size: _size - }; -}; - -export const Alert = (props: any) => { - return ; -}; - -export const Button = (props: any) => { - return {props.children}; -}; - -export const Modal = ModalAntD; - -export const Drawer = (props: any) => { - return {props.children}; -}; - -export const Input = (props: any) => { - let _blur = () => {}; - if (props.originInputProps && props.originInputProps.onBlur) { - _blur = props.originInputProps.onBlur; - } - // change e.value to eventTarget.currentTarget - const _props = { - ...props, - onChange: (e: any) => { - props.onChange({ - value: e.currentTarget.value - }); - } - }; - return ( -
- - {props.errorMessage ? ( -
- {props.errorMessage} -
- ) : ( - '' - )} -
- ); -}; -Input.Search = (props: any) => { - return ( - - ); -}; - -export const Message = { - info: (data: any) => { - message.info(data.content); - }, - success: (data: any) => { - message.success(data.content); - }, - error: (data: any) => { - message.error(data.content); - }, - warning: (data: any) => { - message.warning(data.content); - }, - loading: (data: any) => { - message.loading(data.content); - } -}; - -export const Select: any = (props: any) => { - return ( - - {props.children} - - ); -}; -Select.Option = SelectAntD.Option; -export const Tooltip: any = TooltipAntD; - -export const Dropdown: any = { - Button(props: any) { - let _overlay: any = []; - if (props.options) { - _overlay = ( - - {props.options.map((item: any) => ( - - {item.label} - - ))} - - ); - } - - return ( - {}) - }} - > - {props.title} - - ); - } -}; -export const Radio: any = RadioAntD; - -export const Table: any = (props: any) => { - let pagination = {}; - let pageChangerTag = false; - if (props.pagination) { - pagination = { - ...props.pagination, - onChange: (page: any, size: any) => { - if (pageChangerTag) { - return; - } - props.pagination.onPageNoChange({ - target: { - value: page - } - }); - }, - showQuickJumper: props.pagination.showPageJumper, - current: props.pagination.pageNo, - onShowSizeChange: (e: any, size: any) => { - pageChangerTag = true; - props.pagination.onPageSizeChange({ - target: { - value: size - } - }); - setTimeout(() => { - pageChangerTag = false; - }); - } - }; - } - let _handleChange: any = props.onChange || (() => {}); - // able to sort - if (!props.onChange && props.onSortClick) { - _handleChange = props.onSortClick; - } - return ( - - {props.children} - - ); -}; - -export const Switch: any = (props: any) => { - return ( - - ); -}; - -export const NumberBox: any = InputNumber; - -export const Calendar = (props: any) => { - props.onSelect = props.onSelectDay; - return ; -}; -export const Breadcrumb: any = BreadcrumbAntD; - -export const Loading: any = Spin; - -export const Menu: any = MenuAntD; - -export const Checkbox: any = CheckboxAntD; - -export const Progress: any = ProgressAntD; - -export const Steps: any = StepsAntD; - -export const Embedded: any = (props: any) => { - return ( - - {props.children} - - ); -}; -export const Pagination = (props: any) => { - return ( - - ); -}; - -export const PopLayer: any = (props: any) => { - return ( - {props.children} - ); -}; - -export const Transfer: any = (props: any) => { - const _treeName = props.treeName; - const dataSource = props.dataSource || []; - const allDataMap = props.allDataMap; - if (allDataMap) { - for (const key in allDataMap) { - dataSource.push(allDataMap[key]); - } - } - return ( - { - props.handleSelect(targetKeys); - }, - titles: [`可选${_treeName}`, `已选${_treeName}`], - render: (item) => `${item.title}` - }} - > - {props.children} - - ); -}; diff --git a/hugegraph-hubble/hubble-fe/src/components/hubble-ui/src/index.less b/hugegraph-hubble/hubble-fe/src/components/hubble-ui/src/index.less deleted file mode 100644 index a7e8f030e..000000000 --- a/hugegraph-hubble/hubble-fe/src/components/hubble-ui/src/index.less +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -@import '~antd/dist/antd.css'; -.new-fc-one-input-count-visible { - display: inline-block; -} - -.new-fc-one-input-count-error { - color: #e64552; -} - -.new-fc-one-input-all-container, -.new-fc-one-input-all-container .new-fc-one-input-detail { - display: inline-block; - position: relative; -} - -.new-fc-one-input-all-container-error .new-fc-one-input { - border: 1px solid #e64552; - background-color: #fff; - color: #333; -} - -.new-fc-one-input-all-container-error .new-fc-one-input:active, -.new-fc-one-input-all-container-error .new-fc-one-input:focus, -.new-fc-one-input-all-container-error .new-fc-one-input:hover { - outline: 0; - border-color: #e64552; -} - -.new-fc-one-input-all-container-error .new-fc-one-input:focus { - box-shadow: 0 0 0 2px rgba(230, 69, 82, 0.2); -} - -.new-fc-one-input-error { - color: #e64552; -} - -.new-fc-one-input-error-bottom { - margin-top: 8px; -} - -.new-fc-one-input-error-right { - display: inline-block; - margin-left: 8px; -} - -.new-fc-one-input-error-layer { - line-height: 100%; - z-index: 2; - box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); - background: #fff; - position: absolute; - left: 0; - display: inline-block; - padding: 16px; - color: #e64552; -} - -.new-fc-one-input-error-layer:before { - content: ''; - width: 0; - height: 0; - left: 16px; - border: 8px solid transparent; - border-bottom-color: #fff; - top: -12px; - position: absolute; -} - -.new-fc-one-input-group-addon > div { - border: 1px solid #e0e0e0 !important; -} - -.new-fc-one-input-group-addon-before > div { - border-right: 0 !important; -} - -.new-fc-one-input-group-addon-after > div { - border-left: 0 !important; -} - -.new-fc-one-input-group { - display: flex; -} - -.new-fc-one-input-group .new-fc-one-input { - border-radius: 0; -} diff --git a/hugegraph-hubble/hubble-fe/src/hooks/index.ts b/hugegraph-hubble/hubble-fe/src/hooks/index.ts deleted file mode 100644 index e0bc572e4..000000000 --- a/hugegraph-hubble/hubble-fe/src/hooks/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import useMultiKeyPress from './useMultiKeyPress'; -import useInitDataImport from './useInitDataImport'; -import useLocationWithConfirmation from './useLocationWithConfirmation'; - -export { useMultiKeyPress, useInitDataImport, useLocationWithConfirmation }; diff --git a/hugegraph-hubble/hubble-fe/src/hooks/useInitDataImport.tsx b/hugegraph-hubble/hubble-fe/src/hooks/useInitDataImport.tsx deleted file mode 100644 index 6140b40e1..000000000 --- a/hugegraph-hubble/hubble-fe/src/hooks/useInitDataImport.tsx +++ /dev/null @@ -1,237 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { useState, useEffect, useContext } from 'react'; -import { useRoute, useLocation } from 'wouter'; -import { isNull, isEmpty, isUndefined } from 'lodash-es'; - -import { - GraphManagementStoreContext, - ImportManagerStoreContext, - DataImportRootStoreContext -} from '../stores'; - -export default function useInitDataImport() { - const graphManagementStore = useContext(GraphManagementStoreContext); - const importManagerStore = useContext(ImportManagerStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const { dataMapStore, serverDataImportStore } = dataImportRootStore; - const [initReady, setInitReady] = useState( - !isEmpty(importManagerStore.importJobList) - ); - const [, setLocation] = useLocation(); - - const [, params] = useRoute( - '/graph-management/:id/data-import/import-manager/:jobId/import-tasks/:status' - ); - - useEffect(() => { - const init = async (params: Record) => { - const { id, jobId, status } = params!; - // sidebar data - graphManagementStore.fetchIdList(); - - // init importManagerStore - importManagerStore.setCurrentId(Number(id)); - // import job list - await importManagerStore.fetchImportJobList(); - importManagerStore.setSelectedJob(Number(jobId)); - - // init dataImportRootStore - dataImportRootStore.setCurrentId(Number(id)); - dataImportRootStore.setCurrentJobId(Number(jobId)); - - await dataMapStore.fetchDataMaps(); - - const job = importManagerStore.importJobList.find( - ({ id: _jobId }) => _jobId === Number(jobId) - ); - - if (isUndefined(job)) { - return; - } - - const defautlSelectedFileId = dataMapStore.fileMapInfos.filter( - ({ file_status }) => file_status === 'COMPLETED' - )[0]?.id; - - dataImportRootStore.setCurrentStatus(job.job_status); - - if (status === 'upload') { - if (job.job_status === 'DEFAULT' || job.job_status === 'UPLOADING') { - } - - if (job.job_status === 'MAPPING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - - // setLocation( - // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/mapping` - // ); - } - - if (job.job_status === 'SETTING' || job.job_status === 'LOADING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - serverDataImportStore.switchIrregularProcess(true); - - // setLocation( - // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` - // ); - } - - if (job.job_status === 'LOADING') { - dataMapStore.switchLock(true); - serverDataImportStore.switchImportConfigReadOnly(true); - - setLocation( - `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` - ); - } - - if (job.job_status === 'SUCCESS' || job.job_status === 'FAILED') { - setLocation(`/graph-management/${id}/data-import/import-manager`); - importManagerStore.setSelectedJob(null); - } - } - - if (status === 'mapping') { - if (job.job_status === 'DEFAULT' || job.job_status === 'UPLOADING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - - // setLocation( - // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/mapping` - // ); - } - - if (job.job_status === 'MAPPING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - } - - if (job.job_status === 'SETTING' || job.job_status === 'LOADING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - serverDataImportStore.switchIrregularProcess(true); - - // setLocation( - // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` - // ); - } - - if (job.job_status === 'LOADING') { - dataMapStore.switchLock(true); - serverDataImportStore.switchImportConfigReadOnly(true); - setLocation( - `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` - ); - } - - if (job.job_status === 'SUCCESS' || job.job_status === 'FAILED') { - setLocation(`/graph-management/${id}/data-import/import-manager`); - importManagerStore.setSelectedJob(null); - } - } - - if (status === 'loading') { - if (job.job_status === 'DEFAULT' || job.job_status === 'UPLOADING') { - setLocation( - `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/upload` - ); - } - - if (job.job_status === 'MAPPING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - - setLocation( - `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/mapping` - ); - } - - if (job.job_status === 'SETTING' || job.job_status === 'LOADING') { - dataMapStore.setSelectedFileId(defautlSelectedFileId); - dataMapStore.setSelectedFileInfo(); - dataMapStore.switchIrregularProcess(true); - - serverDataImportStore.syncImportConfigs( - dataMapStore.selectedFileInfo!.load_parameter - ); - serverDataImportStore.switchIrregularProcess(true); - } - - if (job.job_status === 'SETTING') { - dataMapStore.switchReadOnly(false); - } - - if (job.job_status === 'LOADING') { - dataMapStore.switchLock(true); - serverDataImportStore.switchImportConfigReadOnly(true); - } - - if (job.job_status === 'SUCCESS' || job.job_status === 'FAILED') { - setLocation(`/graph-management/${id}/data-import/import-manager`); - importManagerStore.setSelectedJob(null); - } - } - - setInitReady(true); - }; - - // if importJobList is empty, users may refresh their page - // if fileMapInfos is empty, users may click back/forward button on browser - if ( - !isNull(params) && - (isEmpty(importManagerStore.importJobList) || - isNull(importManagerStore.selectedJob)) - ) { - init(params); - } - }, [ - params?.status, - importManagerStore.importJobList, - importManagerStore.selectedJob?.id - ]); - - return initReady; -} diff --git a/hugegraph-hubble/hubble-fe/src/hooks/useLocationWithConfirmation.tsx b/hugegraph-hubble/hubble-fe/src/hooks/useLocationWithConfirmation.tsx deleted file mode 100644 index 27eff539d..000000000 --- a/hugegraph-hubble/hubble-fe/src/hooks/useLocationWithConfirmation.tsx +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { useContext } from 'react'; -import useLocation from 'wouter/use-location'; -import { last } from 'lodash-es'; - -import i18next from '../i18n'; -import { - ImportManagerStoreContext, - DataImportRootStoreContext -} from '../stores'; - -export default function useLocationWithConfirmation() { - const importManagerStore = useContext(ImportManagerStoreContext); - const dataImportRootStore = useContext(DataImportRootStoreContext); - const [location, setLocation] = useLocation(); - const status = last(location.split('/')); - - return [ - location, - (newLocation: string) => { - let perfomNavigation = true; - const category = last(newLocation.split('/')); - - if ( - status === 'upload' && - category === 'import-manager' && - dataImportRootStore.fileUploadTasks.some( - ({ status }) => status === 'uploading' - ) - ) { - perfomNavigation = window.confirm( - i18next.t('server-data-import.hint.confirm-navigation') - ); - } - - if (perfomNavigation) { - if ( - ['upload', 'mapping', 'loading'].includes(String(status)) && - category === 'import-manager' - ) { - importManagerStore.setSelectedJob(null); - importManagerStore.fetchImportJobList(); - } - - setLocation(newLocation); - } - } - ]; -} diff --git a/hugegraph-hubble/hubble-fe/src/hooks/useMultiKeyPress.tsx b/hugegraph-hubble/hubble-fe/src/hooks/useMultiKeyPress.tsx deleted file mode 100644 index c206df56a..000000000 --- a/hugegraph-hubble/hubble-fe/src/hooks/useMultiKeyPress.tsx +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { useState, useEffect } from 'react'; - -export default function useMultiKeyPress() { - const [keysPressed, setKeyPressed] = useState>(new Set()); - - const keydownHandler = (e: KeyboardEvent) => { - // use e.key here may cause some unexpected behavior with shift key - setKeyPressed((prev) => new Set(prev.add(e.code))); - }; - - const keyupHandler = (e: KeyboardEvent) => { - // use e.key here may cause some unexpected behavior with shift key - if (navigator.platform.includes('Mac') && e.code.includes('Meta')) { - // weired, like above we need to mutate keysPressed first - keysPressed.clear(); - setKeyPressed(new Set()); - return; - } - - keysPressed.delete(e.code); - setKeyPressed(new Set(keysPressed)); - }; - - useEffect(() => { - window.addEventListener('keydown', keydownHandler); - window.addEventListener('keyup', keyupHandler); - - return () => { - window.removeEventListener('keydown', keydownHandler); - window.removeEventListener('keyup', keyupHandler); - }; - }, []); - - return keysPressed; -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/index.ts b/hugegraph-hubble/hubble-fe/src/i18n/index.ts deleted file mode 100644 index 4ecdfc2d1..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/index.ts +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import i18n from 'i18next'; -import { initReactI18next } from 'react-i18next'; - -import { zhCNResources, enUSResources } from './resources'; - -i18n.use(initReactI18next).init({ - lng: localStorage.getItem('languageType') || 'zh-CN', - fallbackLng: 'zh-CN', - - resources: { - 'zh-CN': zhCNResources, - 'en-US': enUSResources - }, - - interpolation: { - escapeValue: false // not needed for react as it escapes by default - } -}); - -export default i18n; diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/AsyncTasks.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/AsyncTasks.json deleted file mode 100644 index ce2848f4c..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/AsyncTasks.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "async-tasks": { - "title": "任务管理", - "placeholders": { - "search": "请输入任务ID或名称搜索" - }, - "table-column-title": { - "task-id": "任务ID", - "task-name": "任务名称", - "task-type": "任务类型", - "create-time": "创建时间", - "time-consuming": "耗时", - "status": "状态", - "manipulation": "操作" - }, - "table-filters": { - "task-type": { - "all": "全部", - "gremlin": "Gremlin任务", - "algorithm": "算法任务", - "remove-schema": "删除元数据", - "create-index": "创建索引", - "rebuild-index": "重建索引" - }, - "status": { - "all": "全部", - "scheduling": "调度中", - "scheduled": "排队中", - "queued": "排队中", - "running": "运行中", - "restoring": "恢复中", - "success": "成功", - "failed": "失败", - "cancelling": "已取消", - "cancelled": "已取消" - } - }, - "table-selection": { - "selected": "已选{{number}}项", - "delete-batch": "批量删除" - }, - "manipulations": { - "abort": "终止", - "aborting": "终止中", - "delete": "删除", - "check-result": "查看结果", - "check-reason": "查看原因" - }, - "hint": { - "delete-confirm": "删除确认", - "delete-description": "是否确认删除该任务?删除后无法恢复,请谨慎操作", - "delete-succeed": "删除成功", - "delete-batch-confirm": "批量删除", - "delete-batch-description": "确认删除以下任务?删除后无法恢复,请谨慎操作", - "delete": "删除", - "cancel": "取消", - "no-data": "暂无数据", - "empty": "您暂时还没有任何任务", - "select-disabled": "任务{{id}}无法被选中删除", - "check-details": "查看详情", - "creation-failed": "创建失败" - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json deleted file mode 100644 index d6b2f5455..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "data-import": "数据导入", - "import-task": "导入任务", - "map-templates": "映射模板" -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/addition.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/addition.json deleted file mode 100644 index d137ee317..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/addition.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "addition": { - "function-parameter": { - "edge-type": "边类型", - "vertex-id": "顶点ID" - }, - "store": { - "required": "必填项", - "item-is-required": "此项为必填项", - "no-match-input-requirements": "不符合输入要求", - "rule1": "请输入字母、数字或特殊字符", - "rule2": "请输入范围在 1-65535 的数字", - "rule3": "必须同时填写用户名和密码", - "rule4": "必须为中英文,数字和下划线", - "illegal-data-format": "非法的数据格式", - "incorrect-time-format": "时间格式不正确", - "cannot-be-empty": "此项不能为空", - "cannot-be-empty1": "该项不能为空", - "same-edge-name-notice": "存在同名边,请输入其它名称", - "same-vertex-name-notice": "存在同名顶点,请输入其它名称", - "same-property-name-notice": "存在同名属性,请输入其它名称", - "same-index-name-notice": "存在同名属性索引,请输入其它名称", - "network-error": "网络异常,请稍后重试" - }, - "constant": { - "primary-key-id": "主键ID", - "automatic-generation": "自动生成", - "custom-string": "自定义字符串", - "custom-number": "自定义数字", - "custom-uuid": "自定义UUID", - "greater-than": "大于", - "greater-than-or-equal": "大于等于", - "less-than": "小于", - "less-than-or-equal": "小于等于", - "equal": "等于" - }, - "menu": { - "chart": "图", - "table": "表格", - "task-id": "任务ID", - "list-mode": "列表模式", - "chart-mode": "图模式", - "secondary-index": "二级索引", - "range-index": "范围索引", - "full-text-index": "全文索引", - "type-index": "类型索引", - "base-info": "基础信息", - "select-reuse-item": "选择复用项", - "confirm-reuse-item": "确认复用项", - "complete-reuse": "完成复用" - }, - "vertex": { - "type-detail": "顶点类型详情", - "edit-type": "编辑顶点类型", - "using-cannot-delete": "当前顶点类型正在使用中,不可删除。", - "using-cannot-delete-confirm": "使用中顶点类型不可删除,确认删除以下未使用顶点类型?", - "del-vertex-confirm": "确认删除此顶点类型?", - "del-vertex-confirm-again": "确认删除此顶点类型?删除后无法恢复,请谨慎操作", - "vertex-type-name": "顶点类型名称", - "vertex-style": "顶点样式", - "vertex-display-content": "顶点展示内容", - "select-vertex-display-content-placeholder": "请选择顶点展示内容", - "create-vertex-type": "创建顶点类型", - "vertex-index": "顶点索引", - "corresponding-vertex-type": "对应顶点类型", - "no-vertex-type-desc": "您暂时还没有任何顶点类型,立即创建" - }, - "edge": { - "display-content": "边展示内容", - "display-content-select-desc": "请选择边展示内容", - "index-info": "索引信息", - "index-name": "索引名称", - "index-type": "索引类型", - "edge-index": "边索引", - "index-type-select-desc": "请选择索引类型", - "property-select-desc": "请选择属性", - "add-group": "新增一组", - "confirm-del-edge-type": "确认删除此边类型?", - "confirm-del-edge-type-again": "确认删除边类型?删除后无法恢复,请谨慎操作", - "confirm-del-edge-careful-notice": "删除后无法恢复,请谨慎操作", - "no-edge-desc": "您暂时还没有任何边类型,立即创建", - "create-edge": "创建边类型", - "multiplexing-existing-type": "复用已有类型", - "multiplexing-edge-type": "复用边类型", - "multiplexing-edge-type-notice": "边类型关联的属性和属性索引、起点类型和终点类型及其关联的属性和属性索引将一同复用", - "verification-result": "校验结果", - "be-verified": "待校验", - "verified-again": "重新校验" - }, - "message": { - "no-can-delete-vertex-type": "无可删除顶点类型", - "no-index-notice": "您暂时还没有任何索引", - "property-create-desc": "您暂时还没有任何属性,立即创建", - "del-unused-property-notice": "使用中属性不可删除,确认删除以下未使用属性?", - "please-enter-keywords": "请输入搜索关键字", - "no-property-can-delete": "无可删除属性", - "no-metadata-notice": "您暂时还没有任何元数据", - "no-vertex-or-edge-notice": "您还未设置顶点类型或边类型", - "no-adjacency-points": "不存在邻接点", - "no-more-points": "不存在更多邻接点", - "please-enter-number": "请输入数字", - "please-enter-string": "请输入字符串", - "please-enter": "请输入", - "no-chart-desc": "无图结果,请查看表格或Json数据", - "no-data-desc": "暂无数据结果", - "data-loading": "数据加载中", - "submit-async-task": "提交异步任务中", - "submit-success": "提交成功", - "submit-fail": "提交失败", - "task-submit-fail": "任务提交失败", - "fail-reason": "失败原因", - "fail-position": "失败位置", - "selected": "已选", - "edge-del-confirm": "确认删除以下边?", - "long-time-notice": "删除元数据耗时较久,详情可在任务管理中查看。", - "index-long-time-notice": "创建索引可能耗时较久,详情可在任务管理中查看", - "property-del-confirm": "确认删除此属性?", - "property-del-confirm-again": "确认删除此属性?删除后无法恢复,请谨慎操作", - "index-del-confirm": "删除索引后,无法根据此属性索引进行查询,请谨慎操作。", - "edge-name-rule": "允许出现中英文、数字、下划线", - "source-type-select-placeholder": "请选择起点类型", - "target-type-select-placeholder": "请选择终点类型", - "select-distinguishing-key-property-placeholder": "请选择区分键属性", - "select-association-key-property-placeholder": "请先选择关联属性", - "index-open-notice": "开启索引会影响使用性能,请按需开启", - "duplicate-name": "有重名", - "dependency-conflict": "依赖冲突", - "already-exist": "已存在", - "pass": "通过", - "select-reuse-graph-placeholder": "请选择要复用的图", - "reuse-complete": "复用完成", - "vertex-type-reuse-success": "已成功复用顶点类型", - "property-using-cannot-delete": "当前属性数据正在使用中,不可删除。", - "reuse-property-success": "已成功复用属性", - "reuse-vertex-type-notice": "顶点类型关联的属性和属性索引将一同复用", - "illegal-vertex": "该顶点是非法顶点,可能是由悬空边导致" - }, - "operate": { - "reuse-vertex-type": "复用顶点类型", - "reuse-existing-property": "复用已有属性", - "reuse-property": "复用属性", - "create-property": "创建属性", - "continue-reuse": "继续复用", - "back-to-view": "返回查看", - "complete": "完成", - "next-step": "下一步", - "previous-step": "上一步", - "rename": "重命名", - "del-ing": "删除中", - "view-task-management": "去任务管理查看", - "batch-del": "批量删除", - "multiplexing": "复用", - "de-multiplexing": "取消复用", - "open": "开", - "close": "关", - "look": "查看", - "view-property": "查看属性", - "filter": "筛选", - "add-filter-item": "添加属性筛选", - "enlarge": "放大", - "narrow": "缩小", - "center": "居中", - "download": "下载", - "exit-full-screen": "退出全屏", - "full-screen": "全屏", - "load-background": "加载背景", - "load-spinner": "加载 spinner", - "rendering": "正在渲染", - "detail": "详情", - "favorite": "收藏", - "favorite-success": "收藏成功", - "load-statement": "加载语句", - "time": "时间", - "name": "名称", - "favorite-statement": "收藏语句", - "favorite-desc": "请输入收藏名称", - "operate": "操作", - "query": "查询", - "hidden": "隐藏", - "modify-name": "修改名称", - "execution-record": "执行记录", - "favorite-queries": "收藏的查询", - "favorite-search-desc": "搜索收藏名称或语句", - "expand-collapse": "展开/收起", - "expand": "展开", - "collapse": "收起", - "favorite-del-desc": "是否确认删除该条收藏语句?", - "input-query-statement": "请输入查询语句", - "query-statement-required": "查询语句不能为空", - "execute-query": "执行查询", - "execute-task": "执行任务", - "execute-ing": "执行中", - "clean": "清空", - "modify-success": "修改成功", - "query-result-desc": "查询模式适合30秒内可返回结果的小规模分析;任务模式适合较长时间返回结果的大规模分析,任务详情可在任务管理中查看" - }, - "common": { - "in-use": "使用中", - "not-used": "未使用", - "status": "状态", - "no-result": "无结果", - "cardinal-number": "基数", - "allow-null": "允许为空", - "allow-multiple-connections": "允许多次连接", - "multiple-connections-notice": "开启后两顶点间允许存在多条该类型的边", - "term": "项", - "in-edge": "入边", - "add-in-edge": "添加入边", - "out-edge": "出边", - "add-out-edge": "添加出边", - "add": "添加", - "value": "值", - "null-value": "空值", - "id-strategy": "ID策略", - "id-value": "ID值", - "id-input-desc": "请输入ID值", - "please-input": "请输入", - "add-success": "添加成功", - "add-fail": "添加失败", - "vertex-type": "顶点类型", - "selected-vertex-type": "已选顶点类型", - "vertex-id": "顶点ID", - "vertex-name": "顶点名称", - "illegal-vertex-desc": "该顶点是非法顶点,可能是由悬空边导致", - "add-vertex": "添加顶点", - "vertex-type-select-desc": "请选择顶点类型", - "edge-type": "边类型", - "selected-edge-type": "已选边类型", - "edge-style": "边样式", - "modify-edge-type": "编辑边类型", - "edge-type-detail": "边类型详情", - "edge-type-name": "边类型名称", - "edge-direction": "边方向", - "edge-type-select-desc": "请选择边类型", - "edge-id": "边ID", - "edge-name": "边名称", - "source": "起点", - "source-type": "起点类型", - "target": "终点", - "target-type": "终点类型", - "rule": "规则", - "property": "属性", - "selected-property": "已选属性", - "property-name": "属性名称", - "add-property": "添加属性", - "association-property": "关联属性", - "association-property-and-type": "关联属性及类型", - "property-index": "属性索引", - "selected-property-index": "已选属性索引", - "property-index-name": "属性索引名称", - "property-value": "属性值", - "required-property": "不可空属性", - "nullable-property": "可空属性", - "primary-key": "主键", - "primary-key-property": "主键属性", - "select-primary-key-property-placeholder": "请选择主键属性", - "distinguishing-key": "区分键", - "distinguishing-key-property": "区分键属性", - "property-input-desc": "请输入属性值", - "del-comfirm": "确认删除", - "ask": "吗?", - "confirm": "确认", - "del-success": "删除成功", - "save-scuccess": "保存成功", - "save-fail": "保存失败", - "save": "保存", - "cancel": "取消", - "more": "更多", - "edit": "编辑", - "del": "删除", - "fold": "折叠", - "open": "展开", - "close": "关闭", - "required": "必填项", - "format-error-desc": "必须以字母开头,允许出现英文、数字、下划线", - "no-matching-results": "无匹配结果", - "no-data": "暂无数据", - "data-type": "数据类型", - "corresponding-type": "对应类型" - }, - "appbar": { - "graph-manager": "图管理" - }, - "graphManagementHeader": { - "graph-manager": "图管理", - "community": "社区版", - "business": "商业版", - "limit-desc": "支持图上限", - "limit-desc1": "图磁盘上限", - "individual": "个", - "input-placeholder": "搜索图名称或ID", - "graph-create": "创建图" - }, - "graphManagementList": { - "save-scuccess": "保存成功", - "graph-del": "删除图", - "graph-del-comfirm-msg": "删除后该图所有配置均不可恢复", - "graph-edit": "编辑图", - "id": "图ID", - "id-desc": "为创建的图设置唯一标识的ID", - "name": "图名称", - "name-desc": "填写需要连接的图的名称", - "host": "主机名", - "port": "端口号", - "port-desc": "请输入端口号", - "username": "用户名", - "password": "密码", - "creation-time": "创建时间", - "visit": "访问" - }, - "graphManagementEmptyList": { - "graph-create": "创建图", - "graph-create-desc": "您暂时还没有任何图,立即创建", - "no-matching-results": "无匹配结果" - }, - "newGraphConfig": { - "graph-create": "创建图", - "create": "创建", - "create-scuccess": "创建成功", - "id": "图ID", - "id-desc": "为创建的图设置唯一标识的ID", - "name": "图名称", - "name-desc": "填写需要连接的图的名称", - "host": "主机名", - "host-desc": "请输入主机名", - "port": "端口号", - "port-desc": "请输入端口号", - "username": "用户名", - "password": "密码", - "not-required-desc": "未设置则无需填写" - }, - "graphManagementSidebar": { - "data-analysis": "数据分析", - "graph-select": "选择图", - "metadata-config": "元数据配置", - "data-import": "数据导入", - "task-management": "任务管理" - }, - "dataAnalyze": { - "cannot-access": "无法访问", - "return-home": "返回首页" - }, - "dataAnalyzeInfoDrawer": { - "edit-details": "编辑详情", - "data-details": "数据详情" - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/common.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/common.json deleted file mode 100644 index 98d821703..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/common.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "common": { - "loading-data": "数据加载中" - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json deleted file mode 100644 index da8577c09..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json +++ /dev/null @@ -1,342 +0,0 @@ -{ - "breadcrumb": { - "first": "导入任务", - "second": "任务详情" - }, - "import-manager": { - "hint": { - "empty-task": "您暂时还没有任何任务,立即创建", - "no-result": "无结果", - "creation-succeed": "创建成功", - "update-succeed": "编辑成功" - }, - "manipulation": { - "create": "创建" - }, - "placeholder": { - "input-job-name": "请输入任务名称搜索", - "input-valid-job-name": "允许出现中英文、数字、下划线", - "input-job-description": "请输入任务备注" - }, - "list-column-title": { - "job-name": "任务名称", - "size": "大小", - "create-time": "创建时间", - "status": "状态", - "time-consuming": "任务耗时", - "manipulation": "操作" - }, - "list-column-status": { - "DEFAULT": "未开始", - "UPLOADING": "未开始", - "MAPPING": "设置中", - "SETTING": "导入中", - "LOADING": "导入中", - "FAILED": "失败", - "SUCCESS": "成功" - }, - "list-column-manipulations": { - "start": "开始任务", - "resume-setting": "继续设置", - "resume-importing": "继续导入", - "check-error-log": "查看原因", - "delete": "删除" - }, - "modal": { - "create-job": { - "title": "创建导入任务", - "job-name": "任务名称:", - "job-description": "任务备注:" - }, - "delete-job": { - "title": "删除任务", - "hint": "确认删除任务{{name}}吗?", - "sub-hint": "删除后该任务不可恢复" - }, - "manipulations": { - "create": "创建", - "delete": "删除", - "cancel": "取消" - } - }, - "validator": { - "no-empty": "此项为必填项", - "over-limit-size": "已超出字数限制", - "invalid-format": "请输入中英文、数字、下划线" - } - }, - "import-job-details": { - "tabs": { - "basic-settings": "基础设置", - "uploaded-files": "上传文件", - "data-maps": "映射文件", - "import-details": "导入详情" - }, - "basic": { - "job-name": "任务名称:", - "job-description": "任务备注:", - "modal": { - "edit-job": { - "title": "编辑导入任务", - "job-name": "任务名称:", - "job-description": "任务备注:" - }, - "manipulations": { - "save": "保存", - "cancel": "取消" - } - } - }, - "manipulations": { - "edit": "编辑", - "resume-task": "继续任务" - } - }, - "step": { - "first": "上传文件", - "second": "设置数据映射", - "third": "导入数据", - "fourth": "完成" - }, - "upload-files": { - "click": "点击", - "description": "点击或将文件拖拽到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", - "drag": "拖拽", - "description-1": "或将文件", - "description-2": "到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", - "cancel": "取消上传", - "next": "下一步", - "wrong-format": "仅支持 csv 格式文件", - "over-single-size-limit": "容量已超过 1 GB", - "over-all-size-limit": "总容量已超过 10 GB", - "empty-file": "文件为空,请重新上传", - "no-duplicate": "下列上传的文件已存在:" - }, - "data-configs": { - "file": { - "title": "文件设置", - "include-header": "包含表头", - "delimiter": { - "title": "分隔符", - "comma": "逗号", - "semicolon": "分号", - "tab": "制表符", - "space": "空格", - "custom": "自定义" - }, - "code-type": { - "title": "编码格式", - "UTF-8": "UTF-8", - "GBK": "GBK", - "ISO-8859-1": "ISO-8859-1", - "US-ASCII": "US-ASCII", - "custom": "自定义" - }, - "date-type": { - "title": "日期格式", - "custom": "自定义" - }, - "skipped-line": "跳过行", - "timezone": "时区", - "save": "保存", - "placeholder": { - "input-delimiter": "请输入分隔符", - "input-charset": "请输入编码格式", - "input-date-format": "请输入日期格式" - }, - "hint": { - "save-succeed": "已保存文件设置" - } - }, - "type": { - "title": "类型设置", - "basic-settings": "基础设置", - "manipulation": { - "create": "创建", - "save": "保存", - "cancel": "取消", - "create-vertex": "创建顶点映射", - "create-edge": "创建边映射" - }, - "info": { - "type": "类型", - "name": "名称", - "ID-strategy": "ID策略", - "edit": "编辑", - "delete": "删除" - }, - "ID-strategy": { - "PRIMARY_KEY": "主键ID", - "AUTOMATIC": "自动生成", - "CUSTOMIZE_STRING": "自定义字符串", - "CUSTOMIZE_NUMBER": "自定义数字", - "CUSTOMIZE_UUID": "自定义UUID" - }, - "vertex": { - "title": "创建顶点映射", - "type": "顶点类型", - "ID-strategy": "ID策略", - "ID-column": "ID列", - "map-settings": "映射设置", - "add-map": { - "title": "添加映射", - "name": "列名", - "sample": "数据样例", - "property": "映射属性", - "clear": "清空" - }, - "select-all": "全选", - "advance": { - "title": "高级设置", - "nullable-list": { - "title": "空值列表", - "empty": "空值", - "custom": "自定义" - }, - "map-property-value": { - "title": "属性值映射", - "add-value": "添加属性值映射", - "fields": { - "property": "属性", - "value-map": "值映射", - "add-value-map": "添加值映射" - } - }, - "placeholder": { - "input": "请选择", - "input-property": "请选择输入属性", - "input-file-value": "请输入文件值", - "input-graph-value": "请输入图导入值" - } - } - }, - "edge": { - "title": "创建边映射", - "type": "边类型", - "source-ID-strategy": "起点ID策略", - "target-ID-strategy": "终点ID策略", - "ID-column": "ID列", - "map-settings": "映射设置", - "add-map": { - "title": "添加映射", - "name": "列名", - "sample": "数据样例", - "property": "映射属性", - "clear": "清空" - }, - "select-all": "全选", - "advance": { - "title": "高级设置", - "nullable-list": { - "title": "空值列表", - "empty": "空值", - "custom": "自定义" - }, - "map-property-value": { - "title": "属性值映射", - "add-value": "添加 属性值映射", - "fields": { - "property": "属性", - "value-map": "值映射", - "add-value-map": "添加值映射" - } - }, - "placeholder": { - "input": "请选择映射属性", - "input-property": "请选择输入属性", - "input-file-value": "请输入文件值", - "input-graph-value": "请输入图导入值" - } - } - }, - "hint": { - "lack-support-for-automatic": "自动生成的ID策略不支持可视化导入,请调用API实现", - "no-vertex-or-edge-mapping": "如下文件未设置顶点类型或边类型映射:" - }, - "placeholder": { - "select-vertex-type": "请选择顶点类型", - "select-edge-type": "请选择边类型", - "select-id-column": "请选择 ID 列" - } - }, - "manipulations": { - "previous": "上一步", - "next": "下一步", - "add": "添加", - "edit": "编辑", - "delete": "删除", - "cancel": "取消", - "hints": { - "delete-confirm": "确认删除?", - "warning": "删除后无法恢复,请谨慎操作" - } - }, - "validator": { - "no-empty": "该项不能为空" - } - }, - "server-data-import": { - "import-settings": { - "title": "导入设置", - "checkIfExist": "检查边连接的顶点是否存在", - "requestTimesWhenInterpolationFailed": "插入失败重试次数", - "maximumAnalyzedErrorRow": "允许最大解析错误行数", - "requestTicksWhenInterpolationFailed": "插入失败重试间隔/s", - "maxiumInterpolateErrorRow": "允许最大插入错误行数", - "InterpolationTimeout": "插入超时时间/s" - }, - "import-details": { - "title": "导入详情", - "column-titles": { - "file-name": "文件名称", - "type": "类型", - "import-speed": "导入速度", - "import-progress": "导入进度", - "status": "状态", - "time-consumed": "耗时", - "manipulations": "操作" - }, - "content": { - "vertex": "顶点", - "edge": "边" - }, - "status": { - "RUNNING": "运行中", - "SUCCEED": "成功", - "FAILED": "失败", - "PAUSED": "已暂停", - "STOPPED": "已终止" - }, - "manipulations": { - "pause": "暂停", - "resume": "继续", - "retry": "重试", - "abort": "终止", - "failed-cause": "查看原因" - } - }, - "hint": { - "check-vertex": "开启检查会影响导入性能,请按需开启", - "no-data": "正在请求导入", - "confirm-navigation": "确认跳转到任务列表?正在上传的文件可能会丢失" - }, - "validator": { - "no-empty": "该项不能为空", - "need-integer-with-negative": "请输入-1或大于0的整数", - "need-integer": "请输入大于0的整数" - }, - "manipulations": { - "previous": "上一步", - "start": "开始导入", - "cancel": "取消导入", - "finished": "完成" - } - }, - "data-import-status": { - "finished": "导入完成", - "success": "已成功导入 {{number}} 个文件", - "pause": "{{number}} 个文件暂停", - "abort": "{{number}} 个文件终止", - "move-to-import-manager": "返回导入任务列表" - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/dataAnalyze.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/dataAnalyze.json deleted file mode 100644 index 87afb8a40..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/dataAnalyze.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "data-analyze": { - "category": { - "gremlin-analyze": "Gremlin 分析", - "algorithm-analyze": "算法分析" - }, - "manipulations": { - "execution": "执行", - "favorite": "收藏", - "reset": "重置" - }, - "algorithm-list": { - "title": "算法目录", - "loop-detection": "环路检测", - "focus-detection": "交点检测", - "shortest-path": "最短路径", - "shortest-path-all": "全最短路径", - "all-path": "全部路径", - "neighbor-rank-recommendation": "Neighbor Rank推荐算法", - "model-similarity": "模型相似度算法", - "real-time-recommendation": "实时推荐", - "k-step-neighbor": "k步邻居", - "k-hop": "k跳算法", - "custom-path": "自定义路径", - "custom-intersection-detection": "自定义交点检测", - "radiographic-inspection": "射线检测", - "common-neighbor": "共同邻居", - "weighted-shortest-path": "带权最短路径", - "single-source-weighted-path": "单源带权路径", - "jaccard-similarity": "Jaccard相似度", - "personal-rank-recommendation": "Personal Rank推荐算法" - }, - "algorithm-forms": { - "loop-detection": { - "options": { - "source": "起点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "source_in_ring": "环路包含起点:", - "limit": "返回可达路径最大值:", - "capacity": "访问顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "focus-detection": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "limit": "访问顶点最大值:", - "capacity": "返回交点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "shortest-path": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "maxDepth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "maxDegree": "最大度数:", - "skip_degree": "超级顶点度数:", - "skipDegree": "超级顶点度数:", - "capacity": "访问顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "shortest-path-all": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "skip_degree": "超级顶点度数:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "all-path": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "limit": "返回路径最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "model-similarity": { - "options": { - "method": "起点选择方式:", - "source": "起点ID:", - "vertex-type": "顶点类型", - "vertex-property": "顶点属性", - "direction": "方向:", - "least_neighbor": "最少邻居数:", - "similarity": "相似度:", - "label": "边类型:", - "max_similar": "相似度最高个数:", - "least_similar": "梭形相似点最小个数:", - "property_filter": "属性过滤:", - "least_property_number": "最小属性值个数:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "skip_degree": "返回顶点最大值:", - "limit": "返回结果最大值:", - "return_common_connection": "返回共同关联点:", - "return_complete_info": "返回顶点完整信息:" - }, - "radio-value": { - "specific-id": "指定ID", - "filtered-type-property": "筛选类型属性" - }, - "placeholder": { - "input-source-id": "请输入起点ID", - "input-vertex-type": "请选择顶点类型", - "input-vertex-property": "请选择顶点属性", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "input-integer-gt-1": "请填写大于1的整数", - "input-filtered-property": "请选择需要过滤的属性", - "no-properties": "无属性", - "no-vertex-type": "无顶点类型" - }, - "hint": { - "least_property_number": "属性过滤和最小属性值个数需一起使用;设置后效果为:当起点跟其所有的梭形相似点某个属性的值大于等于最小属性值个数时,才会返回该起点及其梭形相似点", - "least_neighbor": "邻居数少于当前设定值,则认为起点没有梭形相似点", - "similarity": "起点与\"梭形相似点\"的共同邻居数目占起点的全部邻居数目的比例", - "max_similar": "返回起点的梭形相似点中相似度最高的top个数,0表示全部", - "return_common_connection": "是否返回起点及其\"梭形相似点\"共同关联的中间点" - }, - "validations": { - "no-empty": "该项不能为空", - "no-edge-typs": "无边类型", - "integer-only": "请填写大于等于0的整数", - "positive-integer-only": "请填写大于0的整数", - "integer-gt-1": "请填写大于1的整数" - }, - "pre-value": "全部" - }, - "neighbor-rank": { - "options": { - "source": "起点ID:", - "alpha": "Alpha", - "direction": "方向:", - "capacity": "访问顶点最大值:", - "label": "边类型:", - "degree": "最大度数:", - "top": "每层保留权重Top N:" - }, - "placeholder": { - "input-source-id": "请输入起点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "range": "范围(0-1]" - }, - "hint": { - "top": "在结果中每一层只保留权重最高的N个结果" - }, - "validations": { - "no-empty": "该项不能为空", - "no-edge-typs": "无边类型", - "range": "请填写大于0且小于等于1的数值", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数", - "input-chars": "规则不能其它重复" - }, - "pre-value": "全部", - "add-new-rule": "添加规则" - } - }, - "exec-logs": { - "table-title": { - "time": "时间", - "type": "执行类型", - "content": "执行内容", - "status": "状态", - "duration": "耗时", - "manipulation": "操作" - }, - "type": { - "GREMLIN": "GREMLIN 查询", - "GREMLIN_ASYNC": "GREMLIN 任务", - "ALGORITHM": "算法查询" - }, - "status": { - "success": "成功", - "async-success": "提交成功", - "running": "运行中", - "failed": "失败", - "async-failed": "提交失败" - } - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/index.ts b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/index.ts deleted file mode 100644 index b3e03211e..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/graph-managment/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import CommonResources from './common.json'; -import GraphManagementSideBarResources from './GraphManagementSidebar.json'; -import DataAnalyzeResources from './dataAnalyze.json'; -import DataImportResources from './data-import/import-tasks/ImportTasks.json'; -import AsyncTasksResources from './AsyncTasks.json'; -import Addition from './addition.json'; - -export { - CommonResources, - DataAnalyzeResources, - GraphManagementSideBarResources, - DataImportResources, - AsyncTasksResources, - Addition -}; diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/index.ts b/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/index.ts deleted file mode 100644 index 4a369f54e..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/en-US/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { merge } from 'lodash-es'; -import { - CommonResources, - DataAnalyzeResources, - GraphManagementSideBarResources, - DataImportResources, - AsyncTasksResources, - Addition -} from './graph-managment'; - -const translation = { - translation: merge( - CommonResources, - DataAnalyzeResources, - GraphManagementSideBarResources, - DataImportResources, - AsyncTasksResources, - Addition - ) -}; - -export default translation; diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/index.ts b/hugegraph-hubble/hubble-fe/src/i18n/resources/index.ts deleted file mode 100644 index bad374766..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import zhCNResources from './zh-CN'; -import enUSResources from './en-US'; - -export { zhCNResources, enUSResources }; diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json deleted file mode 100644 index ce2848f4c..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "async-tasks": { - "title": "任务管理", - "placeholders": { - "search": "请输入任务ID或名称搜索" - }, - "table-column-title": { - "task-id": "任务ID", - "task-name": "任务名称", - "task-type": "任务类型", - "create-time": "创建时间", - "time-consuming": "耗时", - "status": "状态", - "manipulation": "操作" - }, - "table-filters": { - "task-type": { - "all": "全部", - "gremlin": "Gremlin任务", - "algorithm": "算法任务", - "remove-schema": "删除元数据", - "create-index": "创建索引", - "rebuild-index": "重建索引" - }, - "status": { - "all": "全部", - "scheduling": "调度中", - "scheduled": "排队中", - "queued": "排队中", - "running": "运行中", - "restoring": "恢复中", - "success": "成功", - "failed": "失败", - "cancelling": "已取消", - "cancelled": "已取消" - } - }, - "table-selection": { - "selected": "已选{{number}}项", - "delete-batch": "批量删除" - }, - "manipulations": { - "abort": "终止", - "aborting": "终止中", - "delete": "删除", - "check-result": "查看结果", - "check-reason": "查看原因" - }, - "hint": { - "delete-confirm": "删除确认", - "delete-description": "是否确认删除该任务?删除后无法恢复,请谨慎操作", - "delete-succeed": "删除成功", - "delete-batch-confirm": "批量删除", - "delete-batch-description": "确认删除以下任务?删除后无法恢复,请谨慎操作", - "delete": "删除", - "cancel": "取消", - "no-data": "暂无数据", - "empty": "您暂时还没有任何任务", - "select-disabled": "任务{{id}}无法被选中删除", - "check-details": "查看详情", - "creation-failed": "创建失败" - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json deleted file mode 100644 index d6b2f5455..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "data-import": "数据导入", - "import-task": "导入任务", - "map-templates": "映射模板" -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/addition.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/addition.json deleted file mode 100644 index d137ee317..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/addition.json +++ /dev/null @@ -1,348 +0,0 @@ -{ - "addition": { - "function-parameter": { - "edge-type": "边类型", - "vertex-id": "顶点ID" - }, - "store": { - "required": "必填项", - "item-is-required": "此项为必填项", - "no-match-input-requirements": "不符合输入要求", - "rule1": "请输入字母、数字或特殊字符", - "rule2": "请输入范围在 1-65535 的数字", - "rule3": "必须同时填写用户名和密码", - "rule4": "必须为中英文,数字和下划线", - "illegal-data-format": "非法的数据格式", - "incorrect-time-format": "时间格式不正确", - "cannot-be-empty": "此项不能为空", - "cannot-be-empty1": "该项不能为空", - "same-edge-name-notice": "存在同名边,请输入其它名称", - "same-vertex-name-notice": "存在同名顶点,请输入其它名称", - "same-property-name-notice": "存在同名属性,请输入其它名称", - "same-index-name-notice": "存在同名属性索引,请输入其它名称", - "network-error": "网络异常,请稍后重试" - }, - "constant": { - "primary-key-id": "主键ID", - "automatic-generation": "自动生成", - "custom-string": "自定义字符串", - "custom-number": "自定义数字", - "custom-uuid": "自定义UUID", - "greater-than": "大于", - "greater-than-or-equal": "大于等于", - "less-than": "小于", - "less-than-or-equal": "小于等于", - "equal": "等于" - }, - "menu": { - "chart": "图", - "table": "表格", - "task-id": "任务ID", - "list-mode": "列表模式", - "chart-mode": "图模式", - "secondary-index": "二级索引", - "range-index": "范围索引", - "full-text-index": "全文索引", - "type-index": "类型索引", - "base-info": "基础信息", - "select-reuse-item": "选择复用项", - "confirm-reuse-item": "确认复用项", - "complete-reuse": "完成复用" - }, - "vertex": { - "type-detail": "顶点类型详情", - "edit-type": "编辑顶点类型", - "using-cannot-delete": "当前顶点类型正在使用中,不可删除。", - "using-cannot-delete-confirm": "使用中顶点类型不可删除,确认删除以下未使用顶点类型?", - "del-vertex-confirm": "确认删除此顶点类型?", - "del-vertex-confirm-again": "确认删除此顶点类型?删除后无法恢复,请谨慎操作", - "vertex-type-name": "顶点类型名称", - "vertex-style": "顶点样式", - "vertex-display-content": "顶点展示内容", - "select-vertex-display-content-placeholder": "请选择顶点展示内容", - "create-vertex-type": "创建顶点类型", - "vertex-index": "顶点索引", - "corresponding-vertex-type": "对应顶点类型", - "no-vertex-type-desc": "您暂时还没有任何顶点类型,立即创建" - }, - "edge": { - "display-content": "边展示内容", - "display-content-select-desc": "请选择边展示内容", - "index-info": "索引信息", - "index-name": "索引名称", - "index-type": "索引类型", - "edge-index": "边索引", - "index-type-select-desc": "请选择索引类型", - "property-select-desc": "请选择属性", - "add-group": "新增一组", - "confirm-del-edge-type": "确认删除此边类型?", - "confirm-del-edge-type-again": "确认删除边类型?删除后无法恢复,请谨慎操作", - "confirm-del-edge-careful-notice": "删除后无法恢复,请谨慎操作", - "no-edge-desc": "您暂时还没有任何边类型,立即创建", - "create-edge": "创建边类型", - "multiplexing-existing-type": "复用已有类型", - "multiplexing-edge-type": "复用边类型", - "multiplexing-edge-type-notice": "边类型关联的属性和属性索引、起点类型和终点类型及其关联的属性和属性索引将一同复用", - "verification-result": "校验结果", - "be-verified": "待校验", - "verified-again": "重新校验" - }, - "message": { - "no-can-delete-vertex-type": "无可删除顶点类型", - "no-index-notice": "您暂时还没有任何索引", - "property-create-desc": "您暂时还没有任何属性,立即创建", - "del-unused-property-notice": "使用中属性不可删除,确认删除以下未使用属性?", - "please-enter-keywords": "请输入搜索关键字", - "no-property-can-delete": "无可删除属性", - "no-metadata-notice": "您暂时还没有任何元数据", - "no-vertex-or-edge-notice": "您还未设置顶点类型或边类型", - "no-adjacency-points": "不存在邻接点", - "no-more-points": "不存在更多邻接点", - "please-enter-number": "请输入数字", - "please-enter-string": "请输入字符串", - "please-enter": "请输入", - "no-chart-desc": "无图结果,请查看表格或Json数据", - "no-data-desc": "暂无数据结果", - "data-loading": "数据加载中", - "submit-async-task": "提交异步任务中", - "submit-success": "提交成功", - "submit-fail": "提交失败", - "task-submit-fail": "任务提交失败", - "fail-reason": "失败原因", - "fail-position": "失败位置", - "selected": "已选", - "edge-del-confirm": "确认删除以下边?", - "long-time-notice": "删除元数据耗时较久,详情可在任务管理中查看。", - "index-long-time-notice": "创建索引可能耗时较久,详情可在任务管理中查看", - "property-del-confirm": "确认删除此属性?", - "property-del-confirm-again": "确认删除此属性?删除后无法恢复,请谨慎操作", - "index-del-confirm": "删除索引后,无法根据此属性索引进行查询,请谨慎操作。", - "edge-name-rule": "允许出现中英文、数字、下划线", - "source-type-select-placeholder": "请选择起点类型", - "target-type-select-placeholder": "请选择终点类型", - "select-distinguishing-key-property-placeholder": "请选择区分键属性", - "select-association-key-property-placeholder": "请先选择关联属性", - "index-open-notice": "开启索引会影响使用性能,请按需开启", - "duplicate-name": "有重名", - "dependency-conflict": "依赖冲突", - "already-exist": "已存在", - "pass": "通过", - "select-reuse-graph-placeholder": "请选择要复用的图", - "reuse-complete": "复用完成", - "vertex-type-reuse-success": "已成功复用顶点类型", - "property-using-cannot-delete": "当前属性数据正在使用中,不可删除。", - "reuse-property-success": "已成功复用属性", - "reuse-vertex-type-notice": "顶点类型关联的属性和属性索引将一同复用", - "illegal-vertex": "该顶点是非法顶点,可能是由悬空边导致" - }, - "operate": { - "reuse-vertex-type": "复用顶点类型", - "reuse-existing-property": "复用已有属性", - "reuse-property": "复用属性", - "create-property": "创建属性", - "continue-reuse": "继续复用", - "back-to-view": "返回查看", - "complete": "完成", - "next-step": "下一步", - "previous-step": "上一步", - "rename": "重命名", - "del-ing": "删除中", - "view-task-management": "去任务管理查看", - "batch-del": "批量删除", - "multiplexing": "复用", - "de-multiplexing": "取消复用", - "open": "开", - "close": "关", - "look": "查看", - "view-property": "查看属性", - "filter": "筛选", - "add-filter-item": "添加属性筛选", - "enlarge": "放大", - "narrow": "缩小", - "center": "居中", - "download": "下载", - "exit-full-screen": "退出全屏", - "full-screen": "全屏", - "load-background": "加载背景", - "load-spinner": "加载 spinner", - "rendering": "正在渲染", - "detail": "详情", - "favorite": "收藏", - "favorite-success": "收藏成功", - "load-statement": "加载语句", - "time": "时间", - "name": "名称", - "favorite-statement": "收藏语句", - "favorite-desc": "请输入收藏名称", - "operate": "操作", - "query": "查询", - "hidden": "隐藏", - "modify-name": "修改名称", - "execution-record": "执行记录", - "favorite-queries": "收藏的查询", - "favorite-search-desc": "搜索收藏名称或语句", - "expand-collapse": "展开/收起", - "expand": "展开", - "collapse": "收起", - "favorite-del-desc": "是否确认删除该条收藏语句?", - "input-query-statement": "请输入查询语句", - "query-statement-required": "查询语句不能为空", - "execute-query": "执行查询", - "execute-task": "执行任务", - "execute-ing": "执行中", - "clean": "清空", - "modify-success": "修改成功", - "query-result-desc": "查询模式适合30秒内可返回结果的小规模分析;任务模式适合较长时间返回结果的大规模分析,任务详情可在任务管理中查看" - }, - "common": { - "in-use": "使用中", - "not-used": "未使用", - "status": "状态", - "no-result": "无结果", - "cardinal-number": "基数", - "allow-null": "允许为空", - "allow-multiple-connections": "允许多次连接", - "multiple-connections-notice": "开启后两顶点间允许存在多条该类型的边", - "term": "项", - "in-edge": "入边", - "add-in-edge": "添加入边", - "out-edge": "出边", - "add-out-edge": "添加出边", - "add": "添加", - "value": "值", - "null-value": "空值", - "id-strategy": "ID策略", - "id-value": "ID值", - "id-input-desc": "请输入ID值", - "please-input": "请输入", - "add-success": "添加成功", - "add-fail": "添加失败", - "vertex-type": "顶点类型", - "selected-vertex-type": "已选顶点类型", - "vertex-id": "顶点ID", - "vertex-name": "顶点名称", - "illegal-vertex-desc": "该顶点是非法顶点,可能是由悬空边导致", - "add-vertex": "添加顶点", - "vertex-type-select-desc": "请选择顶点类型", - "edge-type": "边类型", - "selected-edge-type": "已选边类型", - "edge-style": "边样式", - "modify-edge-type": "编辑边类型", - "edge-type-detail": "边类型详情", - "edge-type-name": "边类型名称", - "edge-direction": "边方向", - "edge-type-select-desc": "请选择边类型", - "edge-id": "边ID", - "edge-name": "边名称", - "source": "起点", - "source-type": "起点类型", - "target": "终点", - "target-type": "终点类型", - "rule": "规则", - "property": "属性", - "selected-property": "已选属性", - "property-name": "属性名称", - "add-property": "添加属性", - "association-property": "关联属性", - "association-property-and-type": "关联属性及类型", - "property-index": "属性索引", - "selected-property-index": "已选属性索引", - "property-index-name": "属性索引名称", - "property-value": "属性值", - "required-property": "不可空属性", - "nullable-property": "可空属性", - "primary-key": "主键", - "primary-key-property": "主键属性", - "select-primary-key-property-placeholder": "请选择主键属性", - "distinguishing-key": "区分键", - "distinguishing-key-property": "区分键属性", - "property-input-desc": "请输入属性值", - "del-comfirm": "确认删除", - "ask": "吗?", - "confirm": "确认", - "del-success": "删除成功", - "save-scuccess": "保存成功", - "save-fail": "保存失败", - "save": "保存", - "cancel": "取消", - "more": "更多", - "edit": "编辑", - "del": "删除", - "fold": "折叠", - "open": "展开", - "close": "关闭", - "required": "必填项", - "format-error-desc": "必须以字母开头,允许出现英文、数字、下划线", - "no-matching-results": "无匹配结果", - "no-data": "暂无数据", - "data-type": "数据类型", - "corresponding-type": "对应类型" - }, - "appbar": { - "graph-manager": "图管理" - }, - "graphManagementHeader": { - "graph-manager": "图管理", - "community": "社区版", - "business": "商业版", - "limit-desc": "支持图上限", - "limit-desc1": "图磁盘上限", - "individual": "个", - "input-placeholder": "搜索图名称或ID", - "graph-create": "创建图" - }, - "graphManagementList": { - "save-scuccess": "保存成功", - "graph-del": "删除图", - "graph-del-comfirm-msg": "删除后该图所有配置均不可恢复", - "graph-edit": "编辑图", - "id": "图ID", - "id-desc": "为创建的图设置唯一标识的ID", - "name": "图名称", - "name-desc": "填写需要连接的图的名称", - "host": "主机名", - "port": "端口号", - "port-desc": "请输入端口号", - "username": "用户名", - "password": "密码", - "creation-time": "创建时间", - "visit": "访问" - }, - "graphManagementEmptyList": { - "graph-create": "创建图", - "graph-create-desc": "您暂时还没有任何图,立即创建", - "no-matching-results": "无匹配结果" - }, - "newGraphConfig": { - "graph-create": "创建图", - "create": "创建", - "create-scuccess": "创建成功", - "id": "图ID", - "id-desc": "为创建的图设置唯一标识的ID", - "name": "图名称", - "name-desc": "填写需要连接的图的名称", - "host": "主机名", - "host-desc": "请输入主机名", - "port": "端口号", - "port-desc": "请输入端口号", - "username": "用户名", - "password": "密码", - "not-required-desc": "未设置则无需填写" - }, - "graphManagementSidebar": { - "data-analysis": "数据分析", - "graph-select": "选择图", - "metadata-config": "元数据配置", - "data-import": "数据导入", - "task-management": "任务管理" - }, - "dataAnalyze": { - "cannot-access": "无法访问", - "return-home": "返回首页" - }, - "dataAnalyzeInfoDrawer": { - "edit-details": "编辑详情", - "data-details": "数据详情" - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/common.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/common.json deleted file mode 100644 index 98d821703..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/common.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "common": { - "loading-data": "数据加载中" - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json deleted file mode 100644 index 2edf4240c..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json +++ /dev/null @@ -1,343 +0,0 @@ -{ - "breadcrumb": { - "first": "导入任务", - "second": "任务详情" - }, - "import-manager": { - "hint": { - "empty-task": "您暂时还没有任何任务,立即创建", - "no-result": "无结果", - "creation-succeed": "创建成功", - "update-succeed": "编辑成功" - }, - "manipulation": { - "create": "创建" - }, - "placeholder": { - "input-job-name": "请输入任务名称搜索", - "input-valid-job-name": "允许出现中英文、数字、下划线", - "input-job-description": "请输入任务备注" - }, - "list-column-title": { - "job-name": "任务名称", - "size": "大小", - "create-time": "创建时间", - "status": "状态", - "time-consuming": "任务耗时", - "manipulation": "操作" - }, - "list-column-status": { - "DEFAULT": "未开始", - "UPLOADING": "未开始", - "MAPPING": "设置中", - "SETTING": "导入中", - "LOADING": "导入中", - "FAILED": "失败", - "SUCCESS": "成功" - }, - "list-column-manipulations": { - "start": "开始任务", - "resume-setting": "继续设置", - "resume-importing": "继续导入", - "check-error-log": "查看原因", - "delete": "删除" - }, - "modal": { - "create-job": { - "title": "创建导入任务", - "job-name": "任务名称:", - "job-description": "任务备注:" - }, - "delete-job": { - "title": "删除任务", - "hint": "确认删除任务{{name}}吗?", - "sub-hint": "删除后该任务不可恢复" - }, - "manipulations": { - "create": "创建", - "delete": "删除", - "cancel": "取消" - } - }, - "validator": { - "no-empty": "此项为必填项", - "over-limit-size": "已超出字数限制", - "invalid-format": "请输入中英文、数字、下划线" - } - }, - "import-job-details": { - "tabs": { - "basic-settings": "基础设置", - "uploaded-files": "上传文件", - "data-maps": "映射文件", - "import-details": "导入详情" - }, - "basic": { - "job-name": "任务名称:", - "job-description": "任务备注:", - "modal": { - "edit-job": { - "title": "编辑导入任务", - "job-name": "任务名称:", - "job-description": "任务备注:" - }, - "manipulations": { - "save": "保存", - "cancel": "取消" - } - } - }, - "manipulations": { - "edit": "编辑", - "resume-task": "继续任务" - } - }, - "step": { - "first": "上传文件", - "second": "设置数据映射", - "third": "导入数据", - "fourth": "完成" - }, - "upload-files": { - "click": "点击", - "description": "点击或将文件拖拽到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", - "drag": "拖拽", - "description-1": "或将文件", - "description-2": "到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", - "cancel": "取消上传", - "next": "下一步", - "wrong-format": "仅支持 csv 格式文件", - "over-single-size-limit": "容量已超过 1 GB", - "over-all-size-limit": "总容量已超过 10 GB", - "empty-file": "文件为空,请重新上传", - "no-duplicate": "下列上传的文件已存在:" - }, - "data-configs": { - "file": { - "title": "文件设置", - "include-header": "包含表头", - "delimiter": { - "title": "分隔符", - "comma": "逗号", - "semicolon": "分号", - "tab": "制表符", - "space": "空格", - "custom": "自定义" - }, - "code-type": { - "title": "编码格式", - "UTF-8": "UTF-8", - "GBK": "GBK", - "ISO-8859-1": "ISO-8859-1", - "US-ASCII": "US-ASCII", - "custom": "自定义" - }, - "date-type": { - "title": "日期格式", - "custom": "自定义" - }, - "skipped-line": "跳过行", - "timezone": "时区", - "save": "保存", - "placeholder": { - "input-delimiter": "请输入分隔符", - "input-charset": "请输入编码格式", - "input-date-format": "请输入日期格式" - }, - "hint": { - "save-succeed": "已保存文件设置" - } - }, - "type": { - "title": "类型设置", - "basic-settings": "基础设置", - "manipulation": { - "create": "创建", - "save": "保存", - "cancel": "取消", - "create-vertex": "创建顶点映射", - "create-edge": "创建边映射" - }, - "info": { - "type": "类型", - "name": "名称", - "ID-strategy": "ID策略", - "edit": "编辑", - "delete": "删除" - }, - "ID-strategy": { - "PRIMARY_KEY": "主键ID", - "AUTOMATIC": "自动生成", - "CUSTOMIZE_STRING": "自定义字符串", - "CUSTOMIZE_NUMBER": "自定义数字", - "CUSTOMIZE_UUID": "自定义UUID" - }, - "vertex": { - "title": "创建顶点映射", - "type": "顶点类型", - "ID-strategy": "ID策略", - "ID-column": "ID列", - "map-settings": "映射设置", - "add-map": { - "title": "添加映射", - "name": "列名", - "sample": "数据样例", - "property": "映射属性", - "clear": "清空" - }, - "select-all": "全选", - "advance": { - "title": "高级设置", - "nullable-list": { - "title": "空值列表", - "empty": "空值", - "custom": "自定义" - }, - "map-property-value": { - "title": "属性值映射", - "add-value": "添加属性值映射", - "fields": { - "property": "属性", - "value-map": "值映射", - "add-value-map": "添加值映射" - } - }, - "placeholder": { - "input": "请选择", - "input-property": "请选择输入属性", - "input-file-value": "请输入文件值", - "input-graph-value": "请输入图导入值" - } - } - }, - "edge": { - "title": "创建边映射", - "type": "边类型", - "source-ID-strategy": "起点ID策略", - "target-ID-strategy": "终点ID策略", - "ID-column": "ID列", - "map-settings": "映射设置", - "add-map": { - "title": "添加映射", - "name": "列名", - "sample": "数据样例", - "property": "映射属性", - "clear": "清空" - }, - "select-all": "全选", - "advance": { - "title": "高级设置", - "nullable-list": { - "title": "空值列表", - "empty": "空值", - "custom": "自定义" - }, - "map-property-value": { - "title": "属性值映射", - "add-value": "添加 属性值映射", - "fields": { - "property": "属性", - "value-map": "值映射", - "add-value-map": "添加值映射" - } - }, - "placeholder": { - "input": "请选择映射属性", - "input-property": "请选择输入属性", - "input-file-value": "请输入文件值", - "input-graph-value": "请输入图导入值" - } - } - }, - "hint": { - "lack-support-for-automatic": "自动生成的ID策略不支持可视化导入,请调用API实现", - "no-vertex-or-edge-mapping": "如下文件未设置顶点类型或边类型映射:" - }, - "placeholder": { - "select-vertex-type": "请选择顶点类型", - "select-edge-type": "请选择边类型", - "select-id-column": "请选择 ID 列", - "empty-value": "空" - } - }, - "manipulations": { - "previous": "上一步", - "next": "下一步", - "add": "添加", - "edit": "编辑", - "delete": "删除", - "cancel": "取消", - "hints": { - "delete-confirm": "确认删除?", - "warning": "删除后无法恢复,请谨慎操作" - } - }, - "validator": { - "no-empty": "该项不能为空" - } - }, - "server-data-import": { - "import-settings": { - "title": "导入设置", - "checkIfExist": "检查边连接的顶点是否存在", - "requestTimesWhenInterpolationFailed": "插入失败重试次数", - "maximumAnalyzedErrorRow": "允许最大解析错误行数", - "requestTicksWhenInterpolationFailed": "插入失败重试间隔/s", - "maxiumInterpolateErrorRow": "允许最大插入错误行数", - "InterpolationTimeout": "插入超时时间/s" - }, - "import-details": { - "title": "导入详情", - "column-titles": { - "file-name": "文件名称", - "type": "类型", - "import-speed": "导入速度", - "import-progress": "导入进度", - "status": "状态", - "time-consumed": "耗时", - "manipulations": "操作" - }, - "content": { - "vertex": "顶点", - "edge": "边" - }, - "status": { - "RUNNING": "运行中", - "SUCCEED": "成功", - "FAILED": "失败", - "PAUSED": "已暂停", - "STOPPED": "已终止" - }, - "manipulations": { - "pause": "暂停", - "resume": "继续", - "retry": "重试", - "abort": "终止", - "failed-cause": "查看原因" - } - }, - "hint": { - "check-vertex": "开启检查会影响导入性能,请按需开启", - "no-data": "正在请求导入", - "confirm-navigation": "确认跳转到任务列表?正在上传的文件可能会丢失" - }, - "validator": { - "no-empty": "该项不能为空", - "need-integer-with-negative": "请输入-1或大于0的整数", - "need-integer": "请输入大于0的整数" - }, - "manipulations": { - "previous": "上一步", - "start": "开始导入", - "cancel": "取消导入", - "finished": "完成" - } - }, - "data-import-status": { - "finished": "导入完成", - "success": "已成功导入 {{number}} 个文件", - "pause": "{{number}} 个文件暂停", - "abort": "{{number}} 个文件终止", - "move-to-import-manager": "返回导入任务列表" - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json deleted file mode 100644 index 8f01b76e3..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json +++ /dev/null @@ -1,654 +0,0 @@ -{ - "data-analyze": { - "category": { - "gremlin-analyze": "Gremlin 分析", - "algorithm-analyze": "算法分析" - }, - "manipulations": { - "execution": "执行", - "favorite": "收藏", - "reset": "重置" - }, - "hint": { - "graph-disabled": "该图不可用" - }, - "algorithm-list": { - "title": "算法目录", - "loop-detection": "环路检测", - "focus-detection": "交点检测", - "shortest-path": "最短路径", - "shortest-path-all": "全最短路径", - "all-path": "所有路径", - "model-similarity": "模型相似度算法", - "neighbor-rank": "Neighbor Rank推荐算法", - "k-step-neighbor": "k步邻居", - "k-hop": "k跳算法", - "custom-path": "自定义路径", - "radiographic-inspection": "射线检测", - "same-neighbor": "共同邻居", - "weighted-shortest-path": "带权最短路径", - "single-source-weighted-shortest-path": "单源带权最短路径", - "jaccard": "Jaccard相似度", - "personal-rank": "Personal Rank推荐算法" - }, - "algorithm-forms": { - "loop-detection": { - "options": { - "source": "起点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "source_in_ring": "环路包含起点:", - "limit": "返回可达路径最大值:", - "capacity": "访问顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "focus-detection": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "limit": "返回交点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "shortest-path": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "skip_degree": "超级顶点度数:", - "capacity": "访问顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-integer": "请填写大于等于0的整数,默认为0", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "shortest-path-all": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "skip_degree": "超级顶点度数:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer": "请填写大于0的整数", - "input-integer": "请填写大于等于0的整数,默认为0", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目", - "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "all-path": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "limit": "返回路径最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "model-similarity": { - "options": { - "method": "起点选择方式:", - "source": "起点ID:", - "vertex-type": "顶点类型:", - "vertex-property": "顶点属性及值:", - "direction": "方向:", - "least_neighbor": "最少邻居数:", - "similarity": "相似度:", - "label": "边类型:", - "max_similar": "相似度最高个数:", - "least_similar": "模形相似点最小个数:", - "property_filter": "属性过滤:", - "least_property_number": "最小属性值个数:", - "max_degree": "最大度数:", - "capacity": "访问顶点最大值:", - "skip_degree": "返回顶点最大值:", - "limit": "返回结果最大值:", - "return_common_connection": "返回共同关联点:", - "return_complete_info": "返回顶点完整信息:" - }, - "radio-value": { - "specific-id": "指定ID", - "filtered-type-property": "筛选类型属性" - }, - "placeholder": { - "input-source-id": "请输入起点ID,多个ID用逗号分隔", - "input-vertex-type": "请选择顶点类型", - "select-vertex-property": "请选择顶点属性", - "input-vertex-property": "多属性值以逗号分隔", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "input-integer-gt-1": "请填写大于1的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "input-filtered-property": "请选择需要过滤的属性", - "no-properties": "无属性", - "no-vertex-type": "无顶点类型", - "similarity": "请输入(0-1]的数字" - }, - "hint": { - "vertex_type_or_property": "顶点类型/顶点属性至少填写一项", - "least_property_number": "属性过滤和最小属性值个数需一起使用;设置后效果为:当起点跟其所有的梭形相似点某个属性的值大于等于最小属性值个数时,才会返回该起点及其梭形相似点", - "max-degree": "查询过程中,单个顶点的最大边数目", - "least_neighbor": "邻居数少于当前设定值,则认为起点没有梭形相似点", - "similarity": "起点与\"梭形相似点\"的共同邻居数目占起点的全部邻居数目的比例", - "max_similar": "返回起点的梭形相似点中相似度最高的top个数,0表示全部", - "return_common_connection": "是否返回起点及其\"梭形相似点\"共同关联的中间点" - }, - "validations": { - "no-empty": "该项不能为空", - "no-edge-typs": "无边类型", - "integer-only": "请填写大于等于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "postive-integer-only": "请填写大于0的整数", - "integer-gt-1": "请填写大于1的整数", - "similarity": "请输入(0-1]的数字", - "no-gt-1000": "该值不能大于等于1000" - }, - "add": "添加", - "delete": "删除", - "pre-value": "全部" - }, - "neighbor-rank": { - "options": { - "source": "起点ID:", - "alpha": "Alpha:", - "direction": "方向:", - "capacity": "访问顶点最大值:", - "label": "边类型:", - "degree": "最大度数:", - "top": "每层保留权重Top N:", - "steps": "steps:" - }, - "placeholder": { - "input-source-id": "请输入起点ID", - "input-integer-lt-1000": "请填写大于等于0小于1000的整数, 默认为100", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer": "请填写大于0的整数", - "range": "范围(0-1]" - }, - "hint": { - "top": "在结果中每一层只保留权重最高的N个结果", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "no-edge-typs": "无边类型", - "range": "请填写大于0且小于等于1的数值", - "integer-only-lt-1000": "请填写大于等于0的整数小于1000的整数", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - }, - "pre-value": "全部", - "add-new-rule": "添加规则" - }, - "k-step-neighbor": { - "options": { - "source": "起点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "limit": "返回顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "k-hop": { - "options": { - "source": "起点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "nearest": "最短路径:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "遍历中访问顶点最大值:", - "limit": "返回顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目", - "shortest-path": "开启后,则查询出起始顶点最短路径为depth步的顶点,关闭后,则查询出起始顶点路径为depth步的顶点,可能有环,且不一定是最短路径" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "custom-path": { - "options": { - "method": "起点选择方式:", - "source": "起点ID:", - "vertex-type": "顶点类型:", - "vertex-property": "顶点属性:", - "sort_by": "路径权重排序:", - "capacity": "遍历中访问顶点最大值:", - "limit": "返回顶点最大值:", - "direction": "方向:", - "labels": "边类型:", - "properties": "边属性:", - "weight_by": "根据属性计算边权重:", - "degree": "最大度数:", - "sample": "采样值:", - "steps": "steps:" - }, - "placeholder": { - "input-source-id": "请输入起点ID,多个ID用逗号分隔", - "select-vertex-type": "请选择顶点类型", - "select-vertex-property": "请选择顶点属性", - "input-multiple-properties": "多属性值以逗号分隔", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer": "请填写大于0的整数", - "input-positive-integer-or-negative-one-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "input-property": "请输入边属性", - "input-number": "请输入浮点数字", - "select-edge-type": "请选择边类型", - "select-edge-property": "请选择边属性", - "select-property": "请选择属性", - "no-vertex-type": "无顶点类型", - "no-vertex-property": "无顶点属性", - "no-edge-type": "无边类型", - "no-edge-property": "无边属性", - "no-properties": "无属性" - }, - "hint": { - "top": "在结果中每一层只保留权重最高的N个结果", - "vertex_type_or_property": "顶点类型/顶点属性至少填写一项" - }, - "radio-value": { - "specific-id": "指定ID", - "filtered-type-property": "筛选类型属性", - "none": "不排序", - "ascend": "升序", - "descend": "降序" - }, - "validations": { - "no-empty": "该项不能为空", - "no-edge-typs": "无边类型", - "range": "请填写大于0且小于等于1的数值", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "input-number": "请输入浮点数字" - }, - "custom-weight": "自定义权重值", - "add": "添加", - "delete": "删除", - "add-new-rule": "添加规则" - }, - "radiographic-inspection": { - "options": { - "source": "起点ID:", - "direction": "方向:", - "max_depth": "最大步数:", - "label": "边类型:", - "max_degree": "最大度数:", - "capacity": "遍历中访问顶点最大值:", - "limit": "返回非环路路径最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-positive-integer": "请填写大于0的整数", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10000000", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "same-neighbor": { - "options": { - "vertex": "顶点1:", - "other": "顶点2:", - "direction": "方向:", - "label": "边类型:", - "max_degree": "最大度数:", - "limit": "返回共同邻居最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入顶点ID", - "input-other-id": "请输入不同于顶点1的ID", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer": "请填写大于0的整数", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "no-same-value-with-other": "不能与顶点2相同", - "no-same-value-with-vertex": "不能与顶点1相同" - } - }, - "weighted-shortest-path": { - "options": { - "source": "起点ID:", - "target": "终点ID:", - "direction": "方向:", - "weight": "权重属性:", - "with_vertex": "返回顶点完整信息:", - "label": "边类型:", - "max_degree": "最大度数:", - "skip_degree": "跳过点的度数:", - "capacity": "遍历中访问顶点最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-target-id": "请输入终点ID", - "input-integer": "请填写大于等于0的整数", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "select-property": "请选择属性", - "input-positive-integer": "请填写大于0的整数,默认为0", - "no-property": "无属性值为数字类型的属性", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "当顶点的边数目大于填写值,则跳过当前顶点,用于规避超级点", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "postive-integer-only": "请填写大于0的整数" - } - }, - "single-source-weighted-shortest-path": { - "options": { - "source": "起点ID:", - "direction": "方向:", - "weight": "权重属性:", - "with_vertex": "返回顶点完整信息:", - "label": "边类型:", - "max_degree": "最大度数:", - "skip_degree": "跳过点的度数:", - "capacity": "遍历中访问顶点最大值:", - "limit": "返回顶点/最短路径最大值:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入起点ID", - "input-integer": "请填写大于等于0的整数,默认为0", - "input-positive-integer": "请填写大于0的整数", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", - "no-property": "若不填写权重为1.0", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "skip-degree": "当顶点的边数目大于填写值,则跳过当前顶点,用于规避超级点", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "integer-only": "请填写大于等于0的整数", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - } - }, - "jaccard": { - "options": { - "vertex": "顶点1:", - "other": "顶点2:", - "direction": "方向:", - "label": "边类型:", - "max_degree": "最大度数:" - }, - "pre-value": "全部", - "placeholder": { - "input-source-id": "请输入顶点ID", - "input-other-id": "请输入不同于顶点1的ID", - "input-positive-integer": "请填写大于0的整数", - "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", - "no-edge-types": "无边类型" - }, - "hint": { - "max-depth": "为保证性能,建议不超过10步,推荐5步", - "max-degree": "查询过程中,单个顶点的最大边数目" - }, - "validations": { - "no-empty": "该项不能为空", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", - "no-same-value-with-other": "不能与顶点2相同", - "no-same-value-with-vertex": "不能与顶点1相同" - } - }, - "personal-rank": { - "options": { - "source": "起点ID:", - "alpha": "Alpha:", - "max_depth": "迭代次数:", - "with_label": "返回结果筛选:", - "label": "边类型:", - "degree": "最大度数:", - "limit": "返回顶点最大值:", - "sorted": "返回结果排序:" - }, - "with-label-radio-value": { - "same_label": "相同类型顶点", - "other_label": "不同类型顶点", - "both_label": "全部类型顶点" - }, - "placeholder": { - "input-source-id": "请输入起点ID", - "input-positive-integer-or-negative-one-degree": "请填写-1或大于0的整数,默认为10000", - "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10000000", - "select-edge": "请选择边类型", - "input-positive-integer": "请填写大于0的整数", - "alpha": "请输入(0-1]的数字", - "max_depth": "请输入(0-50]的数字" - }, - "hint": { - "degree": "查询过程中,单个顶点的最大边数目", - "with-label": "根据是否与起点类型相同,筛选返回结果", - "sorted": "选择开,则降序排列,选择关,则不排序" - }, - "validations": { - "no-empty": "该项不能为空", - "no-edge-typs": "无边类型", - "alpha-range": "请填写大于0且小于等于1的数值", - "depth-range": "请填写大于0且小于等于50的数值", - "postive-integer-only": "请填写大于0的整数", - "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" - }, - "pre-value": "全部", - "add-new-rule": "添加规则" - }, - "api-name-mapping": { - "rings": "环路检测", - "crosspoints": "交点检测", - "shortpath": "最短路径", - "allshortpath": "全最短路径", - "paths": "所有路径", - "fsimilarity": "模型相似度算法", - "neighborrank": "Neighbor Rank推荐算法", - "kneighbor": "k步邻居", - "kout": "k跳算法", - "customizedpaths": "自定义路径", - "rays": "射线检测", - "sameneighbors": "共同邻居", - "weightedshortpath": "带权最短路径", - "singleshortpath": "单源带权最短路径", - "jaccardsimilarity": "Jaccard相似度", - "personalrank": "Personal Rank推荐算法" - } - }, - "exec-logs": { - "table-title": { - "time": "时间", - "type": "执行类型", - "content": "执行内容", - "status": "状态", - "duration": "耗时", - "manipulation": "操作" - }, - "type": { - "GREMLIN": "GREMLIN 查询", - "GREMLIN_ASYNC": "GREMLIN 任务", - "ALGORITHM": "算法查询" - }, - "status": { - "success": "成功", - "async-success": "提交成功", - "running": "运行中", - "failed": "失败", - "async-failed": "提交失败" - } - } - } -} diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/index.ts b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/index.ts deleted file mode 100644 index b3e03211e..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/graph-managment/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import CommonResources from './common.json'; -import GraphManagementSideBarResources from './GraphManagementSidebar.json'; -import DataAnalyzeResources from './dataAnalyze.json'; -import DataImportResources from './data-import/import-tasks/ImportTasks.json'; -import AsyncTasksResources from './AsyncTasks.json'; -import Addition from './addition.json'; - -export { - CommonResources, - DataAnalyzeResources, - GraphManagementSideBarResources, - DataImportResources, - AsyncTasksResources, - Addition -}; diff --git a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/index.ts b/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/index.ts deleted file mode 100644 index 4a369f54e..000000000 --- a/hugegraph-hubble/hubble-fe/src/i18n/resources/zh-CN/index.ts +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { merge } from 'lodash-es'; -import { - CommonResources, - DataAnalyzeResources, - GraphManagementSideBarResources, - DataImportResources, - AsyncTasksResources, - Addition -} from './graph-managment'; - -const translation = { - translation: merge( - CommonResources, - DataAnalyzeResources, - GraphManagementSideBarResources, - DataImportResources, - AsyncTasksResources, - Addition - ) -}; - -export default translation; diff --git a/hugegraph-hubble/hubble-fe/src/index.less b/hugegraph-hubble/hubble-fe/src/index.less deleted file mode 100644 index b0e16a767..000000000 --- a/hugegraph-hubble/hubble-fe/src/index.less +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -@import '~hubble-ui/src/index.less'; - -@primary-color: #2b65ff; -@primary-hover-color: #527dff; -@primary-active-color: #184bcc; - -* { - box-sizing: border-box; -} - -html, -body, -img, -ul, -ol, -li, -table, -tr, -th, -td, -p { - margin: 0; - padding: 0; - border: 0; -} - -body { - background: #f2f2f2; - // prettier-ignore - font-family: - -apple-system, - BlinkMacSystemFont, - 'Helvetica Neue', - Helvetica, - 'PingFang SC', - 'Hiragino Sans GB', - 'Microsoft YaHei', - '微软雅黑', - Arial, - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - &.dark { - background: #000; - } - - &::after { - position: absolute; - overflow: hidden; - left: -20000px; - // preload images which in hover state to solve blink issue - content: - url(./assets/imgs/ic_topback.svg) - url(./assets/imgs/ic_arrow_white.svg) - url(./assets/imgs/ic_shuju_normal.svg) - url(./assets/imgs/ic_shuju_pressed.svg) - url(./assets/imgs/ic_yuanshuju_normal.svg) - url(./assets/imgs/ic_yuanshuju_pressed.svg) - url(./assets/imgs/ic_cebianzhankai.svg) - url(./assets/imgs/ic_cebianshouqi.svg) - url(./assets/imgs/ic_daorushuju_normal.svg) - url(./assets/imgs/ic_daorushuju_pressed.svg) - url(./assets/imgs/ic_renwuguanli_normal.svg) - url(./assets/imgs/ic_renwuguanli_pressed.svg) - url(./assets/imgs/ic_tuzhanshi_normal.svg) - url(./assets/imgs/ic_tuzhanshi_hover.svg) - url(./assets/imgs/ic_tuzhanshi_pressed.svg) - url(./assets/imgs/ic_biaoge_normal.svg) - url(./assets/imgs/ic_biaoge_hover.svg) - url(./assets/imgs/ic_biaoge_pressed.svg) - url(./assets/imgs/ic_json_normal.svg) url(./assets/imgs/ic_json_hover.svg) - url(./assets/imgs/ic_json_pressed.svg) url(./assets/imgs/ic_close_16.svg) - url(./assets/imgs/ic_refresh.svg) url(./assets/imgs/ic_loading_back.svg) - url(./assets/imgs/ic_loading_front.svg) - url(./assets/imgs/ic_question_mark.svg); - } -} - -code { - // prettier-ignore - font-family: - source-code-pro, - Menlo, - Monaco, - Consolas, - 'Courier New', - monospace; -} - -.tooltips { - background: #fff; - box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2); - border-radius: 4px; - padding: 28px 24px 24px; -} - -.tooltips-dark { - border-radius: 3px; - background-color: rgba(0, 0, 0, 0.8); - border-color: transparent; - padding: 4px 8px; - color: #fff; - line-height: 18px; - font-size: 12px; - max-width: 240px; - word-wrap: break-word; - - // override tooltip-arrow - .tooltip-arrow[data-placement*='bottom'] { - margin-top: -0.25rem; - } - - .tooltip-arrow[data-placement*='bottom']::before { - border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent; - border-width: 0 0.3rem 0.3rem 0.3rem; - position: absolute; - top: 0; - } - - .tooltip-arrow[data-placement*='bottom']::after { - border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent; - // border-color: rgba(0, 0, 0, 0.8); - border-width: 0 0.3rem 0.3rem 0.3rem; - } -} - -.no-line-break { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.message-wrapper { - font-size: 14px; - line-height: 22px; - - &-title { - font-weight: 900; - margin: 3.6px 0 4px; - } - - &-manipulation { - cursor: pointer; - color: #2b65ff; - } -} - -/* overrides (global) */ - -//primary button background colors -.new-fc-one-btn-primary { - background: @primary-color; - - &:hover { - background: @primary-hover-color; - } - - &:active { - background: @primary-active-color; - } - - &-disabled { - background: #d9e6ff; - - &:hover, - &:active { - background: #d9e6ff; - } - } -} - -// Modal titles -.new-fc-one-modal-title { - // prettier-ignore - font-family: - 'PingFangSC-Medium', - 'Microsoft YaHei', - '微软雅黑', - Arial, - sans-serif; - font-weight: bold; - font-size: 16px; -} - -// drawers, e.g. metadata-configs vertex/edge types -.new-fc-one-drawer-wrapper-body-small .new-fc-one-drawer-title { - font-size: 16px; -} - -.new-fc-one-drawer-close { - top: 28px; -} - -// z-index input errorlayer in Drawer should be higher -// prettier-ignore -.new-fc-one-drawer-content-wrapper .new-fc-one-input-error.new-fc-one-input-error-layer { - z-index: 1041; -} - -// also z-index is invalid if parent node has position: relative -.new-fc-one-drawer-content-wrapper .new-fc-one-input-all-container { - position: absolute; -} - -// Steps process style -.new-fc-one-steps-item-process .new-fc-one-steps-item-icon { - background: @primary-color; -} - -// checked-color -.new-fc-one-switch-checked { - background: @primary-color; - - &:hover { - background: @primary-hover-color; - } -} - -// text in -.new-fc-one-switch-inner { - margin-right: 0; -} - -.new-fc-one-switch-checked .new-fc-one-switch-inner { - margin-left: 0; -} - -// override radio button primary color -.new-fc-one-radio-button-wrapper-checked { - border: 1px solid @primary-color; - background-color: @primary-color; - color: #fff; - - &:hover { - border: 1px solid @primary-hover-color; - background-color: @primary-hover-color; - color: #fff; - } -} - -// hovered color -.new-fc-one-menu-horizontal-box .new-fc-one-menu-item-selected:hover { - color: @primary-hover-color; - border-color: @primary-hover-color; -} - -//
th checkbox color -.new-fc-one-checkbox-wrapper .new-fc-one-checkbox-indeterminate .new-fc-one-checkbox-inner { - background-color: #2b65ff; -} - -.new-fc-one-table-thead > tr > th:first-of-type { - padding: 12px 16px 12px 20px; -} - -// could be a bug where container style is display: none -.new-fc-one-message { - display: block !important; -} - -// proper line break -.new-fc-one-message-container-content { - word-break: break-word; -} - -// -.new-fc-one-breadcrumb-link { - color: #2b65ff; -} - -// -.new-fc-one-modal-body { - overflow-y: auto !important; -} - -// menu center -.data-analyze-sidebar .ant-menu.ant-menu-inline-collapsed > .ant-menu-item { - padding: 0 12px; -} diff --git a/hugegraph-hubble/hubble-fe/src/index.tsx b/hugegraph-hubble/hubble-fe/src/index.tsx deleted file mode 100644 index 2c6b3b7c8..000000000 --- a/hugegraph-hubble/hubble-fe/src/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import React from 'react'; -import ReactDOM from 'react-dom'; -import './index.less'; -import App from './components/App'; -import './i18n'; -import { ConfigProvider } from 'antd'; -import zhCN from 'antd/lib/locale/zh_CN'; -import enUS from 'antd/lib/locale/en_US'; - -// UI component has built-in text internationalization, -// such as confirmation, cancellation, etc -const languageType = - localStorage.getItem('languageType') === 'en-US' ? enUS : zhCN; -ReactDOM.render( - - - , - document.getElementById('root') -); diff --git a/hugegraph-hubble/hubble-fe/src/react-app-env.d.ts b/hugegraph-hubble/hubble-fe/src/react-app-env.d.ts deleted file mode 100644 index 4724ca7e0..000000000 --- a/hugegraph-hubble/hubble-fe/src/react-app-env.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -/// diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/asyncTasksStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/asyncTasksStore.ts deleted file mode 100644 index 4e0675c19..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/asyncTasksStore.ts +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action, flow } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; - -import { initErrorInfo, initRequestStatus } from '../factory/asyncTasksStore'; -import { checkIfLocalNetworkOffline } from '../utils'; - -import { baseUrl, responseData } from '../types/common'; -import type { - AsyncTask, - AsyncTaskListResponse -} from '../types/GraphManagementStore/asyncTasksStore'; - -export class AsyncTasksStore { - @observable requestStatus = initRequestStatus(); - @observable errorInfo = initErrorInfo(); - - @observable currentId: number | null = null; - @observable searchWords = ''; - @observable abortingId = NaN; - - @observable.shallow asyncTasksPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - // searched results rather than initial fetched result - @observable.shallow isSearched = { - status: false, - value: '' - }; - - @observable.shallow filterOptions = { - type: '', - status: '' - }; - - @observable.ref asyncTaskList: AsyncTask[] = []; - @observable.ref singleAsyncTask: AsyncTask | null = null; - - @action - setCurrentId(id: number) { - this.currentId = id; - } - - @action - setAbortingId(id: number) { - this.abortingId = id; - } - - @action - mutateSearchWords(word: string) { - this.searchWords = word; - } - - @action - mutateFilterOptions(category: 'type' | 'status', value: string) { - this.filterOptions[category] = value; - } - - @action - mutateAsyncTasksPageNumber(pageNumber: number) { - this.asyncTasksPageConfig.pageNumber = pageNumber; - } - - @action - switchSearchedStatus(isSearched: boolean) { - this.isSearched.status = isSearched; - - isSearched - ? (this.isSearched.value = this.searchWords) - : (this.isSearched.value = ''); - } - - @action - dispose() { - this.requestStatus = initRequestStatus(); - this.errorInfo = initErrorInfo(); - this.currentId = null; - this.searchWords = ''; - this.abortingId = NaN; - this.asyncTasksPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - this.isSearched = { - status: false, - value: '' - }; - this.filterOptions = { - type: '', - status: '' - }; - this.asyncTaskList = []; - this.singleAsyncTask = null; - } - - fetchAsyncTaskList = flow(function* fetchAsyncTaskList( - this: AsyncTasksStore - ) { - this.requestStatus.fetchAsyncTaskList = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.currentId}/async-tasks?page_no=${ - this.asyncTasksPageConfig.pageNumber - }&page_size=10&type=${ - this.filterOptions.type - }&status=${this.filterOptions.status.toUpperCase()}` + - (this.isSearched.status && this.searchWords !== '' - ? `&content=${this.searchWords}` - : '') - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchAsyncTaskList.code = result.data.status; - throw new Error(result.data.message); - } - - this.asyncTaskList = result.data.data.records; - this.asyncTasksPageConfig.pageTotal = result.data.data.total; - this.requestStatus.fetchAsyncTaskList = 'success'; - } catch (error) { - this.requestStatus.fetchAsyncTaskList = 'failed'; - this.errorInfo.fetchAsyncTaskList.message = error.message; - } - }); - - fetchAsyncTask = flow(function* fetchAsyncTask( - this: AsyncTasksStore, - id: number - ) { - this.requestStatus.fetchAsyncTask = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.currentId}/async-tasks/${id}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchAsyncTask.code = result.data.status; - throw new Error(result.data.message); - } - - this.singleAsyncTask = result.data.data; - this.requestStatus.fetchAsyncTask = 'success'; - } catch (error) { - this.requestStatus.fetchAsyncTask = 'failed'; - this.errorInfo.fetchAsyncTask.message = error.message; - } - }); - - deleteAsyncTask = flow(function* deleteAsyncTask( - this: AsyncTasksStore, - selectedTaskIds: number[] - ) { - this.requestStatus.deleteAsyncTask = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .delete>( - `${baseUrl}/${this.currentId}/async-tasks?` + - selectedTaskIds.map((id) => 'ids=' + id).join('&') - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.deleteAsyncTask.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.deleteAsyncTask = 'success'; - } catch (error) { - this.requestStatus.deleteAsyncTask = 'failed'; - this.errorInfo.deleteAsyncTask.message = error.message; - } - }); - - abortAsyncTask = flow(function* abortAsyncTask( - this: AsyncTasksStore, - id: number - ) { - this.requestStatus.abortAsyncTask = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.currentId}/async-tasks/cancel/${id}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.abortAsyncTask.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.abortAsyncTask = 'success'; - } catch (error) { - this.requestStatus.abortAsyncTask = 'failed'; - this.errorInfo.abortAsyncTask.message = error.message; - } - }); -} - -export default createContext(new AsyncTasksStore()); diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts deleted file mode 100644 index 2325c11f0..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts +++ /dev/null @@ -1,1901 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { DataAnalyzeStore } from './dataAnalyzeStore'; -import { observable, action, computed } from 'mobx'; -import { isEmpty, remove, isEqual, isUndefined, flatten } from 'lodash-es'; -import { v4 } from 'uuid'; -import isInt from 'validator/lib/isInt'; - -import { - initializeRequestStatus, - initializeErrorInfo, - createLoopDetectionDefaultParams, - createValidateLoopDetectionParamsErrorMessage, - createFocusDetectionDefaultParams, - createValidateFocusDetectionParamsErrorMessage, - createShortestPathDefaultParams, - createValidateShortestPathParamsErrorMessage, - createShortestPathAllDefaultParams, - createValidateShortestPathAllParamsErrorMessage, - createAllPathDefaultParams, - createValidateAllPathParamsErrorMessage, - createModelSimilarityDefaultParams, - createValidateModelSimilarParamsErrorMessage, - createNeighborRankDefaultParams, - createValidateNeighborRankErrorMessage, - createKStepNeighborDefaultParams, - createValidateKStepNeighborParamsErrorMessage, - createKHopDefaultParams, - createValidateKHopParamsErrorMessage, - createRadiographicInspectionDefaultParams, - createValidateRadiographicInspectionParamsErrorMessage, - createSameNeighborDefaultParams, - createValidateSameNeighborParamsErrorMessage, - createWeightedShortestPathDefaultParams, - createValidateWeightedShortestPathParamsErrorMessage, - createSingleSourceWeightedShortestPathDefaultParams, - createValidateSingleSourceWeightedShortestPathParamsErrorMessage, - createJaccardDefaultParams, - createValidateJaccardParamsErrorMessage, - createPersonalRankDefaultParams, - createValidatePersonalRankParamsErrorMessage, - createCustomPathDefaultParams, - createValidateCustomPathParamsErrorMessage -} from '../../factory/dataAnalyzeStore/algorithmStore'; -import i18next from '../../../i18n'; -import { isGtNegativeOneButZero } from '../../utils'; - -import type { dict } from '../../types/common'; -import type { - ShortestPathAlgorithmParams, - LoopDetectionParams, - FocusDetectionParams, - ShortestPathAllAlgorithmParams, - AllPathAlgorithmParams, - ModelSimilarityParams, - NeighborRankParams, - NeighborRankRule, - KStepNeighbor, - KHop, - RadiographicInspection, - SameNeighbor, - WeightedShortestPath, - SingleSourceWeightedShortestPath, - Jaccard, - PersonalRank, - CustomPathParams, - CustomPathRule -} from '../../types/GraphManagementStore/dataAnalyzeStore'; -import isFloat from 'validator/lib/isFloat'; - -export class AlgorithmAnalyzerStore { - dataAnalyzeStore: DataAnalyzeStore; - - constructor(dataAnalyzeStore: DataAnalyzeStore) { - this.dataAnalyzeStore = dataAnalyzeStore; - } - - @observable requestStatus = initializeRequestStatus(); - @observable errorInfo = initializeErrorInfo(); - - @observable isCollapse = false; - @observable currentAlgorithm = ''; - - @observable - loopDetectionParams: LoopDetectionParams = createLoopDetectionDefaultParams(); - - @observable - validateLoopDetectionParamsErrorMessage: any = createValidateLoopDetectionParamsErrorMessage(); - - @observable - focusDetectionParams: FocusDetectionParams = createFocusDetectionDefaultParams(); - - @observable - validateFocusDetectionParamsErrorMessage: any = createValidateFocusDetectionParamsErrorMessage(); - - @observable - shortestPathAlgorithmParams: ShortestPathAlgorithmParams = createShortestPathDefaultParams(); - - @observable - validateShortestPathParamsErrorMessage: ShortestPathAlgorithmParams = createValidateShortestPathParamsErrorMessage(); - - @observable - shortestPathAllParams: ShortestPathAllAlgorithmParams = createShortestPathAllDefaultParams(); - - @observable - validateShortestPathAllParamsErrorMessage: ShortestPathAllAlgorithmParams = createValidateShortestPathAllParamsErrorMessage(); - - @observable - allPathParams: AllPathAlgorithmParams = createAllPathDefaultParams(); - - @observable - validateAllPathParamsErrorMessage: AllPathAlgorithmParams = createValidateAllPathParamsErrorMessage(); - - @observable - modelSimilarityParams: ModelSimilarityParams = createModelSimilarityDefaultParams(); - - @observable - validateModelSimilartiyParamsErrorMessage: dict< - string - > = createValidateModelSimilarParamsErrorMessage(); - - @observable - neighborRankParams: NeighborRankParams = createNeighborRankDefaultParams(); - - @observable - validateNeighborRankParamsParamsErrorMessage = createValidateNeighborRankErrorMessage(); - - @observable - kStepNeighborParams: KStepNeighbor = createKStepNeighborDefaultParams(); - - @observable - validateKStepNeighborParamsErrorMessage = createValidateKStepNeighborParamsErrorMessage(); - - @observable - kHopParams: KHop = createKHopDefaultParams(); - - @observable - validateKHopParamsErrorMessage = createValidateKHopParamsErrorMessage(); - - @observable - customPathParams: CustomPathParams = createCustomPathDefaultParams(); - - @observable - validateCustomPathParmasErrorMessage = createValidateCustomPathParamsErrorMessage(); - - @observable - radiographicInspectionParams: RadiographicInspection = createRadiographicInspectionDefaultParams(); - - @observable - validateRadiographicInspectionParamsErrorMessage = createValidateRadiographicInspectionParamsErrorMessage(); - - @observable - sameNeighborParams: SameNeighbor = createSameNeighborDefaultParams(); - - @observable - validateSameNeighborParamsErrorMessage: SameNeighbor = createValidateSameNeighborParamsErrorMessage(); - - @observable - weightedShortestPathParams: WeightedShortestPath = createWeightedShortestPathDefaultParams(); - - @observable - validateWeightedShortestPathParamsErrorMessage = createValidateWeightedShortestPathParamsErrorMessage(); - - @observable - singleSourceWeightedShortestPathParams: SingleSourceWeightedShortestPath = createSingleSourceWeightedShortestPathDefaultParams(); - - @observable - validateSingleSourceWeightedShortestPathParamsErrorMessage = createValidateSingleSourceWeightedShortestPathParamsErrorMessage(); - - @observable - jaccardParams: Jaccard = createJaccardDefaultParams(); - - @observable - validateJaccardParamsErrorMessage = createValidateJaccardParamsErrorMessage(); - - @observable - personalRankParams: PersonalRank = createPersonalRankDefaultParams(); - - @observable - validatePersonalRankErrorMessage = createValidatePersonalRankParamsErrorMessage(); - - @computed get allPropertyIndexProperty() { - return flatten( - this.dataAnalyzeStore.propertyIndexes.map(({ fields }) => fields) - ); - } - - @computed get currentAlgorithmParams() { - switch (this.currentAlgorithm) { - case 'loop-detection': - return this.loopDetectionParams; - case 'focus-detection': - return this.focusDetectionParams; - case 'shortest-path': - return this.shortestPathAlgorithmParams; - case 'shortest-path-all': - return this.shortestPathAllParams; - case 'all-path': - return this.allPathParams; - case 'model-similarity': - return this.modelSimilarityParams; - case 'neighbor-rank': - return this.neighborRankParams; - case 'k-step-neighbor': - return this.kStepNeighborParams; - case 'k-hop': - return this.kHopParams; - case 'custom-path': - return this.customPathParams; - case 'radiographic-inspection': - return this.loopDetectionParams; - case 'same-neighbor': - return this.sameNeighborParams; - case 'weighted-shortest-path': - return this.weightedShortestPathParams; - case 'single-source-weighted-shortest-path': - return this.singleSourceWeightedShortestPathParams; - case 'jaccard': - return this.jaccardParams; - case 'personal-rank': - return this.personalRankParams; - } - } - - @action - switchCollapse(flag: boolean) { - this.isCollapse = flag; - } - - @action - changeCurrentAlgorithm(algorithm: string) { - this.currentAlgorithm = algorithm; - } - - @action - mutateLoopDetectionParams( - key: T, - value: LoopDetectionParams[T] - ) { - this.loopDetectionParams[key] = value; - } - - @action - validateLoopDetectionParams(key: T) { - const value = this.loopDetectionParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.loop-detection.validations.no-empty' - ); - - return; - } - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.loop-detection.validations.no-empty' - ); - - return; - } - - if (!isInt(value as string, { min: 1 })) { - this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.loop-detection.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.loop-detection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.loop-detection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.loop-detection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateLoopDetectionParamsErrorMessage[key] = ''; - } - - @action - resetLoopDetectionParams() { - this.loopDetectionParams = createLoopDetectionDefaultParams(); - this.validateLoopDetectionParamsErrorMessage = createValidateLoopDetectionParamsErrorMessage(); - } - - @action - mutateFocusDetectionParams( - key: T, - value: FocusDetectionParams[T] - ) { - this.focusDetectionParams[key] = value; - } - - @action - validateFocusDetectionParams(key: T) { - const value = this.focusDetectionParams[key]; - - switch (key) { - case 'source': - case 'target': - if (isEmpty(value)) { - this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.focus-detection.validations.no-empty' - ); - - return; - } - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.focus-detection.validations.no-empty' - ); - - return; - } - - if (!isInt(value, { min: 1 })) { - this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.focus-detection.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.focus-detection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.focus-detection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.focus-detection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateFocusDetectionParamsErrorMessage[key] = ''; - } - - @action - resetFocusDetectionParams() { - this.focusDetectionParams = createFocusDetectionDefaultParams(); - this.validateFocusDetectionParamsErrorMessage = createValidateFocusDetectionParamsErrorMessage(); - } - - @action - mutateShortestPathParams( - key: T, - value: ShortestPathAlgorithmParams[T] - ) { - this.shortestPathAlgorithmParams[key] = value; - } - - @action - validateShortestPathParams( - key: T - ) { - const value = this.shortestPathAlgorithmParams[key]; - - switch (key) { - case 'source': - case 'target': - if (isEmpty(value)) { - this.validateShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.no-empty' - ); - - return; - } - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.no-empty' - ); - - return; - } - - if (!isInt(value, { min: 1 })) { - this.validateShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'skip_degree': - if (value !== '' && !isInt(value, { min: 0 })) { - this.validateShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.integer-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateShortestPathParamsErrorMessage[key] = ''; - } - - @action - resetShortestPathParams() { - this.shortestPathAlgorithmParams = createShortestPathDefaultParams(); - this.validateShortestPathParamsErrorMessage = createValidateShortestPathParamsErrorMessage(); - } - - @action - mutateShortestPathAllParams( - key: T, - value: ShortestPathAlgorithmParams[T] - ) { - this.shortestPathAllParams[key] = value; - } - - @action - validateShortestPathAllParams( - key: T - ) { - const value = this.shortestPathAllParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.no-empty' - ); - - return; - } - break; - case 'target': - if (isEmpty(value)) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.no-empty' - ); - - return; - } - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.no-empty' - ); - - return; - } - - if (!isInt(value, { min: 1 })) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value)) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value)) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'skip_degree': - if (value !== '' && !isInt(value, { min: 0 })) { - this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path-all.validations.integer-only' - ); - - return; - } - } - - this.validateShortestPathAllParamsErrorMessage[key] = ''; - } - - @action - resetShortestPathAllParams() { - this.shortestPathAllParams = createShortestPathAllDefaultParams(); - this.validateShortestPathAllParamsErrorMessage = createValidateShortestPathAllParamsErrorMessage(); - } - - @action - mutateAllPathParams( - key: T, - value: AllPathAlgorithmParams[T] - ) { - this.allPathParams[key] = value; - } - - @action - validateAllPathParams(key: T) { - const value = this.allPathParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.all-path.validations.no-empty' - ); - - return; - } - break; - case 'target': - if (isEmpty(value)) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.all-path.validations.no-empty' - ); - - return; - } - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.all-path.validations.no-empty' - ); - - return; - } - - if (!isInt(value, { min: 1 })) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.all-path.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value)) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.all-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value)) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value)) { - this.validateAllPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateAllPathParamsErrorMessage[key] = ''; - } - - @action - resetAllPathParams() { - this.allPathParams = createAllPathDefaultParams(); - this.validateAllPathParamsErrorMessage = createValidateAllPathParamsErrorMessage(); - } - - @action - addModelSimilarityVertexProperty() { - this.modelSimilarityParams.vertexProperty.push(['', '']); - } - - @action - editModelSimilarityVertexProperty( - index: number, - type: 'key' | 'value', - value: string - ) { - if (type === 'key') { - this.modelSimilarityParams.vertexProperty[index][0] = value; - } else { - this.modelSimilarityParams.vertexProperty[index][1] = value; - } - } - - @action - removeModelSimilarityVertexProperty(propertyIndex: number) { - remove( - this.modelSimilarityParams.vertexProperty, - (_, index) => index === propertyIndex - ); - } - - @action - mutateModelSimilarityParams( - key: T, - value: ModelSimilarityParams[T] - ) { - this.modelSimilarityParams[key] = value; - } - - @action - validateModelSimilarityParams(key: T) { - const value = this.modelSimilarityParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' - ); - - return; - } - - break; - case 'least_neighbor': - if (isEmpty(value)) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' - ); - - return; - } - - if (!isInt(value as string, { min: 1 })) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.postive-integer-only' - ); - - return; - } - - break; - case 'similarity': - if (isEmpty(value)) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' - ); - - return; - } - - if ( - Object.is(Number(value), NaN) || - Number(value) > 1 || - Number(value) <= 0 - ) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.similarity' - ); - - return; - } - - break; - case 'max_similar': - if (value !== '' && !isInt(value as string, { min: 0 })) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.integer-only' - ); - - return; - } - - break; - case 'least_similar': - if (value !== '' && !isInt(value as string, { min: 1 })) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.postive-integer-only' - ); - - return; - } - - break; - case 'least_property_number': - if ( - !isEmpty(this.modelSimilarityParams.property_filter) && - isEmpty(value) - ) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' - ); - - return; - } - - if (value !== '' && !isInt(value as string, { min: 2 })) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.integer-gt-1' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.model-similarity.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateModelSimilartiyParamsErrorMessage[key] = ''; - } - - @action - resetModelSimilarityParams() { - this.modelSimilarityParams = createModelSimilarityDefaultParams(); - this.validateModelSimilartiyParamsErrorMessage = createValidateModelSimilarParamsErrorMessage(); - } - - @action - switchModelSimilarityMethod(method: string) { - this.modelSimilarityParams.method = method; - - if (method === 'id') { - this.modelSimilarityParams.vertexType = ''; - this.modelSimilarityParams.vertexProperty = [['', '']]; - this.validateModelSimilartiyParamsErrorMessage.vertexType = ''; - this.validateModelSimilartiyParamsErrorMessage.vertexProperty = ''; - } else { - this.modelSimilarityParams.source = ''; - this.validateModelSimilartiyParamsErrorMessage.source = ''; - } - } - - @action - addNeighborRankRule() { - this.neighborRankParams.steps.push({ - uuid: v4(), - direction: 'BOTH', - labels: ['__all__'], - degree: '10000', - top: '100' - }); - - // add error message together - this.addValidateNeighborRankRule(); - } - - @action - addValidateNeighborRankRule() { - this.validateNeighborRankParamsParamsErrorMessage.steps.push({ - uuid: '', - direction: '', - labels: '', - degree: '', - top: '' - }); - } - - @action - removeNeighborRankRule(ruleIndex: number) { - remove(this.neighborRankParams.steps, (_, index) => index === ruleIndex); - // remove error message together - this.removeValidateNeighborRankRule(ruleIndex); - } - - @action - removeValidateNeighborRankRule(ruleIndex: number) { - remove( - this.validateNeighborRankParamsParamsErrorMessage.steps, - (_, index) => index === ruleIndex - ); - } - - @action - mutateNeighborRankParams( - key: T, - value: NeighborRankParams[T] - ) { - this.neighborRankParams[key] = value; - } - - @action - mutateNeighborRankRuleParams( - key: T, - value: NeighborRankRule[T], - index: number - ) { - this.neighborRankParams.steps[index][key] = value; - } - - @action - validateNeighborRankParams(key: T) { - const value = this.neighborRankParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.no-empty' - ); - - return; - } - - this.validateNeighborRankParamsParamsErrorMessage.source = ''; - break; - case 'alpha': - if (isEmpty(value)) { - this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.no-empty' - ); - - return; - } - - if ( - Object.is(Number(value), NaN) || - Number(value) > 1 || - Number(value) <= 0 - ) { - this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.range' - ); - - return; - } - - this.validateNeighborRankParamsParamsErrorMessage.alpha = ''; - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - this.validateNeighborRankParamsParamsErrorMessage.capacity = ''; - break; - } - } - - @action - validateNeighborRankRules( - key: T, - ruleIndex: number - ) { - const value = this.neighborRankParams.steps[ruleIndex][key]; - - switch (key) { - case 'degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateNeighborRankParamsParamsErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' - ); - - return; - } - break; - case 'top': - if (!isEmpty(value) && !isInt(value as string, { min: 0, max: 999 })) { - this.validateNeighborRankParamsParamsErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.integer-only-lt-1000' - ); - - return; - } - break; - default: - return; - } - - this.validateNeighborRankParamsParamsErrorMessage.steps[ruleIndex][key] = - ''; - } - - @action - resetNeighborRankParams() { - this.neighborRankParams = createNeighborRankDefaultParams(); - this.validateNeighborRankParamsParamsErrorMessage = createValidateNeighborRankErrorMessage(); - } - - @action - mutateKStepNeighborParams( - key: T, - value: KStepNeighbor[T] - ) { - this.kStepNeighborParams[key] = value; - } - - @action - validateKStepNeighborParams(key: T) { - const value = this.kStepNeighborParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-step-neighbor.validations.no-empty' - ); - - return; - } - - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-step-neighbor.validations.no-empty' - ); - - return; - } - - if (!isInt(value, { min: 1 })) { - this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-step-neighbor.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value)) { - this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-step-neighbor.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value)) { - this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-step-neighbor.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateKStepNeighborParamsErrorMessage[key] = ''; - } - - @action - resetKStepNeighborParams() { - this.kStepNeighborParams = createKStepNeighborDefaultParams(); - this.validateKStepNeighborParamsErrorMessage = createValidateKStepNeighborParamsErrorMessage(); - } - - @action - mutateKHopParams(key: T, value: KHop[T]) { - this.kHopParams[key] = value; - } - - @action - validateKHopParams(key: T) { - const value = this.kHopParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateKHopParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-hop.validations.no-empty' - ); - - return; - } - - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateKHopParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-hop.validations.no-empty' - ); - - return; - } - - if (!isInt(value as string, { min: 1 })) { - this.validateKHopParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-hop.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateKHopParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-hop.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validateKHopParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-hop.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateKHopParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.k-hop.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateKHopParamsErrorMessage[key] = ''; - } - - @action - resetKHopParams() { - this.kHopParams = createKHopDefaultParams(); - this.validateKHopParamsErrorMessage = createValidateKHopParamsErrorMessage(); - } - - @action - addCustomPathRule() { - this.customPathParams.steps.push({ - uuid: v4(), - direction: 'BOTH', - labels: this.dataAnalyzeStore.edgeTypes.map(({ name }) => name), - weight_by: '', - default_weight: '', - properties: [['', '']], - degree: '10000', - sample: '100' - }); - - // add error message together - this.validateCustomPathParmasErrorMessage.steps.push({ - uuid: '', - direction: '', - labels: '', - weight_by: '', - default_weight: '', - properties: '', - degree: '', - sample: '' - }); - } - - @action - removeCustomPathRule(ruleIndex: number) { - remove(this.customPathParams.steps, (_, index) => index === ruleIndex); - // remove error message together - remove( - this.validateCustomPathParmasErrorMessage.steps, - (_, index) => index === ruleIndex - ); - } - - @action - addCustomPathVertexProperty() { - this.customPathParams.vertexProperty.push(['', '']); - } - - @action - removeCustomPathVertexProperty(propertyIndex: number) { - remove( - this.customPathParams.vertexProperty, - (_, index) => index === propertyIndex - ); - } - - @action - addCustomPathRuleProperty(ruleIndex: number) { - this.customPathParams.steps[ruleIndex].properties.push(['', '']); - } - - @action - removeCustomPathRuleProperty(ruleIndex: number, propertyIndex: number) { - remove( - this.customPathParams.steps[ruleIndex].properties, - (_, index) => index === propertyIndex - ); - } - - @action - mutateCustomPathParams( - key: T, - value: CustomPathParams[T] - ) { - this.customPathParams[key] = value; - } - - @action - mutateCustomPathRuleParams( - key: T, - value: CustomPathRule[T], - index: number - ) { - this.customPathParams.steps[index][key] = value; - } - - @action - validateCustomPathParams(key: T) { - const value = this.customPathParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateCustomPathParmasErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.custom-path.validations.no-empty' - ); - - return; - } - - this.validateCustomPathParmasErrorMessage.source = ''; - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateCustomPathParmasErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.custom-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - this.validateCustomPathParmasErrorMessage.capacity = ''; - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validateCustomPathParmasErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.custom-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - this.validateCustomPathParmasErrorMessage.capacity = ''; - break; - } - } - - @action - validateCustomPathRules( - key: T, - ruleIndex: number - ) { - const value = this.customPathParams.steps[ruleIndex][key]; - - switch (key) { - case 'properties': - if (isEmpty(value)) { - this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.custom-path.validations.no-empty' - ); - - return; - } - - break; - case 'degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' - ); - - return; - } - break; - case 'sample': - if (!isGtNegativeOneButZero(value as string)) { - this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' - ); - - return; - } - break; - case 'default_weight': - if (isEmpty(value)) { - this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.custom-path.validations.no-empty' - ); - - return; - } - - if (!isFloat(value as string)) { - this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.custom-path.validations.input-number' - ); - - return; - } - - break; - default: - return; - } - - this.validateCustomPathParmasErrorMessage.steps[ruleIndex][key] = ''; - } - - @action - switchCustomPathMethod(method: string) { - this.customPathParams.method = method; - - if (method === 'id') { - this.customPathParams.vertexType = ''; - this.customPathParams.vertexProperty = [['', '']]; - this.validateCustomPathParmasErrorMessage.vertexType = ''; - this.validateCustomPathParmasErrorMessage.vertexProperty = ''; - } else { - this.customPathParams.source = ''; - this.validateCustomPathParmasErrorMessage.source = ''; - } - } - - @action - resetCustomPathParams() { - this.customPathParams = createCustomPathDefaultParams(); - - // manually assign step edge values - this.customPathParams.steps[0].labels = this.dataAnalyzeStore.edgeTypes.map( - ({ name }) => name - ); - this.validateCustomPathParmasErrorMessage = createValidateCustomPathParamsErrorMessage(); - } - - @action - mutateRadiographicInspectionParams( - key: T, - value: RadiographicInspection[T] - ) { - this.radiographicInspectionParams[key] = value; - } - - @action - validateRadiographicInspectionParams( - key: T - ) { - const value = this.radiographicInspectionParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateRadiographicInspectionParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.radiographic-inspection.validations.no-empty' - ); - - return; - } - - break; - case 'max_depth': - if (isEmpty(value)) { - this.validateRadiographicInspectionParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.radiographic-inspection.validations.no-empty' - ); - - return; - } - - if (!isInt(value, { min: 1 })) { - this.validateRadiographicInspectionParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.radiographic-inspection.validations.postive-integer-only' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value)) { - this.validateRadiographicInspectionParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.radiographic-inspection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value)) { - this.validateRadiographicInspectionParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.radiographic-inspection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value)) { - this.validateRadiographicInspectionParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.radiographic-inspection.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateRadiographicInspectionParamsErrorMessage[key] = ''; - } - - @action - resetRadiographicInspectionParams() { - this.radiographicInspectionParams = createRadiographicInspectionDefaultParams(); - this.validateRadiographicInspectionParamsErrorMessage = createValidateRadiographicInspectionParamsErrorMessage(); - } - - @action - mutateSameNeighborParams( - key: T, - value: SameNeighbor[T] - ) { - this.sameNeighborParams[key] = value; - } - - @action - validateSameNeighborParams(key: T) { - const value = this.sameNeighborParams[key]; - - switch (key) { - case 'vertex': - if (isEmpty(value)) { - this.validateSameNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.same-neighbor.validations.no-empty' - ); - - return; - } - - if (value === this.sameNeighborParams.other) { - this.validateSameNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.same-neighbor.validations.no-same-value-with-other' - ); - - return; - } - - break; - case 'other': - if (isEmpty(value)) { - this.validateSameNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.same-neighbor.validations.no-empty' - ); - - return; - } - - if (value === this.sameNeighborParams.vertex) { - this.validateSameNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.same-neighbor.validations.no-same-value-with-vertex' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value)) { - this.validateSameNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.same-neighbor.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value)) { - this.validateSameNeighborParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.same-neighbor.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateSameNeighborParamsErrorMessage[key] = ''; - } - - @action - resetSameNeighborParams() { - this.sameNeighborParams = createSameNeighborDefaultParams(); - this.validateSameNeighborParamsErrorMessage = createValidateSameNeighborParamsErrorMessage(); - } - - @action - mutateWeightedShortestPathParams( - key: T, - value: WeightedShortestPath[T] - ) { - this.weightedShortestPathParams[key] = value; - } - - @action - validateWeightedShortestPathParams( - key: T - ) { - const value = this.weightedShortestPathParams[key]; - - switch (key) { - case 'source': - case 'target': - if (isEmpty(value)) { - this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.weighted-shortest-path.validations.no-empty' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.weighted-shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'skip_degree': - if (value !== '' && !isInt(value as string, { min: 0 })) { - this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.weighted-shortest-path.validations.integer-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.weighted-shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateWeightedShortestPathParamsErrorMessage[key] = ''; - } - - @action - resetWeightedShortestPathParams() { - this.weightedShortestPathParams = createWeightedShortestPathDefaultParams(); - this.validateWeightedShortestPathParamsErrorMessage = createValidateWeightedShortestPathParamsErrorMessage(); - } - - @action - mutateSingleSourceWeightedShortestPathParams< - T extends keyof SingleSourceWeightedShortestPath - >(key: T, value: SingleSourceWeightedShortestPath[T]) { - this.singleSourceWeightedShortestPathParams[key] = value; - } - - @action - validateSingleSourceWeightedShortestPathParams< - T extends keyof SingleSourceWeightedShortestPath - >(key: T) { - const value = this.singleSourceWeightedShortestPathParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.no-empty' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'skip_degree': - if (value !== '' && !isInt(value as string, { min: 0 })) { - this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.integer-only' - ); - - return; - } - - break; - case 'capacity': - if (!isGtNegativeOneButZero(value as string)) { - this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ - key - ] = i18next.t( - 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateSingleSourceWeightedShortestPathParamsErrorMessage[key] = ''; - } - - @action - resetSingleSourceWeightedShortestPathParams() { - this.singleSourceWeightedShortestPathParams = createSingleSourceWeightedShortestPathDefaultParams(); - this.validateSingleSourceWeightedShortestPathParamsErrorMessage = createValidateSingleSourceWeightedShortestPathParamsErrorMessage(); - } - - @action - mutateJaccardParams(key: T, value: Jaccard[T]) { - this.jaccardParams[key] = value; - } - - @action - validateJaccardParams(key: T) { - const value = this.jaccardParams[key]; - - switch (key) { - case 'vertex': - if (isEmpty(value)) { - this.validateJaccardParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.jaccard.validations.no-empty' - ); - - return; - } - - if (value === this.jaccardParams.other) { - this.validateJaccardParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.jaccard.validations.no-same-value-with-other' - ); - - return; - } - - break; - case 'other': - if (isEmpty(value)) { - this.validateJaccardParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.jaccard.validations.no-empty' - ); - - return; - } - - if (value === this.jaccardParams.vertex) { - this.validateJaccardParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.jaccard.validations.no-same-value-with-vertex' - ); - - return; - } - - break; - case 'max_degree': - if (!isGtNegativeOneButZero(value)) { - this.validateJaccardParamsErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.jaccard.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validateJaccardParamsErrorMessage[key] = ''; - } - - @action - resetJaccardParams() { - this.jaccardParams = createJaccardDefaultParams(); - this.validateJaccardParamsErrorMessage = createValidateJaccardParamsErrorMessage(); - } - - @action - mutatePersonalRankParams( - key: T, - value: PersonalRank[T] - ) { - this.personalRankParams[key] = value; - } - - @action - validatePersonalRankParams(key: T) { - const value = this.personalRankParams[key]; - - switch (key) { - case 'source': - if (isEmpty(value)) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.no-empty' - ); - - return; - } - - break; - case 'alpha': - if (isEmpty(value)) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.no-empty' - ); - - return; - } - - if ( - Object.is(Number(value), NaN) || - Number(value) > 1 || - Number(value) <= 0 - ) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.alpha-range' - ); - - return; - } - - break; - case 'max_depth': - if (isEmpty(value)) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.no-empty' - ); - - return; - } - - if ( - Object.is(Number(value), NaN) || - Number(value) > 50 || - Number(value) <= 0 - ) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.depth-range' - ); - - return; - } - - break; - case 'degree': - if (!isGtNegativeOneButZero(value as string)) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - case 'limit': - if (!isGtNegativeOneButZero(value as string)) { - this.validatePersonalRankErrorMessage[key] = i18next.t( - 'data-analyze.algorithm-forms.personal-rank.validations.positive-integer-or-negative-one-only' - ); - - return; - } - - break; - } - - this.validatePersonalRankErrorMessage[key] = ''; - } - - @action - resetPersonalRankParams() { - this.personalRankParams = createPersonalRankDefaultParams(); - this.validatePersonalRankErrorMessage = createValidatePersonalRankParamsErrorMessage(); - } - - @action - dispose() { - this.requestStatus = initializeRequestStatus(); - this.errorInfo = initializeErrorInfo(); - this.currentAlgorithm = ''; - - this.resetLoopDetectionParams(); - this.resetFocusDetectionParams(); - this.resetShortestPathParams(); - this.resetShortestPathAllParams(); - this.resetAllPathParams(); - this.resetModelSimilarityParams(); - this.resetNeighborRankParams(); - this.resetKStepNeighborParams(); - this.resetKHopParams(); - this.resetCustomPathParams(); - this.resetRadiographicInspectionParams(); - this.resetSameNeighborParams(); - this.resetWeightedShortestPathParams(); - this.resetSingleSourceWeightedShortestPathParams(); - this.resetJaccardParams(); - this.resetPersonalRankParams(); - } -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts deleted file mode 100644 index 763723830..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts +++ /dev/null @@ -1,2538 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action, flow, computed, runInAction } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { - isUndefined, - cloneDeep, - isEmpty, - remove, - size, - fromPairs, - invert, - flatten, - uniq -} from 'lodash-es'; -import vis from 'vis-network'; -import isInt from 'validator/lib/isInt'; -import isUUID from 'validator/lib/isUUID'; -import i18next from '../../../i18n'; - -import { AlgorithmAnalyzerStore } from './algorithmAnalyzerStore'; -import { - initalizeErrorInfo, - initalizeRequestStatus, - createGraphNode, - createGraphEdge, - createGraphEditableProperties, - createNewGraphDataConfig -} from '../../factory/dataAnalyzeStore/dataAnalyzeStore'; -import { Algorithm } from '../../factory/dataAnalyzeStore/algorithmStore'; -import { - checkIfLocalNetworkOffline, - convertArrayToString, - validateGraphProperty, - vertexRadiusMapping, - edgeWidthMapping -} from '../../utils'; - -import { baseUrl, responseData, dict } from '../../types/common'; -import type { - GraphData, - GraphDataResponse -} from '../../types/GraphManagementStore/graphManagementStore'; -import type { - ColorSchemas, - RuleMap, - FetchColorSchemas, - FetchFilteredPropertyOptions, - NewGraphData, - GraphNode, - GraphEdge, - GraphView, - FetchGraphResponse, - ValueTypes, - AddQueryCollectionParams, - ExecutionLogs, - ExecutionLogsResponse, - FavoriteQuery, - FavoriteQueryResponse, - EditableProperties, - ShortestPathAlgorithmParams, - LoopDetectionParams, - FocusDetectionParams, - ShortestPathAllAlgorithmParams, - AllPathAlgorithmParams, - ModelSimilarityParams, - NeighborRankParams, - NeighborRankRule, - KHop, - RadiographicInspection, - SameNeighbor, - WeightedShortestPath, - SingleSourceWeightedShortestPath, - Jaccard, - PersonalRank, - CustomPathRule, - KStepNeighbor -} from '../../types/GraphManagementStore/dataAnalyzeStore'; -import type { - VertexTypeListResponse, - VertexType, - EdgeType, - MetadataPropertyIndex -} from '../../types/GraphManagementStore/metadataConfigsStore'; -import type { EdgeTypeListResponse } from '../../types/GraphManagementStore/metadataConfigsStore'; -import { - AlgorithmInternalNameMapping, - removeLabelKey, - filterEmptyAlgorightmParams -} from '../../../utils'; - -const ruleMap: RuleMap = { - 大于: 'gt', - 大于等于: 'gte', - 等于: 'eq', - 小于: 'lt', - 小于等于: 'lte', - True: 'eq', - False: 'eq' -}; - -const monthMaps: Record = { - Jan: '01', - Feb: '02', - Mar: '03', - Apr: '04', - May: '05', - Jun: '06', - Jul: '07', - Aug: '08', - Sep: '09', - Oct: '10', - Nov: '11', - Dec: '12' -}; - -export class DataAnalyzeStore { - [key: string]: any; - algorithmAnalyzerStore: AlgorithmAnalyzerStore; - - constructor() { - this.algorithmAnalyzerStore = new AlgorithmAnalyzerStore(this); - } - - @observable currentId: number | null = null; - @observable currentTab = 'gremlin-analyze'; - @observable searchText = ''; - @observable isSidebarExpanded = false; - @observable isLoadingGraph = false; - @observable isGraphLoaded = false; - @observable isFullScreenReuslt = false; - @observable isShowFilterBoard = false; - // right-side drawer - @observable isShowGraphInfo = false; - @observable isClickOnNodeOrEdge = false; - // v1.5.0: gremlin query mode - @observable queryMode: 'query' | 'task' = 'query'; - @observable favoritePopUp = ''; - // whether user selects vertex or edge - @observable graphInfoDataSet = ''; - @observable codeEditorInstance: CodeMirror.Editor | null = null; - @observable codeEditorText = ''; - @observable dynamicAddGraphDataStatus = ''; - @observable favoriteQueriesSortOrder: Record< - 'time' | 'name', - 'desc' | 'asc' | '' - > = { - time: '', - name: '' - }; - - // vis instance - @observable.ref visNetwork: vis.Network | null = null; - @observable.ref visDataSet: Record<'nodes' | 'edges', any> | null = null; - @observable.ref visCurrentCoordinates = { - domX: '', - domY: '', - canvasX: '', - canvasY: '' - }; - - // Mutate this variable to let mobx#reaction fires it's callback and set value for CodeEditor - @observable pulse = false; - - // datas - @observable.ref idList: { id: number; name: string }[] = []; - @observable.ref properties: ValueTypes[] = []; - @observable.ref valueTypes: Record = {}; - @observable.ref vertexTypes: VertexType[] = []; - @observable.ref edgeTypes: EdgeType[] = []; - @observable.ref propertyIndexes: MetadataPropertyIndex[] = []; - @observable.ref colorSchemas: ColorSchemas = {}; - @observable.ref colorList: string[] = []; - @observable.ref colorMappings: Record = {}; - @observable.ref vertexSizeMappings: Record = {}; - @observable.ref vertexWritingMappings: Record = {}; - @observable.ref edgeColorMappings: Record = {}; - @observable.ref edgeWithArrowMappings: Record = {}; - @observable.ref edgeThicknessMappings: Record = {}; - @observable.ref edgeWritingMappings: Record = {}; - @observable.ref - originalGraphData: FetchGraphResponse = {} as FetchGraphResponse; - @observable.ref - graphData: FetchGraphResponse = {} as FetchGraphResponse; - @observable.ref - expandedGraphData: FetchGraphResponse = {} as FetchGraphResponse; - @observable.ref - relatedGraphEdges: string[] = []; - @observable vertexCollection = new Set(); - @observable edgeCollection = new Set(); - @observable.ref executionLogData: ExecutionLogs[] = []; - @observable.ref favoriteQueryData: FavoriteQuery[] = []; - @observable.ref graphDataEdgeTypes: string[] = []; - @observable.ref filteredPropertyOptions: string[] = []; - - // data struct sync to GraphManagementStore - @observable.shallow isSearched = { - status: false, - value: '' - }; - - @observable filteredGraphQueryOptions = { - line: { - type: '', - direction: 'BOTH' - } as Record<'type' | 'direction', string>, - properties: [] as dict[] - }; - - @observable - newGraphNodeConfigs: NewGraphData = createNewGraphDataConfig(); - @observable - newGraphEdgeConfigs: NewGraphData = createNewGraphDataConfig(); - @observable selectedGraphData: GraphNode = createGraphNode(); - @observable - editedSelectedGraphDataProperties = createGraphEditableProperties(); - @observable selectedGraphLinkData: GraphEdge = createGraphEdge(); - // @observable - // editedSelectedGraphEdgeProperties = createGraphEditableProperties(); - @observable.ref rightClickedGraphData: GraphNode = createGraphNode(); - - @observable pageConfigs: { - [key: string]: { - pageNumber: number; - pageTotal: number; - pageSize?: number; - }; - } = { - tableResult: { - pageNumber: 1, - pageTotal: 0 - }, - executionLog: { - pageNumber: 1, - pageSize: 10, - pageTotal: 0 - }, - favoriteQueries: { - pageNumber: 1, - pageSize: 10, - pageTotal: 0 - } - }; - - @observable.shallow requestStatus = initalizeRequestStatus(); - @observable errorInfo = initalizeErrorInfo(); - - @computed get allPropertiesFromEdge() { - return uniq( - flatten( - this.edgeTypes.map(({ properties }) => - properties.map(({ name }) => name) - ) - ) - ); - } - - @computed get graphNodes(): GraphNode[] { - return this.originalGraphData.data.graph_view.vertices.map( - ({ id, label, properties }) => { - // if user create new node or edge in query statement - // rather in schema manager, there's no style in default - const joinedLabel = !isUndefined(this.vertexWritingMappings[label]) - ? this.vertexWritingMappings[label] - .map((field) => (field === '~id' ? id : properties[field])) - .filter((label) => label !== undefined && label !== null) - .join('-') - : id; - - return { - id, - label: - size(joinedLabel) <= 15 - ? joinedLabel - : joinedLabel.slice(0, 15) + '...', - vLabel: label, - value: vertexRadiusMapping[this.vertexSizeMappings[label]], - font: { size: 16 }, - properties, - title: ` -
-
${i18next.t('addition.common.vertex-type')}:
-
${label}
-
-
-
${i18next.t('addition.common.vertex-id')}:
-
${id}
-
- ${Object.entries(properties) - .map(([key, value]) => { - return `
-
${key}:
-
${convertArrayToString(value)}
-
`; - }) - .join('')} - `, - color: { - background: this.colorMappings[label] || '#5c73e6', - border: this.colorMappings[label] || '#5c73e6', - highlight: { background: '#fb6a02', border: '#fb6a02' }, - hover: { background: '#ec3112', border: '#ec3112' } - }, - // reveal label when zoom to max - scaling: { - label: { - max: Infinity, - maxVisible: Infinity - } - }, - chosen: { - node( - values: any, - id: string, - selected: boolean, - hovering: boolean - ) { - if (hovering || selected) { - values.shadow = true; - values.shadowColor = 'rgba(0, 0, 0, 0.6)'; - values.shadowX = 0; - values.shadowY = 0; - values.shadowSize = 25; - } - - if (selected) { - values.size += 5; - } - } - } - }; - } - ); - } - - @computed get graphEdges(): GraphEdge[] { - return this.originalGraphData.data.graph_view.edges.map( - ({ id, label, source, target, properties }) => { - // if user create new node or edge in query statement - // rather in schema manager, there's no style in default - const joinedLabel = !isUndefined(this.edgeWritingMappings[label]) - ? this.edgeWritingMappings[label] - .map((field) => (field === '~id' ? label : properties[field])) - .join('-') - : label; - - return { - id, - label: - joinedLabel.length <= 15 - ? joinedLabel - : joinedLabel.slice(0, 15) + '...', - properties, - source, - target, - from: source, - to: target, - font: { - size: 16, - strokeWidth: 0, - color: '#666' - }, - arrows: this.edgeWithArrowMappings[label] ? 'to' : '', - color: this.edgeColorMappings[label], - value: edgeWidthMapping[this.edgeThicknessMappings[label]], - title: ` -
-
${i18next.t('addition.common.edge-type')}:
-
${label}
-
-
-
${i18next.t('addition.common.edge-id')}:
-
${id}
-
- ${Object.entries(properties) - .map(([key, value]) => { - return `
-
${key}:
-
${convertArrayToString(value)}
-
`; - }) - .join('')} - ` - }; - } - ); - } - - @action - setCurrentId(id: number) { - this.currentId = id; - } - - @action - setCurrentTab(tab: string) { - this.currentTab = tab; - } - - @action - switchGraphLoaded(flag: boolean) { - this.isGraphLoaded = flag; - } - - @action - setFullScreenReuslt(flag: boolean) { - this.isFullScreenReuslt = flag; - } - - @action - setQueryMode(mode: 'query' | 'task') { - this.queryMode = mode; - } - - @action - setDynamicAddGraphDataStatus(status: string) { - this.dynamicAddGraphDataStatus = status; - } - - @action - setNewGraphDataConfig( - type: 'vertex' | 'edge', - key: T, - value: NewGraphData[T] - ) { - if (type === 'vertex') { - this.newGraphNodeConfigs[key] = value; - } else { - this.newGraphEdgeConfigs[key] = value; - } - } - - @action - setNewGraphDataConfigProperties( - type: 'vertex' | 'edge', - nullable: 'nullable' | 'nonNullable', - key: string, - value: string - ) { - if (type === 'vertex') { - if (nullable === 'nullable') { - this.newGraphNodeConfigs.properties.nullable.set(key, value); - } else { - this.newGraphNodeConfigs.properties.nonNullable.set(key, value); - } - } else { - if (nullable === 'nullable') { - this.newGraphEdgeConfigs.properties.nullable.set(key, value); - } else { - this.newGraphEdgeConfigs.properties.nonNullable.set(key, value); - } - } - } - - @action - syncNewGraphDataProperties(type: 'vertex' | 'edge') { - const config = - type === 'vertex' ? this.newGraphNodeConfigs : this.newGraphEdgeConfigs; - config.properties.nonNullable.clear(); - config.properties.nullable.clear(); - - const selectedLabel = - type === 'vertex' - ? this.vertexTypes.find(({ name }) => name === config.label) - : this.edgeTypes.find(({ name }) => name === config.label); - - if (!isUndefined(selectedLabel)) { - const nonNullableProperties = selectedLabel.properties.filter( - ({ nullable }) => !nullable - ); - - nonNullableProperties.forEach(({ name }) => { - config.properties.nonNullable.set(name, ''); - }); - - const nullableProperties = selectedLabel.properties.filter( - ({ nullable }) => nullable - ); - - nullableProperties.forEach(({ name }) => { - config.properties.nullable.set(name, ''); - }); - } - } - - @action - syncGraphEditableProperties(type: 'vertex' | 'edge') { - Object.values(this.editedSelectedGraphDataProperties).forEach( - (property) => { - property.clear(); - } - ); - - const selectedLabel = - type === 'vertex' - ? this.vertexTypes.find( - ({ name }) => name === this.selectedGraphData.label - ) - : this.edgeTypes.find( - ({ name }) => name === this.selectedGraphLinkData.label - ); - - if (!isUndefined(selectedLabel)) { - const selectedGraphData = - type === 'vertex' ? this.selectedGraphData : this.selectedGraphLinkData; - const selectedGraphDataPropertKeys = Object.keys( - type === 'vertex' - ? this.selectedGraphData.properties - : this.selectedGraphLinkData.properties - ); - - // to keep sort of primary keys, need to iter it first - if (type === 'vertex') { - (selectedLabel as VertexType).primary_keys.forEach((name) => { - if (selectedGraphDataPropertKeys.includes(name)) { - this.editedSelectedGraphDataProperties.primary.set( - name, - convertArrayToString(selectedGraphData.properties[name]) - ); - - remove(selectedGraphDataPropertKeys, (key) => key === name); - } - }); - } else { - (selectedLabel as EdgeType).sort_keys.forEach((name) => { - if (selectedGraphDataPropertKeys.includes(name)) { - this.editedSelectedGraphDataProperties.primary.set( - name, - convertArrayToString(selectedGraphData.properties[name]) - ); - - remove(selectedGraphDataPropertKeys, (key) => key === name); - } - }); - } - - selectedLabel.properties - .filter(({ nullable }) => !nullable) - .forEach(({ name }) => { - if (selectedGraphDataPropertKeys.includes(name)) { - this.editedSelectedGraphDataProperties.nonNullable.set( - name, - convertArrayToString(selectedGraphData.properties[name]) - ); - } - - remove(selectedGraphDataPropertKeys, (key) => key === name); - }); - - selectedLabel.properties - .filter(({ nullable }) => nullable) - .forEach(({ name }) => { - if (selectedGraphDataPropertKeys.includes(name)) { - this.editedSelectedGraphDataProperties.nullable.set( - name, - convertArrayToString(selectedGraphData.properties[name]) - ); - } - }); - } - } - - @action - resetNewGraphData(type: 'vertex' | 'edge') { - if (type === 'vertex') { - this.newGraphNodeConfigs = createNewGraphDataConfig(); - } else { - this.newGraphEdgeConfigs = createNewGraphDataConfig(); - } - } - - @action - setVisNetwork(visNetwork: vis.Network) { - this.visNetwork = visNetwork; - } - - @action - setVisDataSet(visDataSet: Record<'nodes' | 'edges', any>) { - this.visDataSet = visDataSet; - } - - @action - setVisCurrentCoordinates(coordinates: { - domX: string; - domY: string; - canvasX: string; - canvasY: string; - }) { - this.visCurrentCoordinates = coordinates; - } - - @action - mutateSearchText(text: string) { - this.searchText = text; - } - - @action - switchShowScreenInfo(flag: boolean) { - this.isShowGraphInfo = flag; - } - - @action - switchClickOnNodeOrEdge(flag: boolean) { - this.isClickOnNodeOrEdge = flag; - } - - @action - switchShowFilterBoard(flag: boolean) { - this.isShowFilterBoard = flag; - } - - @action - switchShowScreeDataSet(dataSet: string) { - this.graphInfoDataSet = dataSet; - } - - @action - setFavoritePopUp(popupCategory: string) { - this.favoritePopUp = popupCategory; - } - - @action - triggerLoadingStatementsIntoEditor() { - this.pulse = !this.pulse; - } - - @action - assignCodeEditorInstance(instance: CodeMirror.Editor) { - this.codeEditorInstance = instance; - } - - @action - mutateCodeEditorText(text: string) { - this.codeEditorText = text; - } - - // change selected graph node - @action - changeSelectedGraphData(selectedData: GraphNode) { - this.selectedGraphData = selectedData; - } - - // change selected graph edge - @action - changeSelectedGraphLinkData(selectedLinkData: GraphEdge) { - this.selectedGraphLinkData = selectedLinkData; - } - - @action - changeRightClickedGraphData(rightClickedData: GraphNode) { - this.rightClickedGraphData = rightClickedData; - } - - @action - mutatePageNumber(category: string, pageNumber: number) { - this.pageConfigs[category].pageNumber = pageNumber; - } - - @action - mutatePageSize(category: string, pageSize: number) { - this.pageConfigs[category].pageSize = pageSize; - } - - @action - editEdgeFilterOption(key: 'type' | 'direction', value: string) { - this.filteredGraphQueryOptions.line[key] = value; - } - - @action - addPropertyFilterOption() { - this.filteredGraphQueryOptions.properties.push({ - property: '', - rule: '', - value: '' - }); - } - - @action - editPropertyFilterOption( - key: 'property' | 'rule' | 'value', - value: string | number, - index: number - ) { - this.filteredGraphQueryOptions.properties[index][key] = value; - } - - @action - deletePropertyFilterOption(index: number) { - this.filteredGraphQueryOptions.properties.splice(index, 1); - } - - @action - addTempExecLog() { - const date = new Date(); - const [week, month, day, year, time] = date.toString().split(' '); - const timeString = `${year}-${monthMaps[month]}-${day} ${time}`; - - const tempData: ExecutionLogs = { - id: NaN, - async_id: NaN, - algorithm_name: - this.currentTab === 'algorithm-analyze' - ? invert(AlgorithmInternalNameMapping)[ - this.algorithmAnalyzerStore.currentAlgorithm - ] - : '', - async_status: 'UNKNOWN', - type: - this.currentTab === 'algorithm-analyze' - ? 'ALGORITHM' - : this.queryMode === 'query' - ? 'GREMLIN' - : 'GREMLIN_ASYNC', - content: - this.currentTab === 'algorithm-analyze' - ? JSON.stringify(this.algorithmAnalyzerStore.currentAlgorithmParams) - : this.codeEditorText, - status: 'RUNNING', - duration: '0ms', - create_time: timeString - }; - - this.executionLogData = [tempData].concat( - this.executionLogData.slice(0, 9) - ); - - return window.setInterval(() => { - this.executionLogData[0].duration = - String(Number(this.executionLogData[0].duration.split('ms')[0]) + 10) + - 'ms'; - - runInAction(() => { - this.executionLogData = this.executionLogData.slice(); - }); - }, 10); - } - - @action - swtichIsSearchedStatus(isSearched: boolean) { - this.isSearched.status = isSearched; - - isSearched - ? (this.isSearched.value = this.searchText) - : (this.isSearched.value = ''); - } - - @action - changeFavoriteQueriesSortOrder( - key: 'time' | 'name', - order: 'desc' | 'asc' | '' - ) { - this.favoriteQueriesSortOrder[key] = order; - } - - @action - clearFilteredGraphQueryOptions() { - this.filteredGraphQueryOptions = { - line: { - type: '', - direction: 'BOTH' - } as Record<'type' | 'direction', string>, - properties: [] as dict[] - }; - } - - @observable - validateAddGraphNodeErrorMessage: NewGraphData | null = null; - @observable - validateAddGraphEdgeErrorMessage: NewGraphData | null = null; - @observable - validateEditableGraphDataPropertyErrorMessage: EditableProperties | null = null; - - @action - initValidateAddGraphDataErrorMessage(type: 'vertex' | 'edge') { - const config = - type === 'vertex' ? this.newGraphNodeConfigs : this.newGraphEdgeConfigs; - const nonNullable = new Map([...config.properties.nonNullable]); - const nullable = new Map([...config.properties.nullable]); - - if (type === 'vertex') { - this.validateAddGraphNodeErrorMessage = { - id: '', - label: '', - properties: { - nonNullable, - nullable - } - }; - } else { - this.validateAddGraphEdgeErrorMessage = { - id: '', - label: '', - properties: { - nonNullable, - nullable - } - }; - } - } - - @action - editGraphDataProperties( - nullable: 'nonNullable' | 'nullable', - key: string, - value: string - ) { - this.editedSelectedGraphDataProperties[nullable].set(key, value); - } - - @action - initValidateEditGraphDataPropertiesErrorMessage() { - this.validateEditableGraphDataPropertyErrorMessage = { - nonNullable: new Map(), - nullable: new Map() - }; - - this.editedSelectedGraphDataProperties.nonNullable.forEach((value, key) => { - this.validateEditableGraphDataPropertyErrorMessage!.nonNullable.set( - key, - '' - ); - }); - - this.editedSelectedGraphDataProperties.nullable.forEach((value, key) => { - this.validateEditableGraphDataPropertyErrorMessage!.nullable.set(key, ''); - }); - } - - @action - validateAddGraphNode( - idStrategy: string, - initial = false, - category?: 'id' | 'nonNullable' | 'nullable', - key?: string - ) { - if (category === 'id') { - if (idStrategy === 'CUSTOMIZE_STRING') { - this.validateAddGraphNodeErrorMessage!.id = - initial || !isEmpty(this.newGraphNodeConfigs.id) - ? '' - : i18next.t('addition.store.illegal-data-format'); - } - - if (idStrategy === 'CUSTOMIZE_NUMBER') { - this.validateAddGraphNodeErrorMessage!.id = - initial || isInt(this.newGraphNodeConfigs.id!) - ? '' - : i18next.t('addition.store.illegal-data-format'); - } - - if (idStrategy === 'CUSTOMIZE_UUID') { - this.validateAddGraphNodeErrorMessage!.id = - initial || isUUID(String(this.newGraphNodeConfigs.id), 4) - ? '' - : i18next.t('addition.store.illegal-data-format'); - } - } - - if (category === 'nonNullable') { - if ( - initial || - isEmpty(this.newGraphNodeConfigs.properties.nonNullable.get(key!)) - ) { - this.validateAddGraphNodeErrorMessage?.properties.nonNullable.set( - key!, - i18next.t('addition.store.cannot-be-empty') - ); - - return; - } - - if ( - initial || - !validateGraphProperty( - this.valueTypes[key!], - this.newGraphNodeConfigs.properties.nonNullable.get(key!)! - ) - ) { - this.validateAddGraphNodeErrorMessage?.properties.nonNullable.set( - key!, - i18next.t('addition.store.illegal-data-format') - ); - - return; - } - - this.validateAddGraphNodeErrorMessage?.properties.nonNullable.set( - key!, - '' - ); - } - - if (category === 'nullable') { - if ( - initial || - !validateGraphProperty( - this.valueTypes[key!], - this.newGraphNodeConfigs.properties.nullable.get(key!)!, - true - ) - ) { - this.validateAddGraphNodeErrorMessage?.properties.nullable.set( - key!, - i18next.t('addition.store.illegal-data-format') - ); - - return; - } - - this.validateAddGraphNodeErrorMessage?.properties.nullable.set(key!, ''); - } - } - - @action - validateAddGraphEdge( - category: 'id' | 'nonNullable' | 'nullable', - initial = false, - key?: string - ) { - if (category === 'id') { - this.validateAddGraphEdgeErrorMessage!.id = - initial || !isEmpty(this.newGraphEdgeConfigs.id) - ? '' - : i18next.t('addition.store.illegal-data-format'); - } - - if (category === 'nonNullable') { - if ( - initial || - isEmpty(this.newGraphEdgeConfigs.properties.nonNullable.get(key!)) - ) { - this.validateAddGraphEdgeErrorMessage?.properties.nonNullable.set( - key!, - i18next.t('addition.store.cannot-be-empty') - ); - - return; - } - - if ( - initial || - !validateGraphProperty( - this.valueTypes[key!], - this.newGraphEdgeConfigs.properties.nonNullable.get(key!)! - ) - ) { - this.validateAddGraphEdgeErrorMessage?.properties.nonNullable.set( - key!, - i18next.t('addition.store.illegal-data-format') - ); - - return; - } - - this.validateAddGraphEdgeErrorMessage?.properties.nonNullable.set( - key!, - '' - ); - } - - if (category === 'nullable') { - if ( - initial || - !validateGraphProperty( - this.valueTypes[key!], - this.newGraphEdgeConfigs.properties.nullable.get(key!)!, - true - ) - ) { - this.validateAddGraphEdgeErrorMessage?.properties.nullable.set( - key!, - i18next.t('addition.store.illegal-data-format') - ); - - return; - } - - this.validateAddGraphEdgeErrorMessage?.properties.nullable.set(key!, ''); - } - } - - @action - validateGraphDataEditableProperties( - type: 'nonNullable' | 'nullable', - key: string - ) { - if (type === 'nonNullable') { - if ( - isEmpty(this.editedSelectedGraphDataProperties?.nonNullable.get(key)) - ) { - this.validateEditableGraphDataPropertyErrorMessage?.nonNullable.set( - key, - i18next.t('addition.store.cannot-be-empty') - ); - - return; - } - - if ( - !validateGraphProperty( - this.valueTypes[key!], - this.editedSelectedGraphDataProperties?.nonNullable.get(key) - ) - ) { - this.validateEditableGraphDataPropertyErrorMessage?.nonNullable.set( - key, - i18next.t('addition.store.illegal-data-format') - ); - - return; - } - - this.validateEditableGraphDataPropertyErrorMessage?.nonNullable.set( - key, - '' - ); - } - - if (type === 'nullable') { - if ( - !validateGraphProperty( - this.valueTypes[key!], - this.editedSelectedGraphDataProperties?.nullable.get(key), - true - ) - ) { - this.validateEditableGraphDataPropertyErrorMessage?.nullable.set( - key, - i18next.t('addition.store.illegal-data-format') - ); - - return; - } - - this.validateEditableGraphDataPropertyErrorMessage?.nullable.set(key, ''); - } - } - - @action - resetRightClickedGraphData() { - this.rightClickedGraphData = { - id: '', - label: '', - properties: {} - }; - } - - @action - resetFavoriteRequestStatus(type: 'add' | 'edit') { - if (type === 'add') { - this.requestStatus.addQueryCollection = 'standby'; - this.errorInfo.addQueryCollection.code = NaN; - this.errorInfo.addQueryCollection.message = ''; - } - - if (type === 'edit') { - this.requestStatus.editQueryCollection = 'standby'; - this.errorInfo.editQueryCollection.code = NaN; - this.errorInfo.editQueryCollection.message = ''; - } - } - - @action - resetSwitchTabState() { - this.isLoadingGraph = false; - this.isGraphLoaded = false; - this.isShowGraphInfo = false; - this.isClickOnNodeOrEdge = false; - this.queryMode = 'query'; - this.dynamicAddGraphDataStatus = ''; - this.graphData = {} as FetchGraphResponse; - - this.visNetwork = null; - this.visDataSet = null; - this.visCurrentCoordinates = { - domX: '', - domY: '', - canvasX: '', - canvasY: '' - }; - - this.selectedGraphData = createGraphNode(); - this.selectedGraphLinkData = createGraphEdge(); - - this.pageConfigs.tableResult = { - pageNumber: 1, - pageTotal: 0 - }; - - this.requestStatus.fetchGraphs = 'standby'; - this.requestStatus.createAsyncTask = 'standby'; - this.errorInfo.fetchGraphs = { - code: NaN, - message: '' - }; - this.errorInfo.createAsyncTask = { - code: NaN, - message: '' - }; - - this.clearFilteredGraphQueryOptions(); - } - - @action - resetIdState() { - this.currentId = null; - this.currentTab = 'gremlin-analyze'; - this.searchText = ''; - this.isSidebarExpanded = false; - this.isLoadingGraph = false; - this.isGraphLoaded = false; - this.isShowGraphInfo = false; - this.isFullScreenReuslt = false; - this.isClickOnNodeOrEdge = false; - this.queryMode = 'query'; - this.codeEditorInstance = null; - this.codeEditorText = ''; - this.dynamicAddGraphDataStatus = ''; - this.graphData = {} as FetchGraphResponse; - - this.visNetwork = null; - this.visDataSet = null; - this.visCurrentCoordinates = { - domX: '', - domY: '', - canvasX: '', - canvasY: '' - }; - - this.properties = []; - - this.isSearched = { - status: false, - value: '' - }; - - this.selectedGraphData = createGraphNode(); - this.selectedGraphLinkData = createGraphEdge(); - - this.pageConfigs = { - tableResult: { - pageNumber: 1, - pageTotal: 0 - }, - executionLog: { - pageNumber: 1, - pageSize: 10, - pageTotal: 0 - }, - favoriteQueries: { - pageNumber: 1, - pageSize: 10, - pageTotal: 0 - } - }; - - this.requestStatus = initalizeRequestStatus(); - this.errorInfo = initalizeErrorInfo(); - this.clearFilteredGraphQueryOptions(); - } - - @action - dispose() { - this.resetIdState(); - this.vertexTypes = []; - this.edgeTypes = []; - this.idList = []; - } - - fetchIdList = flow(function* fetchIdList(this: DataAnalyzeStore) { - this.requestStatus.fetchIdList = 'pending'; - - try { - const result: AxiosResponse = yield axios.get< - GraphData - >(baseUrl, { - params: { - page_size: -1 - } - }); - - if (result.data.status !== 200) { - this.errorInfo.fetchIdList.code = result.data.status; - throw new Error(result.data.message); - } - - this.idList = result.data.data.records.map(({ id, name }) => ({ - id, - name - })); - this.requestStatus.fetchIdList = 'success'; - } catch (error) { - this.requestStatus.fetchIdList = 'failed'; - this.errorInfo.fetchIdList.message = error.message; - console.error(error.message); - } - }); - - // to know the type of properties - fetchValueTypes = flow(function* fetchValueTypes(this: DataAnalyzeStore) { - this.requestStatus.fetchValueTypes = 'pending'; - - try { - const result = yield axios.get( - `${baseUrl}/${this.currentId}/schema/propertykeys`, - { - params: { - page_size: -1 - } - } - ); - - if (result.data.status !== 200) { - this.errorInfo.fetchValueTypes.code = result.data.status; - throw new Error(result.data.message); - } - - this.properties = result.data.data.records; - - result.data.data.records.forEach( - ({ name, data_type }: Record) => { - this.valueTypes[name] = data_type; - } - ); - - this.requestStatus.fetchValueTypes = 'success'; - } catch (error) { - this.requestStatus.fetchValueTypes = 'failed'; - this.errorInfo.fetchValueTypes.message = error.message; - console.error(error.message); - } - }); - - fetchVertexTypes = flow(function* fetchVertexTypeList( - this: DataAnalyzeStore - ) { - this.requestStatus.fetchVertexTypeList = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.currentId}/schema/vertexlabels`, - { - params: { - page_size: -1 - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchVertexTypeList.code = result.data.status; - throw new Error(result.data.message); - } - - this.vertexTypes = result.data.data.records; - this.requestStatus.fetchVertexTypeList = 'success'; - } catch (error) { - this.requestStatus.fetchVertexTypeList = 'failed'; - this.errorInfo.fetchVertexTypeList.message = error.message; - } - }); - - fetchColorSchemas = flow(function* fetchColorSchemas(this: DataAnalyzeStore) { - this.requestStatus.fetchColorSchemas = 'pending'; - - try { - const result: AxiosResponse = yield axios.get< - FetchGraphResponse - >(`${baseUrl}/${this.currentId}/schema/vertexlabels/style`); - - if (result.data.status !== 200) { - this.errorInfo.fetchColorSchemas.code = result.data.status; - throw new Error(result.data.message); - } - - this.colorSchemas = result.data.data; - this.requestStatus.fetchColorSchemas = 'success'; - } catch (error) { - this.requestStatus.fetchColorSchemas = 'failed'; - this.errorInfo.fetchColorSchemas.message = error.message; - console.error(error.message); - } - }); - - fetchColorList = flow(function* fetchColorList(this: DataAnalyzeStore) { - this.requestStatus.fetchColorList = 'pending'; - - try { - const result: AxiosResponse> = yield axios.get( - `${baseUrl}/${this.currentId}/schema/vertexlabels/optional-colors` - ); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.colorList = result.data.data; - this.requestStatus.fetchColorList = 'success'; - } catch (error) { - this.requestStatus.fetchColorList = 'failed'; - this.errorMessage = error.message; - console.error(error.message); - } - }); - - fetchAllNodeStyle = flow(function* fetchAllNodeStyle(this: DataAnalyzeStore) { - this.requestStatus.fetchAllNodeStyle = 'pending'; - try { - const result: AxiosResponse> = yield axios.get(`${baseUrl}/${this.currentId}/schema/vertexlabels`, { - params: { - page_no: 1, - page_size: -1 - } - }); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - result.data.data.records.forEach(({ name, style }) => { - if (style.color !== null) { - this.colorMappings[name] = style.color; - } - if (style.size !== null) { - this.vertexSizeMappings[name] = style.size; - } - if (style.display_fields.length !== 0) { - this.vertexWritingMappings[name] = style.display_fields; - } - }); - - this.requestStatus.fetchAllNodeStyle = 'success'; - } catch (error) { - this.requestStatus.fetchAllNodeStyle = 'failed'; - this.errorInfo.fetchAllNodeStyle.message = error.message; - console.error(error.message); - } - }); - - fetchEdgeTypes = flow(function* fetchEdgeTypes(this: DataAnalyzeStore) { - this.requestStatus.fetchEdgeTypes = 'pending'; - - try { - const result: AxiosResponse> = yield axios.get(`${baseUrl}/${this.currentId}/schema/edgelabels`, { - params: { - page_no: 1, - page_size: -1 - } - }); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.edgeTypes = result.data.data.records; - this.requestStatus.fetchEdgeTypes = 'success'; - } catch (error) { - this.requestStatus.fetchEdgeTypes = 'failed'; - this.errorInfo.fetchEdgeTypes.message = error.message; - console.error(error.message); - } - }); - - fetchAllEdgeStyle = flow(function* fetchAllEdgeStyle(this: DataAnalyzeStore) { - this.requestStatus.fetchAllEdgeStyle = 'pending'; - - try { - const result: AxiosResponse> = yield axios.get(`${baseUrl}/${this.currentId}/schema/edgelabels`, { - params: { - page_no: 1, - page_size: -1 - } - }); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - result.data.data.records.forEach(({ name, style }) => { - if (style.color !== null) { - this.edgeColorMappings[name] = style.color; - } - if (style.with_arrow !== null) { - this.edgeWithArrowMappings[name] = style.with_arrow; - } - if (style.thickness !== null) { - this.edgeThicknessMappings[name] = style.thickness; - } - if (style.display_fields.length !== 0) { - this.edgeWritingMappings[name] = style.display_fields; - } - }); - - this.requestStatus.fetchAllEdgeStyle = 'success'; - } catch (error) { - this.requestStatus.fetchAllEdgeStyle = 'failed'; - this.errorInfo.fetchAllEdgeStyle.message = error.message; - console.error(error.message); - } - }); - - fetchAllPropertyIndexes = flow(function* fetchAllPropertyIndexes( - this: DataAnalyzeStore, - indexType: 'vertex' | 'edge' - ) { - this.requestStatus.fetchAllPropertyIndexes = 'pending'; - - try { - const result = yield axios - .get(`${baseUrl}/${this.currentId}/schema/propertyindexes`, { - params: { - page_size: -1, - is_vertex_label: indexType === 'vertex' - } - }) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.propertyIndexes = result.data.data.records; - this.requestStatus.fetchAllPropertyIndexes = 'success'; - } catch (error) { - this.requestStatus.fetchAllPropertyIndexes = 'failed'; - this.errorMessage = error.message; - } - }); - - fetchGraphs = flow(function* fetchGraphs( - this: DataAnalyzeStore, - algorithmConfigs?: { url: string; type: string } - ) { - // reset request status of create async task - this.requestStatus.createAsyncTask = 'standby'; - this.requestStatus.fetchGraphs = 'pending'; - this.isLoadingGraph = true; - - let params: object | null = null; - - if (!isUndefined(algorithmConfigs)) { - switch (algorithmConfigs.type) { - case Algorithm.loopDetection: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.loopDetectionParams, - ['max_degree', 'capacity', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - case Algorithm.focusDetection: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.focusDetectionParams, - ['max_degree', 'capacity', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - case Algorithm.shortestPath: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.shortestPathAlgorithmParams, - ['max_degree', 'capacity', 'skip_degree'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.shortestPathAll: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.shortestPathAllParams, - ['max_degree', 'capacity', 'skip_degree'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.allPath: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.allPathParams, - ['max_degree', 'capacity', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.modelSimilarity: { - const { - source, - vertexType, - vertexProperty, - direction, - least_neighbor, - similarity, - label, - max_similar, - least_similar, - property_filter, - least_property_number, - max_degree, - capacity, - limit, - return_common_connection, - return_complete_info - } = this.algorithmAnalyzerStore.modelSimilarityParams; - - const sources: Record = {}; - - if (source !== '') { - sources.ids = source.split(','); - } else { - if (vertexType !== '') { - sources.label = vertexType; - } - - if (vertexProperty[0][0] !== '') { - const convertedVertexProperty = vertexProperty.map( - ([key, value]) => [key, value.split(',')] - ); - - sources.properties = fromPairs(convertedVertexProperty); - } - } - - const convertedParams = { - sources, - label, - direction, - min_neighbors: least_neighbor, - alpha: similarity, - min_similars: least_similar, - top: max_similar, - group_property: property_filter, - min_groups: least_property_number, - max_degree, - capacity, - limit, - with_intermediary: return_common_connection, - with_vertex: return_complete_info - }; - - if (label === '__all__') { - delete convertedParams.label; - } - - if (max_degree === '') { - delete convertedParams.max_degree; - } - - if (capacity === '') { - delete convertedParams.capacity; - } - - if (limit === '') { - delete convertedParams.limit; - } - - if (max_similar === '') { - delete convertedParams.top; - } - - if (least_similar === '') { - delete convertedParams.min_similars; - } - - if (convertedParams.group_property === '') { - delete convertedParams.group_property; - delete convertedParams.min_groups; - } - - // @ts-ignore - params = convertedParams; - break; - } - - case Algorithm.neighborRank: { - const clonedNeighborRankParams = cloneDeep( - this.algorithmAnalyzerStore.neighborRankParams - ); - - if (clonedNeighborRankParams.capacity === '') { - clonedNeighborRankParams.capacity = '10000000'; - } - - clonedNeighborRankParams.steps.forEach((step, index) => { - delete step.uuid; - const clonedStep = cloneDeep(step); - - if (step.labels[0] === '__all__') { - delete clonedStep.labels; - clonedNeighborRankParams.steps[index] = clonedStep; - } - - if (step.degree === '') { - clonedStep.degree = '10000'; - clonedNeighborRankParams.steps[index] = clonedStep; - } - - if (step.top === '') { - clonedStep.top = '100'; - clonedNeighborRankParams.steps[index] = clonedStep; - } - }); - - params = clonedNeighborRankParams; - break; - } - - case Algorithm.kStepNeighbor: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.kStepNeighborParams, - ['max_degree', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.kHop: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.kHopParams, - ['max_degree', 'capacity', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.customPath: { - const { - source, - vertexType, - vertexProperty, - sort_by, - capacity, - limit, - steps - } = this.algorithmAnalyzerStore.customPathParams; - - const sources: Record = {}; - - if (source !== '') { - sources.ids = source.split(','); - } else { - if (vertexType !== '') { - sources.label = vertexType; - } - - if (vertexProperty[0][0] !== '') { - const convertedVertexProperty = vertexProperty.map( - ([key, value]) => [key, value.split(',')] - ); - - sources.properties = fromPairs(convertedVertexProperty); - } - } - - const clonedCustomPathRules = cloneDeep(steps); - - clonedCustomPathRules.forEach((step, index) => { - delete step.uuid; - - if (isEmpty(step.labels)) { - delete step.labels; - } - - if (step.properties[0][0] !== '') { - // omit property types here - // @ts-ignore - step.properties = fromPairs( - step.properties.map(([key, value]) => [key, value.split(',')]) - ); - } else { - delete step.properties; - } - - if (isEmpty(step.degree)) { - delete step.degree; - } - - if (isEmpty(step.sample)) { - delete step.sample; - } - - if (step.weight_by === '__CUSTOM_WEIGHT__') { - delete step.weight_by; - } else { - delete step.default_weight; - } - - if (step.weight_by === '') { - delete step.weight_by; - } - }); - - const convertedParams: Record = { - sources, - sort_by, - steps: clonedCustomPathRules - }; - - if (!isEmpty(capacity)) { - convertedParams.capactiy = capacity; - } - - if (!isEmpty(limit)) { - convertedParams.limit = limit; - } - - // @ts-ignore - params = convertedParams; - break; - } - - case Algorithm.radiographicInspection: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.radiographicInspectionParams, - ['max_degree', 'capacity', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.sameNeighbor: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.sameNeighborParams, - ['max_degree', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.weightedShortestPath: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.weightedShortestPathParams, - ['max_degree', 'capacity', 'skip_degree'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.singleSourceWeightedShortestPath: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.singleSourceWeightedShortestPathParams, - ['max_degree', 'capacity', 'skip_degree', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.jaccard: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.jaccardParams, - ['max_degree'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - - case Algorithm.personalRankRecommendation: { - const filterdObject = filterEmptyAlgorightmParams( - this.algorithmAnalyzerStore.personalRankParams, - ['degree', 'limit'] - ); - removeLabelKey(filterdObject); - params = filterdObject; - break; - } - } - } - - try { - let result: AxiosResponse; - - if (!isUndefined(algorithmConfigs)) { - result = yield axios - .post( - `${baseUrl}/${this.currentId}/algorithms/${algorithmConfigs.url}`, - { - ...params - } - ) - .catch(checkIfLocalNetworkOffline); - } else { - result = yield axios - .post( - `${baseUrl}/${this.currentId}/gremlin-query`, - { - content: this.codeEditorText - } - ) - .catch(checkIfLocalNetworkOffline); - } - - if (result.data.status !== 200) { - this.errorInfo.fetchGraphs.code = result.data.status; - throw new Error(result.data.message); - } - - // replace null with empty array when query result type is EMPTY - if (result.data.data.type === 'EMPTY') { - result.data.data.json_view.data = []; - result.data.data.table_view = { - header: ['result'], - rows: [] - }; - } - - this.originalGraphData = result.data; - - if ( - result.data.data.graph_view.vertices !== null && - result.data.data.graph_view.edges !== null - ) { - this.vertexCollection = new Set( - result.data.data.graph_view.vertices.map(({ id }) => id) - ); - this.edgeCollection = new Set( - result.data.data.graph_view.edges.map(({ id }) => id) - ); - } - - this.graphData = result.data; - this.pageConfigs.tableResult.pageTotal = this.originalGraphData.data.table_view.rows.length; - this.requestStatus.fetchGraphs = 'success'; - this.isLoadingGraph = false; - } catch (error) { - this.isLoadingGraph = false; - this.requestStatus.fetchGraphs = 'failed'; - this.errorInfo.fetchGraphs.message = error.message; - console.error(error.message); - } - }); - - createAsyncTask = flow(function* createAsyncTask(this: DataAnalyzeStore) { - // reset request status of fetch graphs - this.requestStatus.fetchGraphs = 'stanby'; - this.requestStatus.createAsyncTask = 'pending'; - - try { - const result: AxiosResponse = yield axios - .post( - `${baseUrl}/${this.currentId}/gremlin-query/async-task`, - { - content: this.codeEditorText - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.createAsyncTask.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.createAsyncTask = 'success'; - } catch (error) { - this.requestStatus.createAsyncTask = 'failed'; - this.errorInfo.createAsyncTask.message = error.message; - console.error(error.message); - } - }); - - addGraphNode = flow(function* addGraphNode(this: DataAnalyzeStore) { - this.requestStatus.addGraphNode = 'pending'; - - try { - const properties: Record = {}; - this.newGraphNodeConfigs.properties.nonNullable.forEach((value, key) => { - properties[key] = value; - }); - this.newGraphNodeConfigs.properties.nullable.forEach((value, key) => { - properties[key] = value; - }); - - const result: AxiosResponse> = yield axios.post( - `${baseUrl}/${this.currentId}/graph/vertex`, - { - id: this.newGraphNodeConfigs.id, - label: this.newGraphNodeConfigs.label, - properties - } - ); - - if (result.data.status !== 200) { - this.errorInfo.addGraphNode.code = result.data.status; - throw new Error(result.data.message); - } - - const mergedGraphData = cloneDeep(this.graphData); - mergedGraphData.data.graph_view.vertices.push( - ...result.data.data.vertices - ); - - this.graphData = mergedGraphData; - this.requestStatus.addGraphNode = 'success'; - - return result.data.data.vertices; - } catch (error) { - this.requestStatus.addGraphNode = 'failed'; - this.errorInfo.addGraphNode.message = error.message; - console.error(error.message); - } - }); - - fetchRelatedEdges = flow(function* fetchRelatedEdges(this: DataAnalyzeStore) { - this.requestStatus.fetchRelatedEdges = 'pending'; - try { - const result: AxiosResponse> = yield axios.get< - responseData - >( - `${baseUrl}/${this.currentId}/schema/vertexlabels/${this.rightClickedGraphData.label}/link` - ); - - if (result.data.status !== 200) { - this.errorInfo.fetchRelatedEdges.code = result.data.status; - throw new Error(result.data.message); - } - - this.relatedGraphEdges = result.data.data; - this.requestStatus.fetchRelatedEdges = 'success'; - } catch (error) { - this.requestStatus.fetchRelatedEdges = 'failed'; - this.errorInfo.fetchRelatedEdges.message = error.message; - console.error(error.message); - } - }); - - addGraphEdge = flow(function* addGraphEdge(this: DataAnalyzeStore) { - this.requestStatus.addGraphEdge = 'pending'; - - try { - const vertices = [ - this.rightClickedGraphData.id, - this.newGraphEdgeConfigs.id - ]; - - if (this.dynamicAddGraphDataStatus === 'inEdge') { - vertices.reverse(); - } - - const properties: Record = {}; - this.newGraphEdgeConfigs.properties.nonNullable.forEach((value, key) => { - properties[key] = value; - }); - this.newGraphEdgeConfigs.properties.nullable.forEach((value, key) => { - properties[key] = value; - }); - - const result: AxiosResponse> = yield axios.post( - `${baseUrl}/${this.currentId}/graph/edge`, - { - label: this.newGraphEdgeConfigs.label, - source: vertices[0], - target: vertices[1], - properties - } - ); - - if (result.data.status !== 200) { - this.errorInfo.addGraphEdge.code = result.data.status; - throw new Error(result.data.message); - } - - const mergedGraphData = cloneDeep(this.graphData); - const filteredVertices: GraphNode[] = []; - - result.data.data.vertices.forEach((vertex) => { - if (this.visDataSet!.nodes.get(vertex.id) === null) { - filteredVertices.push(vertex); - } - }); - - mergedGraphData.data.graph_view.vertices.push(...filteredVertices); - mergedGraphData.data.graph_view.edges.push(...result.data.data.edges); - - this.graphData = mergedGraphData; - this.requestStatus.addGraphEdge = 'success'; - - return { - originalVertices: result.data.data.vertices, - vertices: filteredVertices, - edges: result.data.data.edges - }; - } catch (error) { - this.requestStatus.addGraphEdge = 'failed'; - this.errorInfo.addGraphEdge.message = error.message; - console.error(error.message); - } - }); - - expandGraphNode = flow(function* expandGraphNode( - this: DataAnalyzeStore, - // double click on a node, or right click a node - nodeId?: string, - label?: string - ) { - this.requestStatus.expandGraphNode = 'pending'; - - try { - const result: AxiosResponse = yield axios.put( - `${baseUrl}/${this.currentId}/gremlin-query`, - { - vertex_id: nodeId || this.rightClickedGraphData.id, - vertex_label: label || this.rightClickedGraphData.label - } - ); - - if (result.data.status !== 200) { - this.errorInfo.expandGraphNode.code = result.data.status; - throw new Error(result.data.message); - } - - const newGraphData = result.data; - - const filteredVertices = newGraphData.data.graph_view.vertices.filter( - ({ id }) => { - if (this.vertexCollection.has(id)) { - return false; - } - - this.vertexCollection.add(id); - return true; - } - ); - - const filteredEdges = newGraphData.data.graph_view.edges.filter( - ({ id }) => { - if (this.edgeCollection.has(id)) { - return false; - } - - this.edgeCollection.add(id); - return true; - } - ); - - this.expandedGraphData = { - ...newGraphData, - data: { - ...newGraphData.data, - graph_view: { - vertices: filteredVertices, - edges: filteredEdges - } - } - }; - - const vertexCollection = new Set(); - const edgeCollection = new Set(); - - const mergeData: FetchGraphResponse = { - ...newGraphData, - data: { - ...newGraphData.data, - graph_view: { - vertices: this.graphData.data.graph_view.vertices - .concat(newGraphData.data.graph_view.vertices) - .filter((item) => { - const isDuplicate = vertexCollection.has(item.id); - vertexCollection.add(item.id); - return !isDuplicate; - }), - edges: this.graphData.data.graph_view.edges - .concat(newGraphData.data.graph_view.edges) - .filter((item) => { - const isDuplicate = edgeCollection.has(item.id); - edgeCollection.add(item.id); - return !isDuplicate; - }) - } - } - }; - - this.graphData = mergeData; - this.requestStatus.expandGraphNode = 'success'; - } catch (error) { - this.requestStatus.expandGraphNode = 'failed'; - this.errorInfo.expandGraphNode.message = error.message; - console.error(error.message); - } - }); - - @action - hideGraphNode(nodeId: any) { - this.graphData.data.graph_view.vertices = this.graphData.data.graph_view.vertices.filter( - (data) => data.id !== this.rightClickedGraphData.id - ); - - // only delete node in vertexCollection, not edges in EdgeCollection - this.vertexCollection.delete(nodeId); - - // assign new object to observable - this.graphData = { ...this.graphData }; - } - - updateGraphProperties = flow(function* updateGraphProperties( - this: DataAnalyzeStore - ) { - this.requestStatus.updateGraphProperties = 'pending'; - - const { id, label, properties } = - this.graphInfoDataSet === 'node' - ? this.selectedGraphData - : this.selectedGraphLinkData; - - const editedProperties: Record> = { - ...Object.fromEntries([ - ...this.editedSelectedGraphDataProperties.primary - ]), - ...Object.fromEntries([ - ...this.editedSelectedGraphDataProperties.nonNullable - ]), - ...Object.fromEntries([ - ...this.editedSelectedGraphDataProperties.nullable - ]) - }; - - // check if originial type is Array - Object.entries(editedProperties).forEach(([key, value]) => { - if (Array.isArray(properties[key])) { - if ((value as string).includes(',')) { - editedProperties[key] = (value as string).split(','); - } - - if ((value as string).includes(',')) { - editedProperties[key] = (value as string).split(','); - } - } - }); - - try { - const result: AxiosResponse> = yield axios.put>( - `${baseUrl}/${this.currentId}/graph/${ - this.graphInfoDataSet === 'node' ? 'vertex' : 'edge' - }/${encodeURIComponent(id)}`, - this.graphInfoDataSet === 'node' - ? { - id, - label, - properties: editedProperties - } - : { - id, - label, - properties: editedProperties, - source: this.selectedGraphLinkData.source, - target: this.selectedGraphLinkData.target - } - ); - - if (result.data.status !== 200) { - this.errorInfo.updateGraphProperties.code = result.data.status; - throw new Error(result.data.message); - } - - const graphData = cloneDeep(this.graphData); - if (this.graphInfoDataSet === 'node') { - const vertex = graphData.data.graph_view.vertices.find( - ({ id }) => id === result.data.data.id - ); - - if (!isUndefined(vertex)) { - vertex.id = result.data.data.id; - vertex.label = result.data.data.label; - vertex.properties = result.data.data.properties; - } - } else { - const edge = graphData.data.graph_view.edges.find( - ({ id }) => id === result.data.data.id - ); - - if (!isUndefined(edge)) { - edge.id = result.data.data.id; - edge.label = result.data.data.label; - edge.properties = result.data.data.properties; - } - } - - this.graphData = graphData; - this.requestStatus.updateGraphProperties = 'success'; - return result.data.data; - } catch (error) { - this.requestStatus.updateGraphProperties = 'failed'; - this.errorInfo.updateGraphProperties.message = error.message; - console.error(error.message); - } - }); - - // require list of edge type options in QueryFilteredOptions - fetchRelatedVertex = flow(function* fetchRelatedVertex( - this: DataAnalyzeStore - ) { - this.requestStatus.fetchRelatedVertex = 'pending'; - - try { - const result = yield axios.get( - `${baseUrl}/${this.currentId}/schema/vertexlabels/${this.rightClickedGraphData.label}/link` - ); - - if (result.data.status !== 200) { - this.errorInfo.fetchRelatedVertex = result.data.status; - throw new Error(result.data.message); - } - - this.graphDataEdgeTypes = result.data.data; - - this.editEdgeFilterOption( - 'type', - !isUndefined(result.data.data[0]) ? result.data.data[0] : '' - ); - } catch (error) { - this.requestStatus.fetchRelatedVertex = 'failed'; - this.errorInfo.fetchRelatedVertex.message = error.message; - console.error(error.message); - } - }); - - // require list of property options in QueryFilteredOptions - fetchFilteredPropertyOptions = flow(function* fetchFilteredPropertyOptions( - this: DataAnalyzeStore, - edgeName: string - ) { - this.requestStatus.fetchFilteredPropertyOptions = 'pending'; - - try { - const result: AxiosResponse = yield axios.get( - `${baseUrl}/${this.currentId}/schema/edgelabels/${edgeName}` - ); - - if (result.data.status !== 200) { - this.errorInfo.filteredPropertyOptions.code = result.data.status; - throw new Error(result.data.message); - } - - this.filteredPropertyOptions = result.data.data.properties.map( - ({ name }) => name - ); - } catch (error) { - this.requestStatus.fetchFilteredPropertyOptions = 'failed'; - this.errorInfo.filteredPropertyOptions = error.message; - console.error(error.message); - } - }); - - filterGraphData = flow(function* filteredGraphData(this: DataAnalyzeStore) { - this.requestStatus.filteredGraphData = 'pending'; - - try { - const result: AxiosResponse = yield axios.put( - `${baseUrl}/${this.currentId}/gremlin-query`, - { - vertex_id: this.rightClickedGraphData.id, - vertex_label: this.rightClickedGraphData.label, - edge_label: this.filteredGraphQueryOptions.line.type, - direction: this.filteredGraphQueryOptions.line.direction, - conditions: this.filteredGraphQueryOptions.properties.map( - ({ property, rule, value }) => ({ - key: property, - operator: ruleMap[rule], - value: rule === 'True' || rule === 'False' ? Boolean(rule) : value - }) - ) - } - ); - - if (result.data.status !== 200) { - this.errorInfo.filteredGraphData.code = result.data.status; - throw new Error(result.data.message); - } - - const newGraphData = result.data; - - const filteredVertices = newGraphData.data.graph_view.vertices.filter( - ({ id }) => { - if (this.vertexCollection.has(id)) { - return false; - } - - this.vertexCollection.add(id); - return true; - } - ); - - const filteredEdges = newGraphData.data.graph_view.edges.filter( - ({ id }) => { - if (this.edgeCollection.has(id)) { - return false; - } - - this.edgeCollection.add(id); - return true; - } - ); - - this.expandedGraphData = { - ...newGraphData, - data: { - ...newGraphData.data, - graph_view: { - vertices: filteredVertices, - edges: filteredEdges - } - } - }; - - const vertexCollection = new Set(); - const edgeCollection = new Set(); - - const mergeData: FetchGraphResponse = { - ...newGraphData, - data: { - ...newGraphData.data, - graph_view: { - vertices: this.graphData.data.graph_view.vertices - .concat(newGraphData.data.graph_view.vertices) - .filter((item) => { - const isDuplicate = vertexCollection.has(item.id); - vertexCollection.add(item.id); - return !isDuplicate; - }), - edges: this.graphData.data.graph_view.edges - .concat(newGraphData.data.graph_view.edges) - .filter((item) => { - const isDuplicate = edgeCollection.has(item.id); - edgeCollection.add(item.id); - return !isDuplicate; - }) - } - } - }; - - this.graphData = mergeData; - this.requestStatus.filteredGraphData = 'success'; - } catch (error) { - this.errorInfo.filteredGraphData.message = error.message; - console.error(error.message); - } - }); - - addQueryCollection = flow(function* addQueryCollection( - this: DataAnalyzeStore, - name: string, - // if content is not the value in codeEditor (e.g. in table) - content?: string - ) { - this.requestStatus.addQueryCollection = 'pending'; - - try { - const result = yield axios.post( - `${baseUrl}/${this.currentId}/gremlin-collections`, - { - name, - content: content || this.codeEditorText - } - ); - - if (result.data.status !== 200) { - this.errorInfo.addQueryCollection.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.addQueryCollection = 'success'; - } catch (error) { - this.requestStatus.addQueryCollection = 'failed'; - this.errorInfo.addQueryCollection.message = error.message; - console.error(error.message); - } - }); - - editQueryCollection = flow(function* editQueryCollection( - this: DataAnalyzeStore, - id: number, - name: string, - content: string - ) { - this.requestStatus.editQueryCollection = 'pending'; - - try { - const result = yield axios.put( - `${baseUrl}/${this.currentId}/gremlin-collections/${id}`, - { - name, - content - } - ); - - if (result.data.status !== 200) { - this.errorInfo.editQueryCollection.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.editQueryCollection = 'success'; - } catch (error) { - this.requestStatus.editQueryCollection = 'failed'; - this.errorInfo.editQueryCollection.message = error.message; - console.error(error.message); - } - }); - - deleteQueryCollection = flow(function* deleteQueryCollection( - this: DataAnalyzeStore, - id: number - ) { - this.requestStatus.deleteQueryCollection = 'pending'; - - try { - const result = yield axios.delete( - `${baseUrl}/${this.currentId}/gremlin-collections/${id}` - ); - - if (result.data.status !== 200) { - this.errorInfo.deleteQueryCollection = result.data.status; - throw new Error(result.data.message); - } - - // if current pageNumber has no data after delete, set the pageNumber to the previous - if ( - this.favoriteQueryData.length === 1 && - this.pageConfigs.favoriteQueries.pageNumber > 1 - ) { - this.pageConfigs.favoriteQueries.pageNumber = - this.pageConfigs.favoriteQueries.pageNumber - 1; - } - - this.requestStatus.deleteQueryCollection = 'success'; - } catch (error) { - this.requestStatus.deleteQueryCollection = 'failed'; - this.errorInfo.deleteQueryCollection.message = error.message; - console.error(error.message); - } - }); - - fetchExecutionLogs = flow(function* fetchExecutionLogs( - this: DataAnalyzeStore - ) { - this.requestStatus.fetchExecutionLogs = 'pending'; - - try { - const result: AxiosResponse = yield axios.get< - ExecutionLogsResponse - >(`${baseUrl}/${this.currentId}/execute-histories`, { - params: { - page_size: this.pageConfigs.executionLog.pageSize, - page_no: this.pageConfigs.executionLog.pageNumber - } - }); - - if (result.data.status !== 200) { - this.errorInfo.fetchExecutionLogs.code = result.data.status; - throw new Error(result.data.message); - } - - this.executionLogData = result.data.data.records; - this.pageConfigs.executionLog.pageTotal = result.data.data.total; - this.requestStatus.fetchExecutionLogs = 'success'; - } catch (error) { - this.requestStatus.fetchExecutionLogs = 'failed'; - this.errorInfo.fetchExecutionLogs.message = error.message; - console.error(error.message); - } - }); - - fetchFavoriteQueries = flow(function* fetchFavoriteQueries( - this: DataAnalyzeStore - ) { - const url = - `${baseUrl}/${this.currentId}/gremlin-collections?` + - `&page_no=${this.pageConfigs.favoriteQueries.pageNumber}` + - `&page_size=${this.pageConfigs.favoriteQueries.pageSize}` + - (this.favoriteQueriesSortOrder.time !== '' - ? `&time_order=${this.favoriteQueriesSortOrder.time}` - : '') + - (this.favoriteQueriesSortOrder.name !== '' - ? `&name_order=${this.favoriteQueriesSortOrder.name}` - : '') + - (this.isSearched.status && this.searchText !== '' - ? `&content=${this.searchText}` - : ''); - - this.requestStatus.fetchFavoriteQueries = 'pending'; - - try { - const result: AxiosResponse = yield axios.get< - FavoriteQueryResponse - >(url); - - if (result.data.status !== 200) { - this.errorInfo.fetchFavoriteQueries.code = result.data.status; - throw new Error(result.data.message); - } - - this.favoriteQueryData = result.data.data.records; - this.pageConfigs.favoriteQueries.pageTotal = result.data.data.total; - this.requestStatus.fetchFavoriteQueries = 'success'; - } catch (error) { - this.requestStatus.fetchFavoriteQueries = 'failed'; - this.errorInfo.fetchFavoriteQueries.message = error.message; - console.error(error.message); - } - }); -} - -export default createContext(new DataAnalyzeStore()); diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts deleted file mode 100644 index c9b513531..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { isEmpty, size } from 'lodash-es'; - -import i18next from '../../../i18n'; -import { - Job, - JobResponse -} from '../../types/GraphManagementStore/dataImportStore'; -import { - initRequestStatus, - initErrorInfo -} from '../../factory/dataImportStore/importManagmentStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -import { baseUrl, responseData } from '../../types/common'; -import type { - JobGlance, - JobFailedReason -} from '../../types/GraphManagementStore/dataImportStore'; - -export class ImportManagerStore { - @observable requestStatus = initRequestStatus(); - @observable errorInfo = initErrorInfo(); - - @observable currentId: number | null = null; - @observable jobDetailsStep = 'basic'; - @observable selectedJobIndex = NaN; - @observable selectedJob: Job | null = null; - @observable searchWords = ''; - @observable isCreateNewProperty = false; - - @observable.shallow importJobListPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - @observable.shallow isSearched = { - status: false, - value: '' - }; - - @observable.shallow newJob = { - name: '', - description: '' - }; - - // @observable editJob: JobGlance | null = null; - @observable editJob: JobGlance | null = { - name: '', - description: '' - }; - - @observable.ref importJobList: Job[] = []; - @observable.ref failedReason: JobFailedReason[] = []; - - @observable validateNewJobErrorMessage = { - name: '', - description: '' - }; - - @observable validateEditJobErrorMessage = { - name: '', - description: '' - }; - - @computed get currentJobDetails() { - return this.importJobList[this.selectedJobIndex]; - } - - @action - setCurrentId(id: number) { - this.currentId = id; - } - - @action - switchCreateNewProperty(flag: boolean) { - this.isCreateNewProperty = flag; - } - - @action - switchSearchedStatus(isSearched: boolean) { - this.isSearched.status = isSearched; - - isSearched - ? (this.isSearched.value = this.searchWords) - : (this.isSearched.value = ''); - } - - @action - setCurrentJobDetailStep(step: string) { - this.jobDetailsStep = step; - } - - @action - setSelectedJobIndex(index: number) { - this.selectedJobIndex = index; - } - - @action - setSelectedJob(jobId: number | null) { - if (jobId === null) { - this.selectedJob = null; - } else { - this.selectedJob = this.importJobList.find( - ({ id }) => jobId === id - ) as Job; - } - } - - @action - mutateSearchWords(word: string) { - this.searchWords = word; - } - - @action - mutateNewJob(key: T, value: JobGlance[T]) { - this.newJob[key] = value; - } - - @action - mutateEditJob(key: T, value: JobGlance[T]) { - if (this.editJob !== null) { - this.editJob[key] = value; - } - } - - @action - mutateImportJobListPageNumber(pageNumber: number) { - this.importJobListPageConfig.pageNumber = pageNumber; - } - - @action - validateJob(type: 'new' | 'edit', category: keyof JobGlance) { - const job = type === 'new' ? this.newJob : this.editJob!; - const errorMessage = - type === 'new' - ? this.validateNewJobErrorMessage - : this.validateEditJobErrorMessage; - - if (category === 'name') { - const name = job.name; - - if (isEmpty(name)) { - errorMessage.name = i18next.t('import-manager.validator.no-empty'); - } else if (size(name) > 48) { - errorMessage.name = i18next.t( - 'import-manager.validator.over-limit-size' - ); - } else if (!/^[\w\d\u4e00-\u9fa5]{1,48}$/.test(name)) { - errorMessage.name = i18next.t( - 'import-manager.validator.invalid-format' - ); - } else { - errorMessage.name = ''; - } - } - - if (category === 'description') { - const description = job.description; - - if (size(description) > 200) { - errorMessage.description = i18next.t( - 'import-manager.validator.over-limit-size' - ); - } else if (!/^[\w\d\u4e00-\u9fa5]{0,200}$/.test(description)) { - errorMessage.description = i18next.t( - 'import-manager.validator.invalid-format' - ); - } else { - errorMessage.description = ''; - } - } - } - - @action - resetJob(type: 'new' | 'edit') { - if (type === 'new') { - this.newJob = { - name: '', - description: '' - }; - } else { - this.editJob = null; - } - } - - @action - dispose() { - this.requestStatus = initRequestStatus(); - this.errorInfo = initErrorInfo(); - this.currentId = null; - this.jobDetailsStep = 'basic'; - this.selectedJobIndex = NaN; - this.selectedJob = null; - this.isCreateNewProperty = false; - - this.importJobListPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - this.isSearched = { - status: false, - value: '' - }; - - this.newJob = { - name: '', - description: '' - }; - - this.editJob = { - name: '', - description: '' - }; - - this.importJobList = []; - this.failedReason = []; - - this.validateNewJobErrorMessage = { - name: '', - description: '' - }; - - this.validateEditJobErrorMessage = { - name: '', - description: '' - }; - } - - fetchImportJobList = flow(function* fetchImportJobList( - this: ImportManagerStore - ) { - this.requestStatus.fetchImportJobList = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.currentId}/job-manager?page_no=${this.importJobListPageConfig.pageNumber}&page_size=10` + - (this.isSearched.status && this.searchWords !== '' - ? `&content=${this.searchWords}` - : '') - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchImportJobList.code = result.data.status; - throw new Error(result.data.message); - } - - this.importJobList = result.data.data.records; - this.importJobListPageConfig.pageTotal = result.data.data.total; - this.requestStatus.fetchImportJobList = 'success'; - } catch (error) { - this.requestStatus.fetchImportJobList = 'failed'; - this.errorInfo.fetchImportJobList.message = error.message; - } - }); - - createNewJob = flow(function* createNewJob(this: ImportManagerStore) { - this.requestStatus.createNewJob = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>(`${baseUrl}/${this.currentId}/job-manager`, { - job_name: this.newJob.name, - job_remarks: this.newJob.description - }) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.createNewJob.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.createNewJob = 'success'; - } catch (error) { - this.requestStatus.createNewJob = 'failed'; - this.errorInfo.createNewJob.message = error.message; - } - }); - - updateJobInfo = flow(function* updateJobInfo(this: ImportManagerStore) { - this.requestStatus.updateJobInfo = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .put>( - `${baseUrl}/${this.currentId}/job-manager/${this.selectedJob!.id}`, - { - job_name: this.editJob!.name, - job_remarks: this.editJob!.description - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.updateJobInfo.code = result.data.status; - throw new Error(result.data.message); - } - - this.selectedJob = result.data.data; - this.requestStatus.updateJobInfo = 'success'; - } catch (error) { - this.requestStatus.updateJobInfo = 'failed'; - this.errorInfo.updateJobInfo.message = error.message; - } - }); - - deleteJob = flow(function* deleteJob(this: ImportManagerStore, id: number) { - this.requestStatus.deleteJob = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .delete>( - `${baseUrl}/${this.currentId}/job-manager/${id}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.deleteJob.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.deleteJob = 'success'; - } catch (error) { - this.requestStatus.deleteJob = 'failed'; - this.errorInfo.deleteJob.message = error.message; - } - }); - - fetchFailedReason = flow(function* fetchFailedReason( - this: ImportManagerStore, - connectId: number, - jobId: number - ) { - this.requestStatus.fetchFailedReason = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${connectId}/job-manager/${jobId}/reason` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchFailedReason.code = result.data.status; - throw new Error(result.data.message); - } - - this.failedReason = result.data.data; - this.requestStatus.fetchFailedReason = 'success'; - } catch (error) { - this.requestStatus.fetchFailedReason = 'failed'; - this.errorInfo.fetchFailedReason.message = error.message; - } - }); -} - -export default createContext(new ImportManagerStore()); diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts deleted file mode 100644 index 451613e09..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { remove, isUndefined } from 'lodash-es'; - -import { DataMapStore } from './dataMapStore'; -import { ServerDataImportStore } from './serverDataImportStore'; -import { - initErrorInfo, - initRequestStatus -} from '../../factory/dataImportStore/dataImportRootStore'; -import { baseUrl, responseData } from '../../types/common'; -import { - FileUploadResult, - FileUploadTask, - FileUploadQueue -} from '../../types/GraphManagementStore/dataImportStore'; -import { - VertexType, - VertexTypeListResponse, - EdgeType, - EdgeTypeListResponse -} from '../../types/GraphManagementStore/metadataConfigsStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -const MAX_CONCURRENT_UPLOAD = 5; - -export class DataImportRootStore { - dataMapStore: DataMapStore; - serverDataImportStore: ServerDataImportStore; - - constructor() { - this.dataMapStore = new DataMapStore(this); - this.serverDataImportStore = new ServerDataImportStore(this); - } - - @observable currentId: number | null = null; - @observable currentJobId: number | null = null; - @observable currentStatus = ''; - @observable currentStep = NaN; - - @observable requestStatus = initRequestStatus(); - @observable errorInfo = initErrorInfo(); - - @observable fileList: File[] = []; - @observable.ref fileHashes: Record = {}; - @observable fileUploadTasks: FileUploadTask[] = []; - @observable fileUploadQueue: FileUploadQueue[] = []; - @observable fileRetryUploadList: string[] = []; - - @observable.ref fileInfos: FileUploadResult[] = []; - @observable.ref vertexTypes: VertexType[] = []; - @observable.ref edgeTypes: EdgeType[] = []; - - @computed get successFileUploadTaskNames() { - return this.fileUploadTasks - .filter(({ status }) => status === 'success') - .map(({ name }) => name); - } - - @computed get unsuccessFileUploadTasks() { - return this.fileUploadTasks.filter(({ status }) => status !== 'success'); - } - - @action - setCurrentId(id: number) { - this.currentId = id; - } - - @action - setCurrentJobId(id: number) { - this.currentJobId = id; - } - - @action - setCurrentStatus(status: string) { - this.currentStatus = status; - } - - @action - setCurrentStep(step: number) { - this.currentStep = step; - } - - @action - updateFileList(files: File[]) { - this.fileList = [...files, ...this.fileList]; - } - - @action - initFileUploadTask(tasks: FileUploadTask) { - this.fileUploadTasks = [tasks, ...this.fileUploadTasks]; - } - - @action - addFileUploadQueue(element: FileUploadQueue) { - this.fileUploadQueue.push(element); - } - - @action - removeFileUploadQueue(fileName: string) { - remove(this.fileUploadQueue, ({ fileName: name }) => name === fileName); - } - - @action - mutateFileUploadQueue( - key: T, - value: FileUploadQueue[T], - index: number - ) { - this.fileUploadQueue[index][key] = value; - } - - @action - mutateFileUploadTasks( - key: T, - value: FileUploadTask[T], - fileName: string - ) { - const fileUploadTask = this.fileUploadTasks.find( - ({ name }) => name === fileName - )!; - - // users may click back button in browser - if (!isUndefined(fileUploadTask)) { - fileUploadTask[key] = value; - } - } - - @action - removeFileUploadTasks(fileName: string) { - remove(this.fileUploadTasks, ({ name }) => fileName === name); - } - - @action - addRetryFileUploadQueue(fileName: string) { - this.fileRetryUploadList.push(fileName); - } - - @action - pullRetryFileUploadQueue() { - return this.fileRetryUploadList.shift(); - } - - @action - resetAllFileInfos() { - this.fileList = []; - this.fileUploadTasks = []; - this.fileUploadQueue = []; - this.fileInfos = []; - } - - @action - dispose() { - this.currentId = null; - this.currentJobId = null; - this.currentStatus = ''; - this.currentStep = NaN; - this.vertexTypes = []; - this.edgeTypes = []; - - this.resetAllFileInfos(); - this.requestStatus = initRequestStatus(); - this.errorInfo = initErrorInfo(); - } - - fetchFilehashes = flow(function* fetchFilehashes( - this: DataImportRootStore, - fileNames: string[] - ) { - this.requestStatus.fetchFilehashes = 'pending'; - - try { - const result = yield axios - .get>>( - `${baseUrl}/${this.currentId}/job-manager/${ - this.currentJobId - }/upload-file/token?${fileNames - .map((name) => `names=${name}`) - .join('&')}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchFilehashes.code = result.data.status; - throw new Error(result.data.message); - } - - this.fileHashes = { ...this.fileHashes, ...result.data.data }; - this.requestStatus.fetchFilehashes = 'success'; - } catch (error) { - this.requestStatus.fetchFilehashes = 'failed'; - this.errorInfo.fetchFilehashes.message = error.message; - console.error(error.message); - } - }); - - uploadFiles = flow(function* uploadFiles( - this: DataImportRootStore, - { - fileName, - fileChunkList, - fileChunkTotal - }: { - fileName: string; - fileChunkList: { - chunkIndex: number; - chunk: Blob; - }; - fileChunkTotal: number; - } - ) { - this.requestStatus.uploadFiles = 'pending'; - const formData = new FormData(); - formData.append('file', fileChunkList.chunk); - - if (this.currentId === null || this.currentJobId === null) { - return; - } - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/upload-file?total=${fileChunkTotal}&index=${fileChunkList.chunkIndex}&name=${fileName}&token=${this.fileHashes[fileName]}`, - formData, - { - headers: { - 'Content-Type': 'multipart/form-data' - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.uploadFiles.code = result.data.status; - throw new Error(result.data.message); - } - - this.fileInfos.push(result.data.data); - this.requestStatus.uploadFiles = 'success'; - return result.data.data; - } catch (error) { - this.requestStatus.uploadFiles = 'failed'; - this.errorInfo.uploadFiles.message = error.message; - console.error(error.message); - } - }); - - deleteFiles = flow(function* deleteFiles( - this: DataImportRootStore, - fileName: string - ) { - this.requestStatus.deleteFiles = 'pending'; - - try { - const result = yield axios - .delete( - `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/upload-file?name=${fileName}&token=${this.fileHashes[fileName]}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.deleteFiles.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.deleteFiles = 'success'; - } catch (error) { - this.requestStatus.deleteFiles = 'failed'; - this.errorInfo.deleteFiles.message = error.message; - console.error(error.message); - } - }); - - sendUploadCompleteSignal = flow(function* sendUploadCompleteSignal( - this: DataImportRootStore - ) { - this.requestStatus.sendUploadCompleteSignal = 'pending'; - - try { - const result = yield axios - .put( - `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/upload-file/next-step` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.sendUploadCompleteSignal.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.sendUploadCompleteSignal = 'success'; - } catch (error) { - this.requestStatus.sendUploadCompleteSignal = 'failed'; - this.errorInfo.sendUploadCompleteSignal.message = error.message; - console.error(error.message); - } - }); - - sendMappingCompleteSignal = flow(function* sendMappingCompleteSignal( - this: DataImportRootStore - ) { - this.requestStatus.sendMappingCompleteSignal = 'pending'; - - try { - const result = yield axios - .put( - `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/file-mappings/next-step` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.sendMappingCompleteSignal.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.sendMappingCompleteSignal = 'success'; - } catch (error) { - this.requestStatus.sendMappingCompleteSignal = 'failed'; - this.errorInfo.sendMappingCompleteSignal.message = error.message; - console.error(error.message); - } - }); - - fetchVertexTypeList = flow(function* fetchVertexTypeList( - this: DataImportRootStore - ) { - this.requestStatus.fetchVertexTypeList = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.currentId}/schema/vertexlabels`, - { - params: { - page_size: -1 - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchVertexTypeList.code = result.data.status; - throw new Error(result.data.message); - } - - this.vertexTypes = result.data.data.records; - this.requestStatus.fetchVertexTypeList = 'success'; - } catch (error) { - this.requestStatus.fetchVertexTypeList = 'failed'; - this.errorInfo.fetchVertexTypeList.message = error.message; - } - }); - - fetchEdgeTypeList = flow(function* fetchEdgeTypeList( - this: DataImportRootStore - ) { - this.requestStatus.fetchEdgeTypeList = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.currentId}/schema/edgelabels`, - { - params: { - page_size: -1 - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchEdgeTypeList.code = result.data.status; - throw new Error(result.data.message); - } - - this.edgeTypes = result.data.data.records; - this.requestStatus.fetchEdgeTypeList = 'success'; - } catch (error) { - this.requestStatus.fetchEdgeTypeList = 'failed'; - this.errorInfo.fetchEdgeTypeList.message = error.message; - } - }); -} - -export default createContext(new DataImportRootStore()); diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts deleted file mode 100644 index 67bdcbe97..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts +++ /dev/null @@ -1,1321 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { isUndefined, isEmpty, cloneDeep, remove, flatMap } from 'lodash-es'; - -import { DataImportRootStore } from './dataImportRootStore'; -import { baseUrl, responseData } from '../../types/common'; -import { - initRequestStatus, - initErrorInfo, - createNewEdgeType, - createNewVertexType, - createValidateFileInfoErrorMessage, - createValidateAdvanceConfigErrorMessage -} from '../../factory/dataImportStore/dataMapStore'; -import { - FileMapInfo, - FileConfig, - FileMapResult, - VertexMap, - EdgeMap, - FileValidator, - ValueMapValidator -} from '../../types/GraphManagementStore/dataImportStore'; -import { checkIfLocalNetworkOffline, validateGraphProperty } from '../../utils'; - -import type { - VertexType, - EdgeType -} from '../../types/GraphManagementStore/metadataConfigsStore'; -import i18next from '../../../i18n'; - -export class DataMapStore { - dataImportRootStore: DataImportRootStore; - - constructor(dataImportRootStore: DataImportRootStore) { - this.dataImportRootStore = dataImportRootStore; - } - - // v1.3.1: check details from import-manager - @observable readOnly = false; - // v1.3.1: task process comes from import-manager entrance - @observable isIrregularProcess = false; - // v1.5.0 no check details but in progress when LOADING - @observable lock = false; - - @observable isExpandFileConfig = true; - // If one of the type info card is being edited - @observable isExpandTypeConfig = false; - @observable isAddNewTypeConfig = false; - @observable fileMapInfos: FileMapInfo[] = []; - // v1.3.1: preFetched file mapping infos from import-manager - @observable preFetchedFileMapInfos: FileMapInfo[] = []; - @observable selectedFileId: number = NaN; - @observable selectedFileInfo: FileMapInfo | null = null; - - @observable newVertexType: VertexMap = createNewVertexType(); - @observable editedVertexMap: VertexMap | null = null; - - @observable newEdgeType: EdgeMap = createNewEdgeType(); - @observable editedEdgeMap: EdgeMap | null = null; - - // validators - @observable - validateFileInfoErrorMessage: FileValidator = createValidateFileInfoErrorMessage(); - @observable - validateAdvanceConfigErrorMessage: ValueMapValidator = createValidateAdvanceConfigErrorMessage(); - - @observable requestStatus = initRequestStatus(); - @observable errorInfo = initErrorInfo(); - - @computed get isValidateFileInfo() { - return ( - !isEmpty(this.selectedFileInfo?.file_setting.delimiter) && - !isEmpty(this.selectedFileInfo?.file_setting.charset) && - !isEmpty(this.selectedFileInfo?.file_setting.date_format) && - !isEmpty(this.selectedFileInfo?.file_setting.skipped_line) && - Object.values(this.validateFileInfoErrorMessage).every( - (errorMessage) => errorMessage === '' - ) - ); - } - - @computed get isValidateSave() { - return ( - this.validateAdvanceConfigErrorMessage.null_values.every((value) => - isEmpty(value) - ) && - this.validateAdvanceConfigErrorMessage.value_mapping.every( - ({ column_name, values }) => { - const errorMessages = flatMap( - values, - ({ column_value, mapped_value }) => [column_value, mapped_value] - ); - - return ( - isEmpty(column_name) && - errorMessages.every((message) => isEmpty(message)) - ); - } - ) - ); - } - - @computed get filteredColumnNamesInVertexEditSelection() { - return this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => !this.editedVertexMap!.id_fields.includes(column_name) - ); - } - - @computed get filteredColumnNamesInVertexNewSelection() { - return this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => !this.newVertexType?.id_fields.includes(column_name) - ); - } - - @computed get filteredColumnNamesInEdgeEditSelection() { - return this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => - !this.editedEdgeMap!.source_fields.includes(column_name) && - !this.editedEdgeMap!.target_fields.includes(column_name) - ); - } - - @computed get filteredColumnNamesInEdgeNewSelection() { - return this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => - !this.newEdgeType.source_fields.includes(column_name) && - !this.newEdgeType.target_fields.includes(column_name) - ); - } - - @computed get filteredFileMapInfo() { - return this.fileMapInfos.filter(({ name }) => - this.dataImportRootStore.fileList.map(({ name }) => name).includes(name) - ); - } - - @action - switchReadOnly(isReadOnly: boolean) { - this.readOnly = isReadOnly; - } - - @action - switchLock(lock: boolean) { - this.lock = lock; - } - - @action - switchIrregularProcess(flag: boolean) { - this.isIrregularProcess = flag; - } - - @action - switchExpand(card: 'file' | 'type', flag: boolean) { - if (card === 'file') { - this.isExpandFileConfig = flag; - } else { - this.isExpandTypeConfig = flag; - } - } - - @action - switchEditTypeConfig(flag: boolean) { - this.isExpandTypeConfig = flag; - } - - @action - switchAddNewTypeConfig(flag: boolean) { - this.isAddNewTypeConfig = flag; - } - - @action - setSelectedFileId(id: number) { - this.selectedFileId = id; - } - - @action - setSelectedFileInfo() { - const fileInfo = this.fileMapInfos.find( - ({ id }) => id === this.selectedFileId - ); - - if (!isUndefined(fileInfo)) { - this.selectedFileInfo = fileInfo; - } - } - - @action - setFileConfig(key: T, value: FileConfig[T]) { - if (this.selectedFileInfo !== null) { - this.selectedFileInfo.file_setting[key] = value; - } - } - - @action - syncEditMap(type: 'vertex' | 'edge', mapIndex: number) { - if (type === 'vertex') { - this.editedVertexMap = cloneDeep( - this.selectedFileInfo!.vertex_mappings[mapIndex] - ); - } else { - this.editedEdgeMap = cloneDeep( - this.selectedFileInfo!.edge_mappings[mapIndex] - ); - } - } - - @action - setNewVertexConfig(key: T, value: VertexMap[T]) { - this.newVertexType[key] = value; - } - - @action - editVertexMapConfig( - key: T, - value: VertexMap[T], - vertexMapIndex: number - ) { - this.editedVertexMap![key] = value; - } - - @action - setNewEdgeConfig(key: T, value: EdgeMap[T]) { - this.newEdgeType[key] = value; - } - - @action - editEdgeMapConfig( - key: T, - value: EdgeMap[T], - edgeMapIndex: number - ) { - this.editedEdgeMap![key] = value; - } - - @action - setVertexFieldMappingKey(type: 'new' | 'edit', key: string, value?: string) { - if (type === 'new') { - this.newVertexType.field_mapping.unshift({ - column_name: key, - mapped_name: isUndefined(value) ? '' : value - }); - } else { - this.editedVertexMap!.field_mapping.unshift({ - column_name: key, - mapped_name: isUndefined(value) ? '' : value - }); - } - } - - @action - setEdgeFieldMappingKey(type: 'new' | 'edit', key: string, value?: string) { - if (type === 'new') { - this.newEdgeType.field_mapping.unshift({ - column_name: key, - mapped_name: isUndefined(value) ? '' : value - }); - } else { - this.editedEdgeMap!.field_mapping.unshift({ - column_name: key, - mapped_name: isUndefined(value) ? '' : value - }); - } - } - - @action - setVertexFieldMapping( - type: 'new' | 'edit', - value: string, - vertexMapFieldIndex: number - ) { - if (type === 'new') { - this.newVertexType.field_mapping[vertexMapFieldIndex].mapped_name = value; - } else { - this.editedVertexMap!.field_mapping[ - vertexMapFieldIndex - ].mapped_name = value; - } - } - - @action - setEdgeFieldMapping( - type: 'new' | 'edit', - value: string, - edgeMapFieldIndex: number - ) { - if (type === 'new') { - this.newEdgeType.field_mapping[edgeMapFieldIndex].mapped_name = value; - } else { - this.editedEdgeMap!.field_mapping[edgeMapFieldIndex].mapped_name = value; - } - } - - @action - removeVertexFieldMapping(type: 'new' | 'edit', columnName: string) { - if (type === 'new') { - remove( - this.newVertexType.field_mapping, - ({ column_name }) => column_name === columnName - ); - } else { - remove( - this.editedVertexMap!.field_mapping, - ({ column_name }) => column_name === columnName - ); - } - } - - @action - removeEdgeFieldMapping(type: 'new' | 'edit', columnName: string) { - if (type === 'new') { - remove( - this.newEdgeType.field_mapping, - ({ column_name }) => column_name === columnName - ); - } else { - remove( - this.editedEdgeMap!.field_mapping, - ({ column_name }) => column_name === columnName - ); - } - } - - @action - toggleVertexSelectAllFieldMapping( - type: 'new' | 'edit', - selectAll: boolean, - selectedVertex?: VertexType - ) { - if (selectAll) { - if (type === 'new') { - const existedFieldColumnNames = this.newVertexType.field_mapping.map( - ({ column_name }) => column_name - ); - - this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => - !existedFieldColumnNames.includes(column_name) && - !this.newVertexType.id_fields.includes(column_name) - ).map((columnName) => { - this.setVertexFieldMappingKey( - type, - columnName, - selectedVertex?.properties.find(({ name }) => name === columnName) - ?.name - ); - }); - } else { - const existedFieldColumnNames = this.editedVertexMap!.field_mapping.map( - ({ column_name }) => column_name - ); - - this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => - !existedFieldColumnNames.includes(column_name) && - !this.editedVertexMap!.id_fields.includes(column_name) - ).forEach((columnName) => { - this.setVertexFieldMappingKey( - type, - columnName, - selectedVertex?.properties.find(({ name }) => name === columnName) - ?.name - ); - }); - } - } else { - if (type === 'new') { - this.newVertexType.field_mapping = []; - } else { - this.editedVertexMap!.field_mapping = []; - } - } - } - - @action - toggleEdgeSelectAllFieldMapping( - type: 'new' | 'edit', - selectAll: boolean, - selectedEdge?: EdgeType - ) { - if (selectAll) { - if (type === 'new') { - const existedFieldColumnNames = this.newEdgeType.field_mapping.map( - ({ column_name }) => column_name - ); - - this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => - !existedFieldColumnNames.includes(column_name) && - !this.newEdgeType.source_fields.includes(column_name) && - !this.newEdgeType.target_fields.includes(column_name) - ).forEach((columnName) => { - this.setEdgeFieldMappingKey( - type, - columnName, - selectedEdge?.properties.find(({ name }) => name === columnName) - ?.name - ); - }); - } else { - const existedFieldColumnNames = this.editedEdgeMap!.field_mapping.map( - ({ column_name }) => column_name - ); - - this.selectedFileInfo!.file_setting.column_names.filter( - (column_name) => - !existedFieldColumnNames.includes(column_name) && - !this.editedEdgeMap!.source_fields.includes(column_name) && - !this.editedEdgeMap!.target_fields.includes(column_name) - ).map((columnName) => { - this.setEdgeFieldMappingKey( - type, - columnName, - selectedEdge?.properties.find(({ name }) => name === columnName) - ?.name - ); - }); - } - } else { - if (type === 'new') { - this.newEdgeType.field_mapping = []; - } else { - this.editedEdgeMap!.field_mapping = []; - } - } - } - - toggleCustomNullValue( - type: 'new' | 'edit', - collection: 'vertex' | 'edge', - flag: boolean - ) { - if (type === 'new') { - if (collection === 'vertex') { - if (flag) { - this.newVertexType.null_values.customized = ['']; - } else { - this.newVertexType.null_values.customized = []; - } - } else { - if (flag) { - this.newEdgeType.null_values.customized = ['']; - } else { - this.newEdgeType.null_values.customized = []; - } - } - } else { - if (collection === 'vertex') { - if (flag) { - this.editedVertexMap!.null_values.customized = ['']; - } else { - this.editedVertexMap!.null_values.customized = []; - } - } else { - if (flag) { - this.editedEdgeMap!.null_values.customized = ['']; - } else { - this.editedEdgeMap!.null_values.customized = []; - } - } - } - } - - editCheckedNullValues( - type: 'new' | 'edit', - collection: 'vertex' | 'edge', - values: string[] - ) { - if (type === 'new') { - if (collection === 'vertex') { - this.newVertexType.null_values.checked = values; - } else { - this.newEdgeType.null_values.checked = values; - } - } else { - if (collection === 'vertex') { - this.editedVertexMap!.null_values.checked = values; - } else { - this.editedEdgeMap!.null_values.checked = values; - } - } - } - - addCustomNullValues(type: 'new' | 'edit', collection: 'vertex' | 'edge') { - if (type === 'new') { - if (collection === 'vertex') { - this.newVertexType.null_values.customized.push(''); - } else { - this.newEdgeType.null_values.customized.push(''); - } - } else { - if (collection === 'vertex') { - this.editedVertexMap!.null_values.customized.push(''); - } else { - this.editedVertexMap!.null_values.customized.push(''); - } - } - } - - editCustomNullValues( - type: 'new' | 'edit', - collection: 'vertex' | 'edge', - value: string, - nullValueIndex: number - ) { - if (type === 'new') { - if (collection === 'vertex') { - this.newVertexType.null_values.customized[nullValueIndex] = value; - } else { - this.newEdgeType.null_values.customized[nullValueIndex] = value; - } - } else { - if (collection === 'vertex') { - this.editedVertexMap!.null_values.customized[nullValueIndex] = value; - } else { - this.editedEdgeMap!.null_values.customized[nullValueIndex] = value; - } - } - } - - @action - addVertexValueMapping(type: 'new' | 'edit') { - const newValueMapping = { - column_name: '', - values: [ - { - column_value: '', - mapped_value: '' - } - ] - }; - - if (type === 'new') { - this.newVertexType.value_mapping.push(newValueMapping); - } else { - this.editedVertexMap!.value_mapping.push(newValueMapping); - } - } - - @action - addEdgeValueMapping(type: 'new' | 'edit') { - const newValueMapping = { - column_name: '', - values: [ - { - column_value: '', - mapped_value: '' - } - ] - }; - - if (type === 'new') { - this.newEdgeType.value_mapping.push(newValueMapping); - } else { - this.editedEdgeMap!.value_mapping.push(newValueMapping); - } - } - - @action - addVertexValueMappingValue(type: 'new' | 'edit', vertexMapIndex: number) { - const newValue = { - column_value: '', - mapped_value: '' - }; - - if (type === 'new') { - this.newVertexType.value_mapping[vertexMapIndex].values.push(newValue); - } else { - this.editedVertexMap!.value_mapping[vertexMapIndex].values.push(newValue); - } - } - - @action - addEdgeValueMappingValue(type: 'new' | 'edit', vertexMapIndex: number) { - const newValue = { - column_value: '', - mapped_value: '' - }; - - if (type === 'new') { - this.newEdgeType.value_mapping[vertexMapIndex].values.push(newValue); - } else { - this.editedEdgeMap!.value_mapping[vertexMapIndex].values.push(newValue); - } - } - - @action - editVertexValueMappingColumnName( - type: 'new' | 'edit', - value: string, - valueMapIndex: number - ) { - if (type === 'new') { - this.newVertexType.value_mapping[valueMapIndex].column_name = value; - } else { - this.editedVertexMap!.value_mapping[valueMapIndex].column_name = value; - } - } - - @action - editEdgeValueMappingColumnName( - type: 'new' | 'edit', - value: string, - valueMapIndex: number - ) { - if (type === 'new') { - this.newEdgeType.value_mapping[valueMapIndex].column_name = value; - } else { - this.editedEdgeMap!.value_mapping[valueMapIndex].column_name = value; - } - } - - @action - editVertexValueMappingColumnValueName( - type: 'new' | 'edit', - field: 'column_value' | 'mapped_value', - value: string, - valueMapIndex: number, - valueIndex: number - ) { - if (type === 'new') { - this.newVertexType.value_mapping[valueMapIndex].values[valueIndex][ - field - ] = value; - } else { - this.editedVertexMap!.value_mapping[valueMapIndex].values[valueIndex][ - field - ] = value; - } - } - - @action - editEdgeValueMappingColumnValueName( - type: 'new' | 'edit', - field: 'column_value' | 'mapped_value', - value: string, - valueMapIndex: number, - valueIndex: number - ) { - if (type === 'new') { - this.newEdgeType.value_mapping[valueMapIndex].values[valueIndex][ - field - ] = value; - } else { - this.editedEdgeMap!.value_mapping[valueMapIndex].values[valueIndex][ - field - ] = value; - } - } - - @action - removeVertexValueMapping(type: 'new' | 'edit', valueMapIndex: number) { - if (type === 'new') { - remove( - this.newVertexType.value_mapping, - (_, index) => index === valueMapIndex - ); - } else { - remove( - this.editedVertexMap!.value_mapping, - (_, index) => index === valueMapIndex - ); - } - } - - @action - removeEdgeValueMapping(type: 'new' | 'edit', valueMapIndex: number) { - if (type === 'new') { - remove( - this.newEdgeType.value_mapping, - (_, index) => index === valueMapIndex - ); - } else { - remove( - this.editedEdgeMap!.value_mapping, - (_, index) => index === valueMapIndex - ); - } - } - - @action - removeVertexValueMappingValue( - type: 'new' | 'edit', - valueMapIndex: number, - valueIndex: number - ) { - if (type === 'new') { - remove( - this.newVertexType.value_mapping[valueMapIndex].values, - (_, index) => index === valueIndex - ); - } else { - remove( - this.editedVertexMap!.value_mapping[valueMapIndex].values, - (_, index) => index === valueIndex - ); - } - } - - @action - removeEdgeValueMappingValue( - type: 'new' | 'edit', - valueMapIndex: number, - valueIndex: number - ) { - if (type === 'new') { - remove( - this.newEdgeType.value_mapping[valueMapIndex].values, - (_, index) => index === valueIndex - ); - } else { - remove( - this.editedEdgeMap!.value_mapping[valueMapIndex].values, - (_, index) => index === valueIndex - ); - } - } - - @action - resetNewMap(newMap: 'vertex' | 'edge') { - if (newMap === 'vertex') { - this.newVertexType = createNewVertexType(); - } else { - this.newEdgeType = createNewEdgeType(); - } - } - - @action - resetEditMapping(editMapping: 'vertex' | 'edge') { - if (editMapping === 'vertex') { - this.editedVertexMap = createNewVertexType(); - } else { - this.editedEdgeMap = createNewEdgeType(); - } - } - - @action - validateFileInfo( - category: 'delimiter' | 'charset' | 'date_format' | 'skipped_line' - ) { - if (this.selectedFileInfo?.file_setting[category] === '') { - this.validateFileInfoErrorMessage[category] = i18next.t( - 'addition.store.cannot-be-empty1' - ); - return; - } - - if (category === 'date_format') { - const date_format = this.selectedFileInfo!.file_setting.date_format; - - if ( - date_format === 'yyyy-MM-dd' || - date_format === 'yyyy-MM-dd HH:mm:ss' || - date_format === 'yyyy-MM-dd HH:mm:ss.SSS' - ) { - this.validateFileInfoErrorMessage.date_format = ''; - return; - } - - if ( - !validateGraphProperty( - 'DATE', - // hack - this.selectedFileInfo!.file_setting.date_format.replace(/\w/g, '1') - ) - ) { - this.validateFileInfoErrorMessage.date_format = i18next.t( - 'addition.store.incorrect-time-format' - ); - return; - } - } - - this.validateFileInfoErrorMessage[category] = ''; - } - - @action - validateValueMapping( - type: 'vertex' | 'edge', - status: 'new' | 'edit', - category: 'null_values' | 'value_mappings', - optionIndex: number, - valueMapOptions?: { - field: 'column_name' | 'column_value' | 'mapped_value'; - valueIndex?: number; - } - ) { - let mapping; - - if (type === 'vertex') { - mapping = status === 'new' ? this.newVertexType : this.editedVertexMap; - } else { - mapping = status === 'new' ? this.newEdgeType : this.editedEdgeMap; - } - - if (category === 'null_values') { - const value = mapping!.null_values.customized[optionIndex]; - - if (isEmpty(value)) { - this.validateAdvanceConfigErrorMessage.null_values[ - optionIndex - ] = i18next.t('data-configs.validator.no-empty'); - } else { - this.validateAdvanceConfigErrorMessage.null_values[optionIndex] = ''; - } - } - - if (category === 'value_mappings') { - const { column_name, values } = mapping!.value_mapping[optionIndex]; - - if (valueMapOptions?.field === 'column_name') { - this.validateAdvanceConfigErrorMessage.value_mapping[ - optionIndex - ].column_name = isEmpty(column_name) - ? i18next.t('data-configs.validator.no-empty') - : ''; - } else { - const { column_value, mapped_value } = values[ - valueMapOptions?.valueIndex! - ]; - - if (valueMapOptions?.field === 'column_value') { - this.validateAdvanceConfigErrorMessage.value_mapping[ - optionIndex - ].values[valueMapOptions!.valueIndex!].column_value = isEmpty( - column_value - ) - ? i18next.t('data-configs.validator.no-empty') - : ''; - } - - if (valueMapOptions?.field === 'mapped_value') { - this.validateAdvanceConfigErrorMessage.value_mapping[ - optionIndex - ].values[valueMapOptions!.valueIndex!].mapped_value = isEmpty( - mapped_value - ) - ? i18next.t('data-configs.validator.no-empty') - : ''; - } - } - } - } - - @action - addValidateValueMappingOption( - category: 'null_values' | 'value_mappings' | 'value_mappings_value', - valueMapIndex?: number - ) { - if (category === 'null_values') { - this.validateAdvanceConfigErrorMessage.null_values.push(''); - } - - if (category === 'value_mappings') { - this.validateAdvanceConfigErrorMessage.value_mapping.push({ - column_name: '', - values: [ - { - column_value: '', - mapped_value: '' - } - ] - }); - } - - if (category === 'value_mappings_value') { - this.validateAdvanceConfigErrorMessage.value_mapping[ - valueMapIndex! - ].values.push({ - column_value: '', - mapped_value: '' - }); - } - } - - @action - syncValidateNullAndValueMappings(type: 'vertex' | 'edge') { - const { null_values, value_mapping } = - type === 'vertex' ? this.editedVertexMap! : this.editedEdgeMap!; - - null_values.customized.forEach(() => { - this.validateAdvanceConfigErrorMessage.null_values.push(''); - }); - - value_mapping.forEach(({ values }) => { - this.validateAdvanceConfigErrorMessage.value_mapping.push({ - column_name: '', - values: values.map(() => ({ - column_value: '', - mapped_value: '' - })) - }); - }); - } - - @action - removeValidateValueMappingOption( - type: 'vertex' | 'edge', - status: 'new' | 'edit', - category: 'null_values' | 'value_mappings' | 'value_mappings_value', - optionIndex: number, - valueMappingValueIndex?: number - ) { - let mapping; - - if (type === 'vertex') { - mapping = status === 'new' ? this.newVertexType : this.editedVertexMap; - } else { - mapping = status === 'new' ? this.newEdgeType : this.editedEdgeMap; - } - - if (category === 'null_values') { - remove( - this.validateAdvanceConfigErrorMessage.null_values, - (_, index) => index === optionIndex - ); - } - - if (category === 'value_mappings') { - remove( - this.validateAdvanceConfigErrorMessage.value_mapping, - (_, index) => index === optionIndex - ); - } - - if (category === 'value_mappings_value') { - remove( - this.validateAdvanceConfigErrorMessage.value_mapping[optionIndex] - .values, - (_, index) => index === valueMappingValueIndex - ); - } - } - - @action - allowAddPropertyMapping(type: 'vertex' | 'edge') { - let valueMapping; - - if (type === 'vertex') { - valueMapping = this.isExpandTypeConfig - ? this.editedVertexMap!.value_mapping - : this.newVertexType.value_mapping; - } else { - valueMapping = this.isExpandTypeConfig - ? this.editedEdgeMap!.value_mapping - : this.newEdgeType.value_mapping; - } - - return valueMapping.every((_, valueMapIndex) => - this.allowAddPropertyValueMapping(type, valueMapIndex) - ); - } - - @action - allowAddPropertyValueMapping(type: 'vertex' | 'edge', valueMapIndex: number) { - let currentValueMapping; - - if (type === 'vertex') { - currentValueMapping = this.isExpandTypeConfig - ? this.editedVertexMap!.value_mapping - : this.newVertexType.value_mapping; - } else { - currentValueMapping = this.isExpandTypeConfig - ? this.editedEdgeMap!.value_mapping - : this.newEdgeType.value_mapping; - } - - // when status is edit, init currentValueMapping is empty - // it's weired that TS has no error in destruction below - // where column_name or values could be undefined - // if (isEmpty(currentValueMapping[valueMapIndex])) { - // return true; - // } - - const { column_name, values } = currentValueMapping[valueMapIndex]; - - return ( - !isEmpty(column_name) && - values.every( - ({ column_value, mapped_value }) => - !isEmpty(column_value) && !isEmpty(mapped_value) - ) && - this.validateAdvanceConfigErrorMessage.value_mapping[ - valueMapIndex - ].values.every( - ({ column_value, mapped_value }) => - isEmpty(column_value) && isEmpty(mapped_value) - ) - ); - } - - @action - resetValidateFileInfoErrorMessage() { - this.validateFileInfoErrorMessage = createValidateFileInfoErrorMessage(); - } - - @action - resetValidateValueMapping(category: 'null_values' | 'value_mapping' | 'all') { - switch (category) { - case 'null_values': - case 'value_mapping': - this.validateAdvanceConfigErrorMessage[category] = []; - return; - case 'all': - this.validateAdvanceConfigErrorMessage = createValidateAdvanceConfigErrorMessage(); - return; - } - } - - @action - resetDataMaps() { - this.isExpandTypeConfig = false; - this.isAddNewTypeConfig = false; - - this.newVertexType = createNewVertexType(); - this.editedVertexMap = null; - - this.newEdgeType = createNewEdgeType(); - this.editedEdgeMap = null; - - this.validateFileInfoErrorMessage = createValidateFileInfoErrorMessage(); - this.validateAdvanceConfigErrorMessage = createValidateAdvanceConfigErrorMessage(); - - this.requestStatus = initRequestStatus(); - this.errorInfo = initErrorInfo(); - } - - @action - dispose() { - this.resetDataMaps(); - - this.readOnly = false; - this.lock = false; - this.isIrregularProcess = false; - this.isExpandFileConfig = true; - this.fileMapInfos = []; - this.preFetchedFileMapInfos = []; - this.selectedFileId = NaN; - this.selectedFileInfo = null; - } - - fetchDataMaps = flow(function* fetchDataMaps(this: DataMapStore) { - this.requestStatus.fetchDataMaps = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings`, - { - params: { - page_size: -1 - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchDataMaps.code = result.data.status; - throw new Error(result.data.message); - } - - this.fileMapInfos = result.data.data.records; - this.requestStatus.fetchDataMaps = 'success'; - } catch (error) { - this.requestStatus.fetchDataMaps = 'failed'; - this.errorInfo.fetchDataMaps.message = error.message; - console.error(error.message); - } - }); - - updateFileConfig = flow(function* updateFileConfig( - this: DataMapStore, - fileId: number - ) { - this.requestStatus.updateFileConfig = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/file-setting`, - this.selectedFileInfo?.file_setting - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.updateFileConfig.code = result.data.status; - throw new Error(result.data.message); - } - - this.selectedFileInfo!.file_setting = result.data.data.file_setting; - this.requestStatus.updateFileConfig = 'success'; - } catch (error) { - this.requestStatus.updateFileConfig = 'failed'; - this.errorInfo.updateFileConfig.message = error.message; - console.error(error.message); - } - }); - - updateVertexMap = flow(function* updateVertexMap( - this: DataMapStore, - method: 'add' | 'upgrade' | 'delete', - fileId: number - ) { - this.requestStatus.updateVertexMap = 'pending'; - - try { - let result: AxiosResponse>; - - switch (method) { - case 'add': { - const newVertexType = cloneDeep(this.newVertexType); - - if ( - newVertexType.null_values.checked.includes('NULL') && - !newVertexType.null_values.checked.includes('null') - ) { - newVertexType.null_values.checked.push('null'); - } - - result = yield axios - .post( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/vertex-mappings`, - newVertexType - ) - .catch(checkIfLocalNetworkOffline); - break; - } - case 'upgrade': { - const editedVertexMap = cloneDeep(this.editedVertexMap); - - if ( - editedVertexMap!.null_values.checked.includes('NULL') && - !editedVertexMap!.null_values.checked.includes('null') - ) { - editedVertexMap!.null_values.checked.push('null'); - } - - result = yield axios - .put( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/vertex-mappings/${this.editedVertexMap?.id}`, - editedVertexMap - ) - .catch(checkIfLocalNetworkOffline); - break; - } - case 'delete': - result = yield axios - .delete( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/vertex-mappings/${this.editedVertexMap?.id}` - ) - .catch(checkIfLocalNetworkOffline); - break; - } - - if (result.data.status !== 200) { - this.errorInfo.updateVertexMap.code = result.data.status; - throw new Error(result.data.message); - } - - this.selectedFileInfo!.vertex_mappings = result.data.data.vertex_mappings; - this.requestStatus.updateVertexMap = 'success'; - } catch (error) { - this.requestStatus.updateVertexMap = 'failed'; - this.errorInfo.updateVertexMap.message = error.message; - console.error(error.message); - } - }); - - updateEdgeMap = flow(function* updateEdgeMap( - this: DataMapStore, - method: 'add' | 'upgrade' | 'delete', - fileId: number - ) { - this.requestStatus.updateEdgeMap = 'pending'; - - try { - let result: AxiosResponse>; - - switch (method) { - case 'add': { - const newEdgeType = cloneDeep(this.newEdgeType); - - if ( - newEdgeType.null_values.checked.includes('NULL') && - !newEdgeType.null_values.checked.includes('null') - ) { - newEdgeType.null_values.checked.push('null'); - } - - result = yield axios - .post( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/edge-mappings`, - newEdgeType - ) - .catch(checkIfLocalNetworkOffline); - break; - } - case 'upgrade': { - const editedEdgeMap = cloneDeep(this.editedEdgeMap); - - if ( - editedEdgeMap!.null_values.checked.includes('NULL') && - !editedEdgeMap!.null_values.checked.includes('null') - ) { - editedEdgeMap!.null_values.checked.push('null'); - } - - result = yield axios - .put( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/edge-mappings/${this.editedEdgeMap?.id}`, - this.editedEdgeMap - ) - .catch(checkIfLocalNetworkOffline); - break; - } - case 'delete': - result = yield axios - .delete( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/edge-mappings/${this.editedEdgeMap?.id}` - ) - .catch(checkIfLocalNetworkOffline); - break; - } - - if (result.data.status !== 200) { - this.errorInfo.updateEdgeMap.code = result.data.status; - throw new Error(result.data.message); - } - - this.selectedFileInfo!.edge_mappings = result.data.data.edge_mappings; - this.requestStatus.updateEdgeMap = 'success'; - } catch (error) { - this.requestStatus.updateEdgeMap = 'failed'; - this.errorInfo.updateEdgeMap.message = error.message; - console.error(error.message); - } - }); - - deleteVertexMap = flow(function* deleteVertexMap( - this: DataMapStore, - mapIndex: number - ) { - this.requestStatus.deleteVertexMap = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .delete>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ - this.dataImportRootStore.currentJobId - }/file-mappings/${this.selectedFileInfo!.id}/vertex-mappings/${ - this.selectedFileInfo?.vertex_mappings[mapIndex].id - }` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.deleteVertexMap.code = result.data.status; - throw new Error(result.data.message); - } - - this.selectedFileInfo!.vertex_mappings = result.data.data.vertex_mappings; - this.requestStatus.deleteVertexMap = 'success'; - } catch (error) { - this.requestStatus.deleteVertexMap = 'failed'; - this.errorInfo.deleteVertexMap.message = error.message; - console.error(error.message); - } - }); - - deleteEdgeMap = flow(function* deleteEdgeMap( - this: DataMapStore, - mapIndex: number - ) { - this.requestStatus.deleteEdgeMap = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .delete>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ - this.dataImportRootStore.currentJobId - }/file-mappings/${this.selectedFileInfo!.id}/edge-mappings/${ - this.selectedFileInfo?.edge_mappings[mapIndex].id - }` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.deleteEdgeMap.code = result.data.status; - throw new Error(result.data.message); - } - - this.selectedFileInfo!.edge_mappings = result.data.data.edge_mappings; - this.requestStatus.deleteEdgeMap = 'success'; - } catch (error) { - this.requestStatus.deleteEdgeMap = 'failed'; - this.errorInfo.deleteEdgeMap.message = error.message; - console.error(error.message); - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts deleted file mode 100644 index c25c2f4ff..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts +++ /dev/null @@ -1,516 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { size, isUndefined } from 'lodash-es'; -import isInt from 'validator/lib/isInt'; - -import { DataImportRootStore } from './dataImportRootStore'; -import i18next from '../../../i18n'; -import { baseUrl, responseData } from '../../types/common'; -import { - LoadParameter, - ImportTasks, - AllImportTasksRecords -} from '../../types/GraphManagementStore/dataImportStore'; -import { - initRequestStatus, - initErrorInfo, - createValidateFileInfoErrorMessage -} from '../../../stores/factory/dataImportStore/serverDataImportStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -export class ServerDataImportStore { - dataImportRootStore: DataImportRootStore; - - constructor(dataImportRootStore: DataImportRootStore) { - this.dataImportRootStore = dataImportRootStore; - } - - @observable requestStatus = initRequestStatus(); - @observable errorInfo = initErrorInfo(); - - // v1.3.1 - @observable readOnly = false; - @observable importConfigReadOnly = false; - @observable isIrregularProcess = false; - - @observable isExpandImportConfig = true; - @observable isImporting = false; - @observable isImportFinished = false; - @observable importConfigs: LoadParameter | null = null; - @observable - validateImportConfigErrorMessage = createValidateFileInfoErrorMessage(); - - @observable importTasks: ImportTasks[] = []; - @observable.ref fileImportTaskIds: number[] = []; - @observable errorLogs = ''; - - @computed get isServerStartImport() { - return this.requestStatus.startImport !== 'standby'; - } - - @computed get successImportFileStatusNumber() { - return size(this.importTasks.filter(({ status }) => status === 'SUCCEED')); - } - - @computed get pausedImportFileNumber() { - return size(this.importTasks.filter(({ status }) => status === 'PAUSED')); - } - - @computed get abortImportFileNumber() { - return size(this.importTasks.filter(({ status }) => status === 'STOPPED')); - } - - @action - switchReadOnly(isReadOnly: boolean) { - this.readOnly = isReadOnly; - } - - @action - switchImportConfigReadOnly(isReadOnly: boolean) { - this.importConfigReadOnly = isReadOnly; - } - - @action - switchIrregularProcess(flag: boolean) { - this.isIrregularProcess = flag; - } - - @action - switchExpandImportConfig(flag: boolean) { - this.isExpandImportConfig = flag; - } - - @action - switchImporting(flag: boolean) { - this.isImporting = flag; - } - - @action - switchImportFinished(flag: boolean) { - this.isImportFinished = flag; - } - - @action - switchFetchImportStatus(status: string) { - this.requestStatus.fetchImportTasks = status; - } - - @action - syncImportConfigs(configs: LoadParameter) { - this.importConfigs = configs; - } - - @action - mutateImportConfigs( - key: T, - value: LoadParameter[T] - ) { - this.importConfigs![key] = value; - } - - @action - validateImportConfigs(key: keyof LoadParameter) { - switch (key) { - case 'max_parse_errors': - case 'max_insert_errors': - if (this.importConfigs![key] === '') { - this.validateImportConfigErrorMessage[key] = i18next.t( - 'server-data-import.validator.no-empty' - ); - - return; - } else if ( - !isInt(String(this.importConfigs![key]), { min: -1 }) || - String(Number(this.importConfigs![key])) === '0' - ) { - this.validateImportConfigErrorMessage[key] = i18next.t( - 'server-data-import.validator.need-integer-with-negative' - ); - - return; - } - - break; - case 'insert_timeout': - case 'retry_interval': - case 'retry_times': - if (this.importConfigs![key] === '') { - this.validateImportConfigErrorMessage[key] = i18next.t( - 'server-data-import.validator.no-empty' - ); - - return; - } else if (!isInt(String(this.importConfigs![key]), { min: 1 })) { - this.validateImportConfigErrorMessage[key] = i18next.t( - 'server-data-import.validator.need-integer' - ); - - return; - } - - break; - } - - this.validateImportConfigErrorMessage[key] = ''; - } - - @action - resetValidateImportConfigs() { - this.validateImportConfigErrorMessage = createValidateFileInfoErrorMessage(); - } - - @action - resetImportTasks() { - this.importTasks = []; - } - - @action - dispose() { - this.readOnly = false; - this.importConfigReadOnly = false; - this.isIrregularProcess = false; - this.requestStatus = initRequestStatus(); - this.errorInfo = initErrorInfo(); - this.errorLogs = ''; - this.isExpandImportConfig = true; - this.isImporting = false; - this.isImportFinished = false; - this.importConfigs = null; - this.importTasks = []; - this.fileImportTaskIds = []; - this.validateImportConfigErrorMessage = createValidateFileInfoErrorMessage(); - } - - fetchImportTasks = flow(function* fetchImportTasks( - this: ServerDataImportStore, - taskIds: number[] - ) { - this.requestStatus.fetchImportTasks = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ - this.dataImportRootStore.currentJobId - }/load-tasks/ids?${taskIds.map((id) => 'task_ids=' + id).join('&')}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchImportTasks.code = result.data.status; - throw new Error(result.data.message); - } - - this.importTasks = result.data.data; - - if (!this.importTasks.some(({ status }) => status === 'RUNNING')) { - this.switchFetchImportStatus('pending'); - this.switchImporting(false); - this.switchImportFinished(true); - } - - this.requestStatus.fetchImportTasks = 'success'; - } catch (error) { - this.requestStatus.fetchImportTasks = 'failed'; - this.errorInfo.fetchImportTasks.message = error.message; - console.error(error.message); - } - }); - - fetchAllImportTasks = flow(function* fetchAllImportTasks( - this: ServerDataImportStore - ) { - this.requestStatus.fetchImportTasks = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchImportTasks.code = result.data.status; - throw new Error(result.data.message); - } - - this.importTasks = result.data.data.records; - - if (!this.importTasks.some(({ status }) => status === 'RUNNING')) { - this.switchFetchImportStatus('pending'); - this.switchImporting(false); - this.switchImportFinished(true); - } - - this.requestStatus.fetchImportTasks = 'success'; - } catch (error) { - this.requestStatus.fetchImportTasks = 'failed'; - this.errorInfo.fetchImportTasks.message = error.message; - console.error(error.message); - } - }); - - setConfigParams = flow(function* setConfigParams( - this: ServerDataImportStore - ) { - this.requestStatus.setConfigParams = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/load-parameter`, - this.importConfigs - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.setConfigParams.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.setConfigParams = 'success'; - } catch (error) { - this.requestStatus.setConfigParams = 'failed'; - this.errorInfo.setConfigParams.message = error.message; - console.error(error.message); - } - }); - - startImport = flow(function* startImport( - this: ServerDataImportStore, - fileIds: number[] - ) { - this.requestStatus.startImport = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ - this.dataImportRootStore.currentJobId - }/load-tasks/start?${fileIds - .map((id) => 'file_mapping_ids=' + id) - .join('&')}`, - {} - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.startImport.code = result.data.status; - throw new Error(result.data.message); - } - - this.fileImportTaskIds = result.data.data.map(({ id }) => id); - this.requestStatus.startImport = 'success'; - } catch (error) { - this.requestStatus.startImport = 'failed'; - this.errorInfo.startImport.message = error.message; - console.error(error.message); - } - }); - - pauseImport = flow(function* pauseImport( - this: ServerDataImportStore, - taskId: number - ) { - this.requestStatus.pauseImport = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/pause`, - {}, - { - params: { - task_id: taskId - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.pauseImport.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.pauseImport = 'success'; - } catch (error) { - this.requestStatus.pauseImport = 'failed'; - this.errorInfo.pauseImport.message = error.message; - console.error(error.message); - } - }); - - resumeImport = flow(function* resumeImport( - this: ServerDataImportStore, - taskId: number - ) { - this.requestStatus.resumeImport = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/resume`, - {}, - { - params: { - task_id: taskId - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.resumeImport.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.resumeImport = 'success'; - } catch (error) { - this.requestStatus.resumeImport = 'failed'; - this.errorInfo.resumeImport.message = error.message; - console.error(error.message); - } - }); - - abortImport = flow(function* abortImport( - this: ServerDataImportStore, - taskId: number - ) { - this.requestStatus.abortImport = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/stop`, - {}, - { - params: { - task_id: taskId - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.abortImport.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.abortImport = 'success'; - } catch (error) { - this.requestStatus.abortImport = 'failed'; - this.errorInfo.abortImport.message = error.message; - console.error(error.message); - } - }); - - retryImport = flow(function* retryImport( - this: ServerDataImportStore, - taskId: number - ) { - this.requestStatus.retryImport = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/retry`, - {}, - { - params: { - task_id: taskId - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.retryImport.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.retryImport = 'success'; - } catch (error) { - this.requestStatus.retryImport = 'failed'; - this.errorInfo.retryImport.message = error.message; - console.error(error.message); - } - }); - - deleteTaskImport = flow(function* deleteTaskImport( - this: ServerDataImportStore, - taskId: number - ) { - this.requestStatus.deleteTaskImport = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .delete>( - `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/${taskId}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.deleteTaskImport.code = result.data.status; - throw new Error(result.data.message); - } - - this.requestStatus.deleteTaskImport = 'success'; - } catch (error) { - this.requestStatus.deleteTaskImport = 'failed'; - this.errorInfo.deleteTaskImport.message = error.message; - console.error(error.message); - } - }); - - checkErrorLogs = flow(function* checkErrorLogs( - this: ServerDataImportStore, - id: number, - jobId: number, - taskId: number - ) { - this.requestStatus.checkErrorLogs = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .get>( - `${baseUrl}/${id}/job-manager/${jobId}/load-tasks/${taskId}/reason` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.checkErrorLogs.code = result.data.status; - throw new Error(result.data.message); - } - - this.errorLogs = result.data.data; - this.requestStatus.checkErrorLogs = 'success'; - } catch (error) { - this.requestStatus.checkErrorLogs = 'failed'; - this.errorInfo.checkErrorLogs.message = error.message; - console.error(error.message); - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/graphManagementStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/graphManagementStore.ts deleted file mode 100644 index d22e5e782..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/graphManagementStore.ts +++ /dev/null @@ -1,571 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action, flow } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; - -import { baseUrl, responseData } from '../types/common'; -import { - LincenseInfo, - GraphData, - GraphDataConfig, - GraphDataPageConfig, - GraphDataResponse -} from '../types/GraphManagementStore/graphManagementStore'; -import i18next from '../../i18n'; - -export class GraphManagementStore { - [key: string]: any; - - // display create new graph layout - @observable showCreateNewGraph = false; - - // display delete modal after dropdown click in GraphList - @observable showDeleteModal = false; - - // disable all other buttons except from the current new/edit layout - @observable selectedEditIndex: number | null = null; - - // values from the Search component - @observable searchWords = ''; - - @observable errorInfo = { - fetchLicenseInfo: { - code: NaN, - message: '' - }, - fetchIdList: { - code: NaN, - message: '' - }, - fetchGraphData: { - code: NaN, - message: '' - }, - AddGraphData: { - code: NaN, - message: '' - }, - upgradeGraphData: { - code: NaN, - message: '' - }, - deleteGraphData: { - code: NaN, - message: '' - } - }; - - // searched results rather than initial fetched result - @observable.shallow isSearched = { - status: false, - value: '' - }; - - // is sidebar in graphdata details has expanded - @observable isExpanded = false; - - // is clicekd submit or save to validate - @observable isValidated = false; - - @observable.shallow requestStatus = { - fetchLicenseInfo: 'standby', - fetchIdList: 'standby', - fetchGraphData: 'standby', - AddGraphData: 'standby', - upgradeGraphData: 'standby', - deleteGraphData: 'standby' - }; - - @observable validateErrorMessage: Record = { - name: '', - graph: '', - host: '', - port: '', - usernameAndPassword: '' - }; - - @observable.shallow newGraphData: GraphDataConfig = { - name: '', - graph: '', - host: '', - port: '', - username: '', - password: '' - }; - - @observable.shallow editGraphData: GraphDataConfig = { - name: '', - graph: '', - host: '', - port: '', - username: '', - password: '' - }; - - @observable.ref idList: { id: number; name: string }[] = []; - @observable.ref graphData: GraphData[] = []; - @observable.ref licenseInfo: LincenseInfo | null = null; - - @observable.shallow graphDataPageConfig: GraphDataPageConfig = { - pageNumber: 1, - pageSize: 10, - pageTotal: 0 - }; - - @action - dispose() { - this.showCreateNewGraph = false; - this.showDeleteModal = false; - this.selectedEditIndex = null; - this.searchWords = ''; - this.isSearched = { - status: false, - value: '' - }; - this.isValidated = false; - this.isExpanded = false; - this.requestStatus = { - fetchLicenseInfo: 'standby', - fetchIdList: 'standby', - fetchGraphData: 'standby', - AddGraphData: 'standby', - upgradeGraphData: 'standby', - deleteGraphData: 'standby' - }; - this.graphData = []; - this.graphDataPageConfig = { - pageNumber: 1, - pageSize: 10, - pageTotal: 0 - }; - this.resetGraphDataConfig('new'); - this.resetGraphDataConfig('edit'); - this.resetErrorInfo(); - this.resetValidateErrorMessage(); - } - - @action - switchCreateNewGraph(flag: boolean) { - this.showCreateNewGraph = flag; - } - - @action - switchDeleteModal(flag: boolean) { - this.showDeleteModal = flag; - } - - @action - switchExpanded(flag: boolean) { - this.isExpanded = flag; - } - - @action - changeSelectedEditIndex(index: number | null) { - this.selectedEditIndex = index; - } - - @action - mutateSearchWords(text: string) { - this.searchWords = text; - } - - @action - mutateGraphDataConfig(key: string, type: 'new' | 'edit') { - return (eventTarget: HTMLInputElement) => { - this.isValidated = false; - - if (type === 'new') { - this.newGraphData[key] = eventTarget.value; - } - - if (type === 'edit') { - this.editGraphData[key] = eventTarget.value; - } - }; - } - - @action - swtichIsSearchedStatus(isSearched: boolean) { - this.isSearched.status = isSearched; - - isSearched - ? (this.isSearched.value = this.searchWords) - : (this.isSearched.value = ''); - } - - @action - fillInGraphDataConfig(index: number) { - this.editGraphData.id = String(this.graphData[index].id); - this.editGraphData.name = this.graphData[index].name; - this.editGraphData.graph = this.graphData[index].graph; - this.editGraphData.host = this.graphData[index].host; - this.editGraphData.port = String(this.graphData[index].port); - this.editGraphData.username = this.graphData[index].username; - this.editGraphData.password = this.graphData[index].password; - } - - @action - fillInGraphDataDefaultConfig() { - this.newGraphData.name = 'test'; - this.newGraphData.graph = 'hugegraph'; - this.newGraphData.host = '0.0.0.0'; - this.newGraphData.port = '8080'; - } - - @action - resetGraphDataConfig(type: 'new' | 'edit') { - if (type === 'new') { - Object.keys(this.newGraphData).forEach((key) => { - this.newGraphData[key] = ''; - }); - } - - if (type === 'edit') { - Object.keys(this.newGraphData).forEach((key) => { - this.editGraphData[key] = ''; - }); - } - } - - @action - mutatePageNumber(pageNumber: number) { - this.graphDataPageConfig.pageNumber = pageNumber; - } - - @action - validate(type: 'new' | 'edit') { - const nameReg = /^[A-Za-z]\w{0,47}$/; - const hostReg = /((\d{1,3}\.){3}\d{1,3}|([\w!~*'()-]+\.)*[\w!~*'()-]+)$/; - const portReg = /^([1-9]|[1-9]\d{1}|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; - const dataName = type + 'GraphData'; - let readyToSubmit = true; - - this.resetValidateErrorMessage(); - - if (!nameReg.test(this[dataName].name)) { - this[dataName].name.length === 0 - ? (this.validateErrorMessage.name = i18next.t( - 'addition.store.required' - )) - : (this.validateErrorMessage.name = i18next.t( - 'addition.store.no-match-input-requirements' - )); - readyToSubmit = false; - } - - if (!nameReg.test(this[dataName].graph)) { - this[dataName].graph.length === 0 - ? (this.validateErrorMessage.graph = i18next.t( - 'addition.store.required' - )) - : (this.validateErrorMessage.graph = i18next.t( - 'addition.store.no-match-input-requirements' - )); - readyToSubmit = false; - } - - if (!hostReg.test(this[dataName].host)) { - this[dataName].host.length === 0 - ? (this.validateErrorMessage.host = i18next.t( - 'addition.store.required' - )) - : (this.validateErrorMessage.host = i18next.t('addition.store.rule1')); - readyToSubmit = false; - } - - if (!portReg.test(this[dataName].port)) { - this[dataName].port.length === 0 - ? (this.validateErrorMessage.port = i18next.t( - 'addition.store.required' - )) - : (this.validateErrorMessage.port = i18next.t('addition.store.rule2')); - readyToSubmit = false; - } - - if ( - dataName === 'newGraphData' && - ((this[dataName].username.length !== 0 && - this[dataName].password.length === 0) || - (this[dataName].username.length === 0 && - this[dataName].password.length !== 0)) - ) { - this.validateErrorMessage.usernameAndPassword = i18next.t( - 'addition.store.rule3' - ); - readyToSubmit = false; - } - - return readyToSubmit; - } - - @action - switchValidateStatus(flag: boolean) { - this.isValidated = flag; - } - - @action - resetErrorInfo() { - this.errorInfo = { - fetchLicenseInfo: { - code: NaN, - message: '' - }, - fetchIdList: { - code: NaN, - message: '' - }, - fetchGraphData: { - code: NaN, - message: '' - }, - AddGraphData: { - code: NaN, - message: '' - }, - upgradeGraphData: { - code: NaN, - message: '' - }, - deleteGraphData: { - code: NaN, - message: '' - } - }; - } - - @action - resetValidateErrorMessage() { - Object.keys(this.validateErrorMessage).forEach((key) => { - this.validateErrorMessage[key] = ''; - }); - } - - fetchLicenseInfo = flow(function* fetchLicenseInfo( - this: GraphManagementStore - ) { - this.resetErrorInfo(); - this.requestStatus.fetchLicenseInfo = 'pending'; - - try { - const result: AxiosResponse> = yield axios.get( - '/about' - ); - - if (result.data.status !== 200) { - this.errorInfo.fetchLicenseInfo.code = result.data.status; - throw new Error(result.data.message); - } - - this.licenseInfo = result.data.data; - } catch (error) { - this.requestStatus.fetchLicenseInfo = 'failed'; - this.errorInfo.fetchLicenseInfo.message = error.message; - console.error(error.message); - } - }); - - fetchIdList = flow(function* fetchIdList(this: GraphManagementStore) { - this.resetErrorInfo(); - this.requestStatus.fetchIdList = 'pending'; - - try { - const result: AxiosResponse = yield axios.get< - GraphData - >(baseUrl, { - params: { - page_size: -1 - } - }); - - if (result.data.status === 200 || result.data.status === 401) { - if (result.data.status === 200) { - this.requestStatus.fetchIdList = 'success'; - } - - this.idList = result.data.data.records.map(({ id, name }) => ({ - id, - name - })); - - this.graphData = result.data.data.records; - this.graphDataPageConfig.pageTotal = result.data.data.total; - } - - if (result.data.status !== 200) { - this.errorInfo.fetchIdList.code = result.data.status; - throw new Error(result.data.message); - } - } catch (error) { - this.requestStatus.fetchIdList = 'failed'; - this.errorInfo.fetchIdList.message = error.message; - console.error(error.message); - } - }); - - fetchGraphDataList = flow(function* fetchGraphDataList( - this: GraphManagementStore - ) { - this.resetErrorInfo(); - const url = - `${baseUrl}?page_no=${this.graphDataPageConfig.pageNumber}&page_size=${this.graphDataPageConfig.pageSize}` + - (this.isSearched.status && this.searchWords !== '' - ? `&content=${this.searchWords}` - : ''); - - this.requestStatus.fetchGraphData = 'pending'; - - try { - const result: AxiosResponse = yield axios.get< - GraphData - >(url); - - if (result.data.status === 200 || result.data.status === 401) { - if (result.data.status === 200) { - this.requestStatus.fetchGraphData = 'success'; - } - - this.graphData = result.data.data.records; - this.graphDataPageConfig.pageTotal = result.data.data.total; - } - - if (result.data.status !== 200) { - this.errorInfo.fetchGraphData.code = result.data.status; - throw new Error(result.data.message); - } - } catch (error) { - this.requestStatus.fetchGraphData = 'failed'; - this.errorInfo.fetchGraphData.message = error.message; - console.error(error.message); - } - }); - - AddGraphData = flow(function* AddGraphData(this: GraphManagementStore) { - this.resetErrorInfo(); - this.requestStatus.AddGraphData = 'pending'; - const filteredParams = filterParams(this.newGraphData); - - try { - const result: AxiosResponse = yield axios.post< - GraphDataResponse - >(baseUrl, filteredParams); - - if (result.data.status === 200 || result.data.status === 401) { - if (result.data.status === 200) { - this.requestStatus.AddGraphData = 'success'; - } - } - - if (result.data.status !== 200) { - this.errorInfo.AddGraphData.code = result.data.status; - throw new Error(result.data.message); - } - } catch (error) { - this.requestStatus.AddGraphData = 'failed'; - this.errorInfo.AddGraphData.message = error.message; - console.error(error.message); - } - }); - - upgradeGraphData = flow(function* upgradeGraphData( - this: GraphManagementStore, - id: number - ) { - this.resetErrorInfo(); - this.requestStatus.upgradeGraphData = 'pending'; - const filteredParams = filterParams(this.editGraphData); - - try { - const result: AxiosResponse = yield axios.put< - GraphDataResponse - >(`${baseUrl}/${id}`, filteredParams); - - if (result.data.status === 200 || result.data.status === 401) { - if (result.data.status === 200) { - this.requestStatus.upgradeGraphData = 'success'; - } - } - - if (result.data.status !== 200) { - this.errorInfo.upgradeGraphData.code = result.data.status; - throw new Error(result.data.message); - } - } catch (error) { - this.requestStatus.upgradeGraphData = 'failed'; - this.errorInfo.upgradeGraphData.message = error.message; - console.error(error.message); - } - }); - - deleteGraphData = flow(function* deleteGraphData( - this: GraphManagementStore, - id - ) { - this.resetErrorInfo(); - this.requestStatus.deleteGraphData = 'pending'; - - try { - const result: AxiosResponse = yield axios.delete< - GraphDataResponse - >(`${baseUrl}/${id}`); - - if (result.data.status === 200 || result.data.status === 401) { - if (result.data.status === 200) { - this.requestStatus.deleteGraphData = 'success'; - } - - // if current pageNumber has no data after delete, set the pageNumber to the previous - if ( - this.graphData.length === 1 && - this.graphDataPageConfig.pageNumber > 1 - ) { - this.graphDataPageConfig.pageNumber = - this.graphDataPageConfig.pageNumber - 1; - } - } - - if (result.data.status !== 200) { - this.errorInfo.deleteGraphData.code = result.data.status; - throw new Error(result.data.message); - } - } catch (error) { - this.requestStatus.deleteGraphData = 'failed'; - this.errorInfo.deleteGraphData.message = error.message; - console.error(error.message); - } - }); -} - -function filterParams(originParams: GraphDataConfig): GraphDataConfig { - const newParams = {} as GraphDataConfig; - - Object.keys(originParams).forEach((key) => { - const value = originParams[key]; - - if (typeof value !== 'undefined') { - newParams[key] = originParams[key]; - } - }); - - return newParams; -} - -// For DI in subclass -export const GraphManagementStoreInstance = new GraphManagementStore(); - -export default createContext(GraphManagementStoreInstance); diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts deleted file mode 100644 index 5fdaca468..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts +++ /dev/null @@ -1,1533 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { cloneDeep, isUndefined, remove } from 'lodash-es'; - -import { MetadataConfigsRootStore } from './metadataConfigsStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -import { baseUrl, responseData } from '../../types/common'; -import { - EdgeType, - EditEdgeTypeParams, - EdgeTypeListResponse, - PageConfig, - CheckedReusableData, - EdgeTypeValidateFields, - EdgeTypeValidatePropertyIndexes -} from '../../types/GraphManagementStore/metadataConfigsStore'; - -import SelectedSolidArrowIcon from '../../../assets/imgs/ic_arrow_selected.svg'; -import NoSelectedSolidArrowIcon from '../../../assets/imgs/ic_arrow.svg'; -import SelectedSolidStraightIcon from '../../../assets/imgs/ic_straight_selected.svg'; -import NoSelectedSolidStraightIcon from '../../../assets/imgs/ic_straight.svg'; -import i18next from '../../../i18n'; -export class EdgeTypeStore { - metadataConfigsRootStore: MetadataConfigsRootStore; - - constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { - this.metadataConfigsRootStore = MetadataConfigsRootStore; - } - - @observable validateLicenseOrMemories = true; - @observable currentTabStatus = 'list'; - - @observable.shallow requestStatus = { - fetchEdgeTypeList: 'pending', - addEdgeType: 'pending', - updateEdgeType: 'pending', - deleteEdgeType: 'pending', - checkConflict: 'pending', - recheckConflict: 'pending', - reuseEdgeType: 'pending' - }; - - @observable errorMessage = ''; - - // should user able to create new vertex type - @observable isCreatedReady = false; - // should user able to create new property index - @observable isAddNewPropertyIndexReady = true; - - // only have to check property - @observable isEditReady = true; - - @observable.ref colorSchemas = [ - '#5c73e6', - '#569380', - '#8ecc93', - '#fe9227', - '#fe5b5d', - '#fd6ace', - '#4d8dda', - '#57c7e3', - '#ffe081', - '#c570ff', - '#2b65ff', - '#0eb880', - '#76c100', - '#ed7600', - '#e65055', - '#a64ee6', - '#108cee', - '#00b5d9', - '#f2ca00', - '#e048ae' - ]; - - @observable.ref edgeShapeSchemas = [ - { - blackicon: NoSelectedSolidArrowIcon, - blueicon: SelectedSolidArrowIcon, - flag: true, - shape: 'solid' - }, - { - blackicon: NoSelectedSolidStraightIcon, - blueicon: SelectedSolidStraightIcon, - flag: false, - shape: 'solid' - } - ]; - - @observable.ref thicknessSchemas = [ - { ch: '粗', en: 'THICK' }, - { ch: '中', en: 'NORMAL' }, - { ch: '细', en: 'FINE' } - ]; - - @observable edgeTypeListPageConfig: PageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - @observable.shallow newEdgeType: EdgeType = { - name: '', - source_label: '', - target_label: '', - link_multi_times: false, - properties: [], - sort_keys: [], - property_indexes: [], - open_label_index: false, - style: { - color: '#5c73e6', - icon: null, - with_arrow: true, - thickness: 'NORMAL', - display_fields: ['~id'] - } - }; - - @observable.ref edgeTypes: EdgeType[] = []; - - @observable.ref selectedEdgeType: EdgeType | null = null; - @observable.ref selectedEdgeTypeNames: string[] = []; - - @observable.ref editedSelectedEdgeType: EditEdgeTypeParams = { - append_properties: [], - append_property_indexes: [], - remove_property_indexes: [], - style: { - color: null, - icon: null, - with_arrow: null, - thickness: 'NORMAL', - display_fields: [] - } - }; - - @observable addedPropertiesInSelectedEdgeType: Set = new Set(); - - // reuse - @observable reusableEdgeTypes: EdgeType[] = []; - @observable checkedReusableData: CheckedReusableData | null = null; - @observable - editedCheckedReusableData: CheckedReusableData | null = null; - - @observable reusableEdgeTypeNameChangeIndexes: Set = new Set< - number - >(); - @observable reusableVertexTypeNameChangeIndexes: Set = new Set< - number - >(); - @observable reusablePropertyNameChangeIndexes: Set = new Set< - number - >(); - @observable reusablePropertyIndexNameChangeIndexes: Set = new Set< - number - >(); - - @observable validateNewEdgeTypeErrorMessage: Record< - EdgeTypeValidateFields, - string | EdgeTypeValidatePropertyIndexes[] - > = { - name: '', - sourceLabel: '', - targetLabel: '', - properties: '', - sortKeys: '', - propertyIndexes: [], - displayFeilds: [] - }; - - @observable.shallow validateEditEdgeTypeErrorMessage: Record< - 'propertyIndexes', - EdgeTypeValidatePropertyIndexes[] - > = { - propertyIndexes: [] - }; - - @observable validateReuseErrorMessage: Record< - 'edgeType' | 'vertexType' | 'property' | 'property_index', - string - > = { - edgeType: '', - vertexType: '', - property: '', - property_index: '' - }; - - @computed get reusableEdgeTypeDataMap() { - const dataMap: Record> = {}; - - this.reusableEdgeTypes.forEach(({ name }) => { - dataMap[name] = { - key: name, - title: name - }; - }); - - return dataMap; - } - - @computed get isReadyToReuse() { - return ( - this.editedCheckedReusableData && - this.editedCheckedReusableData!.propertykey_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - this.editedCheckedReusableData!.vertexlabel_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - this.editedCheckedReusableData!.propertyindex_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - this.editedCheckedReusableData!.edgelabel_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - // no data standingby validation - this.reusableEdgeTypeNameChangeIndexes.size === 0 && - this.reusableVertexTypeNameChangeIndexes.size === 0 && - this.reusablePropertyNameChangeIndexes.size === 0 && - this.reusablePropertyIndexNameChangeIndexes.size === 0 - ); - } - - @action - changeCurrentTabStatus(status: string) { - this.currentTabStatus = status; - } - - @action - mutateNewEdgeType(newEdgeType: EdgeType) { - this.newEdgeType = newEdgeType; - } - - @action - mutateSelectedEdgeTypeNames(names: string[]) { - this.selectedEdgeTypeNames = names; - } - - @action - mutatePageNumber(pageNumber: number) { - this.edgeTypeListPageConfig.pageNumber = pageNumber; - } - - @action - mutatePageSort(sort: 'desc' | 'asc') { - this.edgeTypeListPageConfig.sort = sort; - } - - @action - selectEdgeType(index: number | null) { - if (index === null) { - this.selectedEdgeType = null; - return; - } - - this.selectedEdgeType = cloneDeep(this.edgeTypes[index]); - } - - @action - mutateSelectedProperty(selectedProperty: EdgeType) { - this.selectedEdgeType = selectedProperty; - } - - @action - mutateEditedSelectedEdgeType(editedSelectedEdgeType: EditEdgeTypeParams) { - this.editedSelectedEdgeType = editedSelectedEdgeType; - } - - @action - resetNewEdgeType() { - this.newEdgeType = { - name: '', - source_label: '', - target_label: '', - link_multi_times: false, - properties: [], - sort_keys: [], - property_indexes: [], - open_label_index: false, - style: { - color: '#5c73e6', - icon: null, - with_arrow: true, - thickness: 'NORMAL', - display_fields: ['~id'] - } - }; - - this.isCreatedReady = false; - } - - @action - resetAddedPropertiesInSelectedEdgeType() { - this.addedPropertiesInSelectedEdgeType.clear(); - } - - @action - resetEditedSelectedEdgeType() { - this.editedSelectedEdgeType = { - append_properties: [], - append_property_indexes: [], - remove_property_indexes: [], - style: { - color: null, - icon: null, - with_arrow: null, - thickness: 'NORMAL', - display_fields: [] - } - }; - - this.resetAddedPropertiesInSelectedEdgeType(); - } - - // reuse - - @action - mutateEditedReusableData(newEditedReusableVertexTypes: CheckedReusableData) { - this.editedCheckedReusableData = newEditedReusableVertexTypes; - } - - @action - mutateReusableEdgeTypeChangeIndexes(index: number) { - this.reusableEdgeTypeNameChangeIndexes.add(index); - } - - @action - mutateReusableVertexTypeChangeIndexes(index: number) { - this.reusableVertexTypeNameChangeIndexes.add(index); - } - - @action - mutateReusablePropertyNameChangeIndexes(index: number) { - this.reusablePropertyNameChangeIndexes.add(index); - } - - @action - mutateReusablePropertyIndexNameChangeIndexes(index: number) { - this.reusablePropertyIndexNameChangeIndexes.add(index); - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusableEdgeTypeName(index: number) { - this.editedCheckedReusableData!.edgelabel_conflicts[ - index - ].entity.name = this.checkedReusableData!.edgelabel_conflicts[ - index - ].entity.name; - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusableVertexTypeName(index: number) { - this.editedCheckedReusableData!.vertexlabel_conflicts[ - index - ].entity.name = this.checkedReusableData!.vertexlabel_conflicts[ - index - ].entity.name; - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusablePropertyName(index: number) { - this.editedCheckedReusableData!.propertykey_conflicts[ - index - ].entity.name = this.checkedReusableData!.propertykey_conflicts[ - index - ].entity.name; - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusablePropertyIndexName(index: number) { - this.editedCheckedReusableData!.propertyindex_conflicts[ - index - ].entity.name = this.checkedReusableData!.propertyindex_conflicts[ - index - ].entity.name; - } - - @action - clearReusableNameChangeIndexes() { - this.reusableEdgeTypeNameChangeIndexes.clear(); - this.reusableVertexTypeNameChangeIndexes.clear(); - this.reusablePropertyNameChangeIndexes.clear(); - this.reusablePropertyIndexNameChangeIndexes.clear(); - } - - @action - resetReusableEdgeTypes() { - this.reusableEdgeTypes = []; - } - - @action - validateNewEdgeType(category: EdgeTypeValidateFields, initial = false) { - let isReady = true; - - if (category === 'name') { - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(this.newEdgeType.name)) { - if (this.newEdgeType.name.length === 0) { - !initial && - (this.validateNewEdgeTypeErrorMessage.name = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } else { - !initial && - (this.validateNewEdgeTypeErrorMessage.name = i18next.t( - 'addition.store.rule4' - )); - isReady = false; - } - } else { - this.validateNewEdgeTypeErrorMessage.name = ''; - } - } - - if (category === 'sourceLabel') { - if (this.newEdgeType.source_label === '') { - !initial && - (this.validateNewEdgeTypeErrorMessage.properties = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'targetLabel') { - if (this.newEdgeType.target_label === '') { - !initial && - (this.validateNewEdgeTypeErrorMessage.properties = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'properties') { - if ( - this.newEdgeType.properties.length === 0 && - this.newEdgeType.link_multi_times - ) { - !initial && - (this.validateNewEdgeTypeErrorMessage.properties = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'sortKeys') { - if ( - this.newEdgeType.link_multi_times && - this.newEdgeType.sort_keys.length === 0 - ) { - !initial && - (this.validateNewEdgeTypeErrorMessage.sortKeys = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'displayFeilds') { - if (this.newEdgeType.style.display_fields.length === 0) { - !initial && - (this.validateNewEdgeTypeErrorMessage.displayFeilds = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'propertyIndexes') { - this.isAddNewPropertyIndexReady = true; - this.validateNewEdgeTypeErrorMessage.propertyIndexes = this.newEdgeType.property_indexes.map( - ({ name, type, fields }) => { - const validatedPropertyIndex = { - name: '', - type: '', - properties: '' - }; - - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { - if (!initial) { - if (name.length !== 0) { - validatedPropertyIndex.name = i18next.t('addition.store.rule4'); - } else { - validatedPropertyIndex.name = i18next.t( - 'addition.store.item-is-required' - ); - } - } - - isReady = false; - this.isAddNewPropertyIndexReady = false; - } else { - validatedPropertyIndex.name = ''; - } - - if (type.length === 0) { - !initial && - (validatedPropertyIndex.type = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - this.isAddNewPropertyIndexReady = false; - } else { - validatedPropertyIndex.type = ''; - } - - if (Array.isArray(fields)) { - if (fields.length === 0) { - !initial && - (validatedPropertyIndex.properties = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - this.isAddNewPropertyIndexReady = false; - } - } else { - validatedPropertyIndex.properties = ''; - } - - return validatedPropertyIndex; - } - ); - } - - return isReady; - } - - @action - validateAllNewEdgeType(initial = false) { - this.isCreatedReady = - this.validateNewEdgeType('name', initial) && - this.validateNewEdgeType('sourceLabel', initial) && - this.validateNewEdgeType('targetLabel', initial) && - this.validateNewEdgeType('properties', initial) && - this.validateNewEdgeType('sortKeys', initial) && - this.validateNewEdgeType('propertyIndexes', initial) && - this.validateNewEdgeType('displayFeilds', initial); - } - - @action - validateEditEdgeType(initial = false) { - this.isEditReady = true; - - this.validateEditEdgeTypeErrorMessage.propertyIndexes = this.editedSelectedEdgeType.append_property_indexes.map( - ({ name, type, fields }) => { - const validatedPropertyIndex = { - name: '', - type: '', - properties: '' - }; - - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { - if (!initial) { - if (name.length !== 0) { - validatedPropertyIndex.name = i18next.t('addition.store.rule4'); - } else { - validatedPropertyIndex.name = i18next.t( - 'addition.store.item-is-required' - ); - } - } - - this.isEditReady = false; - } else { - validatedPropertyIndex.name = ''; - } - - if (type.length === 0) { - !initial && - (validatedPropertyIndex.type = i18next.t( - 'addition.store.item-is-required' - )); - this.isEditReady = false; - } else { - validatedPropertyIndex.type = ''; - } - - if (Array.isArray(fields)) { - if (fields.length === 0) { - !initial && - (validatedPropertyIndex.properties = i18next.t( - 'addition.store.item-is-required' - )); - this.isEditReady = false; - } - } else { - validatedPropertyIndex.properties = ''; - } - - return validatedPropertyIndex; - } - ); - } - - @action - validateReuseData( - category: 'edgeType' | 'vertexType' | 'property' | 'property_index', - originalValue: string, - newValue: string - ) { - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(newValue)) { - if (newValue.length === 0) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.item-is-required' - ); - } else { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.rule4' - ); - } - - return false; - } - - // if value has changed - if (originalValue !== newValue) { - if (category === 'edgeType') { - if ( - !isUndefined( - this.checkedReusableData!.edgelabel_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-edge-name-notice' - ); - - return false; - } - } - - if (category === 'vertexType') { - if ( - !isUndefined( - this.checkedReusableData!.vertexlabel_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) || - !isUndefined( - this.checkedReusableData!.edgelabel_conflicts.find( - ({ entity }) => - entity.source_label === newValue || - entity.target_label === newValue - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-vertex-name-notice' - ); - - return false; - } - } - - if (category === 'property') { - // check if there's an existed value equals to new value - if ( - !isUndefined( - this.checkedReusableData!.propertykey_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) || - !isUndefined( - this.checkedReusableData!.propertyindex_conflicts.find( - ({ entity }) => - !isUndefined( - entity.fields.find((fieldName) => fieldName === newValue) - ) - ) - ) || - !isUndefined( - this.checkedReusableData!.vertexlabel_conflicts.find( - ({ entity }) => - !isUndefined( - entity.properties.find(({ name }) => name === newValue) - ) || - !isUndefined( - entity.primary_keys.find((key) => key === newValue) - ) || - !isUndefined( - entity.property_indexes.find( - ({ fields }) => - !isUndefined( - fields.find((fieldName) => fieldName === newValue) - ) - ) - ) - ) - ) || - !isUndefined( - this.checkedReusableData!.edgelabel_conflicts.find( - ({ entity }) => - !isUndefined( - entity.properties.find(({ name }) => name === newValue) - ) || - !isUndefined( - entity.sort_keys.find((key) => key === newValue) - ) || - !isUndefined( - entity.property_indexes.find( - ({ fields }) => - !isUndefined( - fields.find((fieldName) => fieldName === newValue) - ) - ) - ) - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-property-name-notice' - ); - - return false; - } - } - - if (category === 'property_index') { - if ( - !isUndefined( - this.checkedReusableData!.propertyindex_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) || - !isUndefined( - this.checkedReusableData!.vertexlabel_conflicts.find( - ({ entity }) => - !isUndefined( - entity.property_indexes.find(({ name }) => name === newValue) - ) - ) - ) || - !isUndefined( - this.checkedReusableData!.edgelabel_conflicts.find( - ({ entity }) => - !isUndefined( - entity.property_indexes.find(({ name }) => name === newValue) - ) - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-index-name-notice' - ); - - return false; - } - } - } - - return true; - } - - @action - mutateReuseData( - category: 'edgeType' | 'vertexType' | 'property' | 'property_index', - originalValue: string, - newValue: string - ) { - const editedCheckedReusableData = cloneDeep(this.editedCheckedReusableData); - - if (category === 'edgeType') { - } - - if (category === 'vertexType') { - editedCheckedReusableData!.edgelabel_conflicts.forEach( - ({ entity }, index) => { - if (entity.source_label === originalValue) { - entity.source_label = newValue; - this.reusableEdgeTypeNameChangeIndexes.add(index); - } - - if (entity.target_label === originalValue) { - entity.target_label = newValue; - this.reusableEdgeTypeNameChangeIndexes.add(index); - } - } - ); - } - - if (category === 'property') { - editedCheckedReusableData!.edgelabel_conflicts.forEach( - ({ entity }, index) => { - const mutatePropertyIndex = entity.properties.findIndex( - ({ name }) => name === originalValue - ); - - if (mutatePropertyIndex !== -1) { - entity.properties[mutatePropertyIndex].name = newValue; - // property name in current vertex label has been edited - this.reusableEdgeTypeNameChangeIndexes.add(index); - } - - const sortKeyIndex = entity.sort_keys.findIndex( - (key) => key === originalValue - ); - - if (sortKeyIndex !== -1) { - entity.sort_keys[sortKeyIndex] = newValue; - this.reusableEdgeTypeNameChangeIndexes.add(index); - } - - entity.property_indexes.forEach(({ fields }) => { - const mutatePropertyIndexIndex = fields.findIndex( - (fieldName) => fieldName === originalValue - ); - - if (mutatePropertyIndexIndex !== -1) { - fields[mutatePropertyIndex] = newValue; - this.reusableEdgeTypeNameChangeIndexes.add(index); - } - }); - } - ); - - editedCheckedReusableData!.vertexlabel_conflicts.forEach( - ({ entity }, index) => { - const mutatePropertyIndex = entity.properties.findIndex( - ({ name }) => name === originalValue - ); - - if (mutatePropertyIndex !== -1) { - entity.properties[mutatePropertyIndex].name = newValue; - // property name in current vertex label has been edited - this.reusableVertexTypeNameChangeIndexes.add(index); - - // current vertex belongs to which edge - const mutateEdgeIndex = editedCheckedReusableData!.edgelabel_conflicts.findIndex( - (edge) => - edge.entity.source_label === entity.name || - edge.entity.target_label === entity.name - ); - - // property name in source_label or target_label has been edited - this.reusableEdgeTypeNameChangeIndexes.add(mutateEdgeIndex); - } - - const primaryKeyIndex = entity.primary_keys.findIndex( - (key) => key === originalValue - ); - - if (primaryKeyIndex !== -1) { - entity.primary_keys[primaryKeyIndex] = newValue; - - this.reusableVertexTypeNameChangeIndexes.add(index); - } - - entity.property_indexes.forEach(({ fields }) => { - const mutatePropertyIndexIndex = fields.findIndex( - (fieldName) => fieldName === originalValue - ); - - if (mutatePropertyIndexIndex !== -1) { - fields[mutatePropertyIndex] = newValue; - this.reusableVertexTypeNameChangeIndexes.add(index); - } - }); - } - ); - - editedCheckedReusableData!.propertyindex_conflicts.forEach( - ({ entity }, index) => { - const mutateIndex = entity.fields.findIndex( - (fieldName) => fieldName === originalValue - ); - - if (mutateIndex !== -1) { - entity.fields[mutateIndex] = newValue; - this.reusablePropertyIndexNameChangeIndexes.add(index); - } - } - ); - } - - if (category === 'property_index') { - editedCheckedReusableData!.edgelabel_conflicts.forEach( - ({ entity }, index) => { - const mutateVertexIndex = entity.property_indexes.findIndex( - ({ name }) => name === originalValue - ); - - if (mutateVertexIndex !== -1) { - entity.property_indexes[mutateVertexIndex].name = newValue; - this.reusableVertexTypeNameChangeIndexes.add(index); - } - } - ); - - editedCheckedReusableData!.vertexlabel_conflicts.forEach( - ({ entity }, index) => { - const mutateVertexIndex = entity.property_indexes.findIndex( - ({ name }) => name === originalValue - ); - - if (mutateVertexIndex !== -1) { - entity.property_indexes[mutateVertexIndex].name = newValue; - this.reusableVertexTypeNameChangeIndexes.add(index); - } - } - ); - } - - this.editedCheckedReusableData = editedCheckedReusableData; - this.checkedReusableData = cloneDeep(editedCheckedReusableData); - } - - @action - deleteReuseData( - category: - | 'edgelabel_conflicts' - | 'vertexlabel_conflicts' - | 'propertykey_conflicts' - | 'propertyindex_conflicts', - index: number - ) { - if (this.editedCheckedReusableData !== null) { - const editedCheckedReusableData = cloneDeep( - this.editedCheckedReusableData - ); - - if (category === 'edgelabel_conflicts') { - const deletedEdgeType = - editedCheckedReusableData.edgelabel_conflicts[index]; - const deletedPropertyNames: string[] = []; - const deletedPropertyIndexNames: string[] = []; - const deletedSourceVertexNames = deletedEdgeType.entity.source_label; - const deletedTargetVertexNames = deletedEdgeType.entity.target_label; - - deletedEdgeType.entity.properties.forEach(({ name }) => { - deletedPropertyNames.push(name); - }); - - deletedEdgeType.entity.property_indexes.forEach(({ name }) => { - deletedPropertyIndexNames.push(name); - }); - - editedCheckedReusableData.edgelabel_conflicts.splice(index, 1); - - // if there's no edge labels, return since it will move back to the previous step - if (editedCheckedReusableData.edgelabel_conflicts.length === 0) { - return; - } - - // remove source vertex - if ( - isUndefined( - editedCheckedReusableData.edgelabel_conflicts.find( - ({ entity }) => - entity.source_label === deletedSourceVertexNames || - entity.target_label === deletedSourceVertexNames - ) - ) - ) { - remove( - editedCheckedReusableData.vertexlabel_conflicts, - ({ entity }) => entity.name === deletedSourceVertexNames - ); - } - - // remove target vertex - if ( - isUndefined( - editedCheckedReusableData.edgelabel_conflicts.find( - ({ entity }) => - entity.source_label === deletedTargetVertexNames || - entity.target_label === deletedTargetVertexNames - ) - ) - ) { - remove( - editedCheckedReusableData.vertexlabel_conflicts, - ({ entity }) => entity.name === deletedTargetVertexNames - ); - } - - deletedPropertyIndexNames.forEach((propertyIndexName) => { - editedCheckedReusableData.vertexlabel_conflicts.forEach( - ({ entity }) => { - remove( - entity.property_indexes, - ({ name }) => name === propertyIndexName - ); - } - ); - - editedCheckedReusableData.edgelabel_conflicts.forEach( - ({ entity }) => { - remove( - entity.property_indexes, - ({ name }) => name === propertyIndexName - ); - } - ); - - remove( - editedCheckedReusableData.propertyindex_conflicts, - ({ entity }) => entity.name === propertyIndexName - ); - }); - - deletedPropertyNames - .filter( - (propertyName) => - !isUndefined( - editedCheckedReusableData.vertexlabel_conflicts.find( - ({ entity }) => - isUndefined( - entity.properties.find( - ({ name }) => name === propertyName - ) - ) - ) - ) && - !isUndefined( - editedCheckedReusableData.edgelabel_conflicts.find( - ({ entity }) => - isUndefined( - entity.properties.find( - ({ name }) => name === propertyName - ) - ) - ) - ) - ) - .forEach((propertyName) => { - remove( - editedCheckedReusableData.propertykey_conflicts, - ({ entity }) => entity.name === propertyName - ); - }); - } - - if (category === 'propertykey_conflicts') { - const deletedName = - editedCheckedReusableData.propertykey_conflicts[index].entity.name; - // remove property in properties - editedCheckedReusableData.propertykey_conflicts.splice(index, 1); - - // remove property in property index - editedCheckedReusableData.propertyindex_conflicts.forEach( - ({ entity }) => { - remove(entity.fields, (name) => name === deletedName); - } - ); - - remove( - editedCheckedReusableData.propertyindex_conflicts, - ({ entity }) => entity.fields.length === 0 - ); - - // remove property in vertex labels - editedCheckedReusableData.vertexlabel_conflicts.forEach( - ({ entity }, vertexlabelIndex) => { - const cb = (param: { name: string } | string) => { - const name = typeof param === 'string' ? param : param.name; - - if (name === deletedName) { - this.reusableVertexTypeNameChangeIndexes.add(vertexlabelIndex); - return true; - } - - return false; - }; - - remove(entity.properties, cb); - remove(entity.primary_keys, cb); - - entity.property_indexes.forEach(({ fields }) => { - remove(fields, cb); - }); - } - ); - - // remove property in edge labels - editedCheckedReusableData.edgelabel_conflicts.forEach( - ({ entity }, edgelabelIndex) => { - const cb = (param: { name: string } | string) => { - const name = typeof param === 'string' ? param : param.name; - - if (name === deletedName) { - this.reusableEdgeTypeNameChangeIndexes.add(edgelabelIndex); - return true; - } - - return false; - }; - - remove(entity.properties, cb); - remove(entity.sort_keys, cb); - - entity.property_indexes.forEach(({ fields }) => { - remove(fields, cb); - }); - } - ); - } - - if (category === 'propertyindex_conflicts') { - const { - name: deletedPropertyIndexName - } = editedCheckedReusableData.propertyindex_conflicts[index].entity; - - editedCheckedReusableData.propertyindex_conflicts.splice(index, 1); - - // delete property index in vertex label - editedCheckedReusableData.vertexlabel_conflicts.forEach( - ({ entity }, index) => { - const deletedIndex = entity.property_indexes.findIndex( - ({ name }) => name === deletedPropertyIndexName - ); - - if (deletedIndex !== -1) { - this.reusableVertexTypeNameChangeIndexes.add(index); - entity.property_indexes.splice(deletedIndex, 1); - } - } - ); - - editedCheckedReusableData.edgelabel_conflicts.forEach(({ entity }) => { - const deletedIndex = entity.property_indexes.findIndex( - ({ name }) => name === deletedPropertyIndexName - ); - - if (deletedIndex !== -1) { - this.reusableEdgeTypeNameChangeIndexes.add(index); - entity.property_indexes.splice(deletedIndex, 1); - } - }); - } - - this.mutateEditedReusableData(editedCheckedReusableData); - } - } - - @action - resetValidateNewEdgeTypeMessage( - category?: EdgeTypeValidateFields, - propertIndexIndex?: number, - propertIndexProperty?: keyof EdgeTypeValidatePropertyIndexes - ) { - if (isUndefined(category)) { - this.validateNewEdgeTypeErrorMessage = { - name: '', - sourceLabel: '', - targetLabel: '', - properties: '', - sortKeys: '', - propertyIndexes: [], - displayFeilds: [] - }; - - return; - } - - if (category === 'propertyIndexes') { - (this.validateNewEdgeTypeErrorMessage - .propertyIndexes as EdgeTypeValidatePropertyIndexes[])[ - propertIndexIndex as number - ][propertIndexProperty as keyof EdgeTypeValidatePropertyIndexes] = ''; - - return; - } - - this.validateNewEdgeTypeErrorMessage[category] = ''; - } - - @action - resetValidateReuseErrorMessage( - category?: 'edgeType' | 'vertexType' | 'property' | 'property_index' - ) { - if (isUndefined(category)) { - this.validateReuseErrorMessage = { - edgeType: '', - property: '', - property_index: '', - vertexType: '' - }; - - return; - } - - this.validateReuseErrorMessage[category] = ''; - } - - @action - dispose() { - this.currentTabStatus = 'list'; - this.requestStatus = { - fetchEdgeTypeList: 'pending', - addEdgeType: 'pending', - updateEdgeType: 'pending', - deleteEdgeType: 'pending', - checkConflict: 'pending', - recheckConflict: 'pending', - reuseEdgeType: 'pending' - }; - this.errorMessage = ''; - - this.isCreatedReady = false; - this.isAddNewPropertyIndexReady = true; - this.isEditReady = true; - - this.edgeTypeListPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - this.resetNewEdgeType(); - this.edgeTypes = []; - this.selectedEdgeType = null; - this.selectedEdgeTypeNames = []; - this.editedSelectedEdgeType = { - append_properties: [], - append_property_indexes: [], - remove_property_indexes: [], - style: { - color: null, - icon: null, - with_arrow: null, - thickness: 'NORMAL', - display_fields: [] - } - }; - this.resetValidateNewEdgeTypeMessage(); - this.resetReusableEdgeTypes(); - this.validateReuseErrorMessage = { - edgeType: '', - vertexType: '', - property: '', - property_index: '' - }; - } - - fetchEdgeTypeList = flow(function* fetchEdgeTypeList( - this: EdgeTypeStore, - options?: { fetchAll?: boolean; reuseId?: number } - ) { - this.requestStatus.fetchEdgeTypeList = 'pending'; - - const conn_id = - options && typeof options.reuseId === 'number' - ? options.reuseId - : this.metadataConfigsRootStore.currentId; - - try { - const result: AxiosResponse> = yield axios - .get(`${baseUrl}/${conn_id}/schema/edgelabels`, { - params: { - page_no: this.edgeTypeListPageConfig.pageNumber, - page_size: !options ? 10 : -1, - name_order: - this.edgeTypeListPageConfig.sort !== '' - ? this.edgeTypeListPageConfig.sort - : null - } - }) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - if (result.data.status === 401) { - this.validateLicenseOrMemories = false; - } - - throw new Error(result.data.message); - } - - if (options && typeof options.reuseId === 'number') { - this.reusableEdgeTypes = result.data.data.records; - } else { - this.edgeTypes = result.data.data.records; - this.edgeTypeListPageConfig.pageTotal = result.data.data.total; - } - - if (this.currentTabStatus !== 'reuse') { - result.data.data.records.length === 0 - ? (this.currentTabStatus = 'empty') - : (this.currentTabStatus = 'list'); - } - - this.requestStatus.fetchEdgeTypeList = 'success'; - } catch (error) { - this.requestStatus.fetchEdgeTypeList = 'failed'; - this.errorMessage = error.message; - } - }); - - addEdgeType = flow(function* addEdgeType(this: EdgeTypeStore) { - this.requestStatus.addEdgeType = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels`, - { - name: this.newEdgeType.name, - source_label: this.newEdgeType.source_label, - target_label: this.newEdgeType.target_label, - link_multi_times: this.newEdgeType.link_multi_times, - properties: this.newEdgeType.properties, - sort_keys: this.newEdgeType.sort_keys, - property_indexes: this.newEdgeType.property_indexes, - open_label_index: this.newEdgeType.open_label_index, - style: this.newEdgeType.style - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.addEdgeType = 'success'; - } catch (error) { - this.requestStatus.addEdgeType = 'failed'; - this.errorMessage = error.message; - } - }); - - updateEdgeType = flow(function* updateEdgeType(this: EdgeTypeStore) { - this.requestStatus.updateEdgeType = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .put( - `${baseUrl}/${ - this.metadataConfigsRootStore.currentId - }/schema/edgelabels/${this.selectedEdgeType!.name}`, - { - append_properties: this.editedSelectedEdgeType.append_properties, - append_property_indexes: this.editedSelectedEdgeType - .append_property_indexes, - remove_property_indexes: this.editedSelectedEdgeType - .remove_property_indexes, - style: this.editedSelectedEdgeType.style - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.updateEdgeType = 'success'; - } catch (error) { - this.requestStatus.updateEdgeType = 'failed'; - this.errorMessage = error.message; - } - }); - - deleteEdgeType = flow(function* deleteEdgeType( - this: EdgeTypeStore, - selectedEdgeTypeNames: string[] - ) { - this.requestStatus.deleteEdgeType = 'pending'; - - const combinedParams = selectedEdgeTypeNames - .map((name) => 'names=' + name) - .join('&'); - - try { - const result: AxiosResponse> = yield axios - .delete( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels?` + - combinedParams + - `&skip_using=${String( - Array.isArray(selectedEdgeTypeNames) && - selectedEdgeTypeNames.length !== 1 - )}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - if ( - selectedEdgeTypeNames.length === this.edgeTypes.length && - this.edgeTypeListPageConfig.pageNumber === - Math.ceil(this.edgeTypeListPageConfig.pageTotal / 10) && - this.edgeTypeListPageConfig.pageNumber > 1 - ) { - this.edgeTypeListPageConfig.pageNumber = - this.edgeTypeListPageConfig.pageNumber - 1; - } - - this.requestStatus.deleteEdgeType = 'success'; - } catch (error) { - this.requestStatus.deleteEdgeType = 'failed'; - this.errorMessage = error.message; - } - }); - - checkConflict = flow(function* checkConflict( - this: EdgeTypeStore, - reuseId: string, - selectedEdgeTypes: string[] - ) { - this.requestStatus.checkConflict = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels/check_conflict`, - { - edgelabels: selectedEdgeTypes.map((selectedEdgeType) => - this.reusableEdgeTypes.find( - ({ name }) => name === selectedEdgeType - ) - ) - }, - { - params: { - reused_conn_id: this.metadataConfigsRootStore.graphManagementStore.idList.find( - ({ name }) => name === reuseId - )!.id - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.checkedReusableData = result.data.data; - this.editedCheckedReusableData = cloneDeep(result.data.data); - this.requestStatus.checkConflict = 'success'; - } catch (error) { - this.requestStatus.checkConflict = 'failed'; - this.errorMessage = error.message; - } - }); - - recheckConflict = flow(function* recheckConflict(this: EdgeTypeStore) { - this.requestStatus.recheckConflict = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels/recheck_conflict`, - { - propertykeys: this.editedCheckedReusableData!.propertykey_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ), - propertyindexes: this.editedCheckedReusableData!.propertyindex_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ), - vertexlabels: this.editedCheckedReusableData!.vertexlabel_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ), - edgelabels: this.editedCheckedReusableData!.edgelabel_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ) - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.checkedReusableData = result.data.data; - this.editedCheckedReusableData = cloneDeep(result.data.data); - this.requestStatus.recheckConflict = 'success'; - } catch (error) { - this.requestStatus.recheckConflict = 'failed'; - this.errorMessage = error.message; - } - }); - - reuseEdgeType = flow(function* reuseEdgeType(this: EdgeTypeStore) { - this.requestStatus.reuseEdgeType = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels/reuse`, - this.editedCheckedReusableData - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.reuseEdgeType = 'success'; - } catch (error) { - this.requestStatus.reuseEdgeType = 'failed'; - this.errorMessage = error.message; - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts deleted file mode 100644 index ee99ed87b..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios from 'axios'; -import { isUndefined, cloneDeep, clone } from 'lodash-es'; - -import vis from 'vis-network'; -import { MetadataConfigsRootStore } from './metadataConfigsStore'; -import { - checkIfLocalNetworkOffline, - vertexRadiusMapping, - edgeWidthMapping -} from '../../utils'; - -import { baseUrl } from '../../types/common'; -import type { - GraphViewData, - DrawerTypes -} from '../../types/GraphManagementStore/metadataConfigsStore'; -import i18next from '../../../i18n'; - -export class GraphViewStore { - metadataConfigsRootStore: MetadataConfigsRootStore; - - constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { - this.metadataConfigsRootStore = MetadataConfigsRootStore; - } - - @observable.ref colorMappings: Record = {}; - @observable.ref vertexSizeMappings: Record = {}; - @observable.ref vertexWritingMappings: Record = {}; - @observable.ref edgeColorMappings: Record = {}; - @observable.ref edgeWithArrowMappings: Record = {}; - @observable.ref edgeThicknessMappings: Record = {}; - @observable.ref edgeWritingMappings: Record = {}; - - @observable currentDrawer: DrawerTypes = ''; - @observable currentSelected = ''; - @observable isNodeOrEdgeClicked = false; - - // avoid to re-assign value to originalGraphViewData from re-rendering - // have to set a flag to inform data is empty - @observable isGraphVertexEmpty = true; - - @observable visNetwork: vis.Network | null = null; - @observable visDataSet: Record<'nodes' | 'edges', any> | null = null; - @observable.ref graphViewData: GraphViewData | null = null; - @observable.ref originalGraphViewData: GraphViewData | null = null; - - @observable.shallow requestStatus = { - fetchGraphViewData: 'standby' - }; - - @observable errorInfo = { - fetchGraphViewData: { - code: NaN, - message: '' - } - }; - - @computed get graphNodes() { - if (this.originalGraphViewData === null) { - return []; - } - - return this.originalGraphViewData.vertices.map( - ({ id, label, properties, primary_keys }) => { - return { - id, - label: id.length <= 15 ? id : id.slice(0, 15) + '...', - vLabel: id, - value: vertexRadiusMapping[this.vertexSizeMappings[label]], - font: { size: 16 }, - properties, - title: ` - - - ${Object.entries(properties) - .map(([key, value]) => { - const convertedValue = - value.toLowerCase() === 'text' - ? 'string' - : value.toLowerCase(); - - const primaryKeyIndex = primary_keys.findIndex( - (primaryKey) => primaryKey === key - ); - - return ``; - }) - .join('')} - `, - color: { - background: this.colorMappings[label] || '#5c73e6', - border: this.colorMappings[label] || '#5c73e6', - highlight: { background: '#fb6a02', border: '#fb6a02' }, - hover: { background: '#ec3112', border: '#ec3112' } - }, - // reveal label when zoom to max - scaling: { - label: { - max: Infinity, - maxVisible: Infinity - } - }, - chosen: { - node( - values: any, - id: string, - selected: boolean, - hovering: boolean - ) { - if (hovering || selected) { - values.shadow = true; - values.shadowColor = 'rgba(0, 0, 0, 0.6)'; - values.shadowX = 0; - values.shadowY = 0; - values.shadowSize = 25; - } - - if (selected) { - values.size += 5; - } - } - } - }; - } - ); - } - - @computed get graphEdges() { - if (this.originalGraphViewData === null) { - return []; - } - - return this.originalGraphViewData.edges.map( - ({ id, label, source, target, properties, sort_keys }) => { - return { - id, - label: label.length < 15 ? label : label.slice(0, 15) + '...', - properties, - source, - target, - from: source, - to: target, - font: { size: 16, strokeWidth: 0, color: '#666' }, - arrows: this.edgeWithArrowMappings[label] === true ? 'to' : '', - value: edgeWidthMapping[this.edgeThicknessMappings[label]], - title: ` - - - ${Object.entries(properties) - .map(([key, value]) => { - const convertedValue = - value.toLowerCase() === 'text' - ? 'string' - : value.toLowerCase(); - - const sortKeyIndex = sort_keys.findIndex( - (sortKey) => sortKey === key - ); - - return ``; - }) - .join('')} - `, - color: this.edgeColorMappings[label] || '#5c73e6' - }; - } - ); - } - - @action - setCurrentDrawer(drawer: DrawerTypes) { - this.currentDrawer = drawer; - } - - @action - switchNodeOrEdgeClicked(flag: boolean) { - this.isNodeOrEdgeClicked = flag; - } - - @action - switchGraphDataEmpty(flag: boolean) { - this.isGraphVertexEmpty = flag; - } - - @action - setVisNetwork(visNetwork: vis.Network) { - this.visNetwork = visNetwork; - } - - @action - setVisDataSet(visDataSet: Record<'nodes' | 'edges', any>) { - this.visDataSet = visDataSet; - } - - @action - dispose() { - this.edgeColorMappings = {}; - this.currentDrawer = ''; - this.currentSelected = ''; - this.colorMappings = {}; - this.edgeColorMappings = {}; - this.graphViewData = null; - this.isNodeOrEdgeClicked = false; - this.isGraphVertexEmpty = true; - this.visNetwork = null; - this.visDataSet = null; - this.graphViewData = null; - this.originalGraphViewData = null; - this.requestStatus = { - fetchGraphViewData: 'standby' - }; - this.errorInfo = { - fetchGraphViewData: { - code: NaN, - message: '' - } - }; - } - - fetchGraphViewData = flow(function* fetchGraphViewData( - this: GraphViewStore, - colorMappings?: Record, - vertexSizeMappings?: Record, - vertexWritingMappings?: Record, - edgeColorMappings?: Record, - edgeThicknessMappings?: Record, - edgeWithArrowMappings?: Record, - edgeWritingMappings?: Record - ) { - this.requestStatus.fetchGraphViewData = 'pending'; - - if (!isUndefined(colorMappings)) { - this.colorMappings = colorMappings; - } - if (!isUndefined(vertexSizeMappings)) { - this.vertexSizeMappings = vertexSizeMappings; - } - if (!isUndefined(vertexWritingMappings)) { - this.vertexWritingMappings = vertexWritingMappings; - } - if (!isUndefined(edgeColorMappings)) { - this.edgeColorMappings = edgeColorMappings; - } - if (!isUndefined(edgeThicknessMappings)) { - this.edgeThicknessMappings = edgeThicknessMappings; - } - if (!isUndefined(edgeWithArrowMappings)) { - this.edgeWithArrowMappings = edgeWithArrowMappings; - } - if (!isUndefined(edgeWritingMappings)) { - this.edgeWritingMappings = edgeWritingMappings; - } - - try { - const result = yield axios - .get( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/graphview` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - this.errorInfo.fetchGraphViewData.code = result.data.status; - throw new Error(result.data.message); - } - - const data = result.data.data; - - if (data.vertices.length !== 0) { - this.switchGraphDataEmpty(false); - } - - this.originalGraphViewData = data; - this.graphViewData = data; - - this.requestStatus.fetchGraphViewData = 'success'; - } catch (error) { - this.requestStatus.fetchGraphViewData = 'failed'; - this.errorInfo.fetchGraphViewData.message = error.message; - console.error(error.message); - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts deleted file mode 100644 index bc204b6d3..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action } from 'mobx'; - -import { MetadataPropertyStore } from './metadataPropertyStore'; -import { VertexTypeStore } from './vertexTypeStore'; -import { EdgeTypeStore } from './edgeTypeStore'; -import { MetadataPropertyIndexStore } from './metadataPropertyIndexStore'; -import { GraphViewStore } from './graphViewStore'; - -import { - GraphManagementStore, - GraphManagementStoreInstance -} from '../graphManagementStore'; - -export class MetadataConfigsRootStore { - graphManagementStore: GraphManagementStore; - metadataPropertyStore: MetadataPropertyStore; - vertexTypeStore: VertexTypeStore; - edgeTypeStore: EdgeTypeStore; - metadataPropertyIndexStore: MetadataPropertyIndexStore; - graphViewStore: GraphViewStore; - - @observable currentId: number | null = null; - - constructor(GraphManagementStore: GraphManagementStore) { - this.graphManagementStore = GraphManagementStore; - - this.metadataPropertyStore = new MetadataPropertyStore(this); - this.vertexTypeStore = new VertexTypeStore(this); - this.edgeTypeStore = new EdgeTypeStore(this); - this.metadataPropertyIndexStore = new MetadataPropertyIndexStore(this); - this.graphViewStore = new GraphViewStore(this); - } - - @action - setCurrentId(id: number | null) { - this.currentId = id; - } - - @action - dispose() { - this.currentId = null; - } -} - -export default createContext( - new MetadataConfigsRootStore(GraphManagementStoreInstance) -); diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts deleted file mode 100644 index eff06eb70..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; - -import { MetadataConfigsRootStore } from './metadataConfigsStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -import { baseUrl, responseData } from '../../types/common'; -import { - MetadataPropertyIndex, - MetadataPropertyIndexResponse, - PageConfig -} from '../../types/GraphManagementStore/metadataConfigsStore'; - -export class MetadataPropertyIndexStore { - metadataConfigsRootStore: MetadataConfigsRootStore; - - constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { - this.metadataConfigsRootStore = MetadataConfigsRootStore; - } - - @observable validateLicenseOrMemories = true; - @observable searchWords = ''; - @observable.shallow isSearched = { - status: false, - value: '' - }; - - @observable.shallow requestStatus = { - fetchMetadataPropertIndexes: 'pending' - }; - - @observable metadataPropertyIndexPageConfig: PageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - @observable errorMessage = ''; - - @observable.ref metadataPropertyIndexes: MetadataPropertyIndex[] = [ - { - owner: 'person', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'person', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age'] - }, - { - owner: 'person', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['city'] - }, - { - owner: 'company', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'company', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'company', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'city', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'city', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'city', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - }, - { - owner: 'name', - owner_type: 'VERTEX_LABEL', - name: 'personByBorn', - type: 'RANGE', - fields: ['age', 'city'] - } - ]; - - @computed get collpaseInfo(): null | number[][] { - const collpaseNumbers: number[] = []; - - this.metadataPropertyIndexes.forEach( - ({ owner }: MetadataPropertyIndex, index: number) => { - // first owner has default rowSpanStart = 1 - if (index === 0) { - collpaseNumbers.push(1); - return; - } - - // if owner equals to the previous one, plus the owner rowSpan by 1 - // else push this different owner rowSpanStartIndex in to array - owner === this.metadataPropertyIndexes[index - 1].owner - ? ++collpaseNumbers[collpaseNumbers.length - 1] - : collpaseNumbers.push(1); - } - ); - - if (collpaseNumbers.length === this.metadataPropertyIndexes.length) { - return null; - } - - const collpaseStartIndexes: number[] = [0]; - - collpaseNumbers - .slice(0, collpaseNumbers.length - 1) - .reduce((prev, curr) => { - collpaseStartIndexes.push(prev + curr); - return prev + curr; - }, 0); - - return [collpaseStartIndexes, collpaseNumbers]; - } - - @action - mutateSearchWords(text: string) { - this.searchWords = text; - } - - @action - mutatePageNumber(pageNumber: number) { - this.metadataPropertyIndexPageConfig.pageNumber = pageNumber; - } - - @action - switchIsSearchedStatus(isSearched: boolean) { - this.isSearched.status = isSearched; - - isSearched - ? (this.isSearched.value = this.searchWords) - : (this.isSearched.value = ''); - } - - @action - dispose() { - this.searchWords = ''; - this.isSearched = { - status: false, - value: '' - }; - this.requestStatus = { - fetchMetadataPropertIndexes: 'pending' - }; - this.metadataPropertyIndexPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - this.errorMessage = ''; - this.metadataPropertyIndexes = []; - } - - fetchMetadataPropertIndexes = flow(function* fetchMetadataPropertIndexes( - this: MetadataPropertyIndexStore, - indexType: 'vertex' | 'edge' - ) { - this.requestStatus.fetchMetadataPropertIndexes = 'pending'; - - try { - const result: AxiosResponse< - responseData - > = yield axios - .get( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertyindexes`, - { - params: { - page_no: this.metadataPropertyIndexPageConfig.pageNumber, - page_size: 10, - is_vertex_label: indexType === 'vertex', - content: - this.isSearched.status && this.searchWords !== '' - ? this.searchWords - : null - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - if (result.data.status === 401) { - this.validateLicenseOrMemories = false; - } - - throw new Error(result.data.message); - } - - this.metadataPropertyIndexes = result.data.data.records; - this.metadataPropertyIndexPageConfig.pageTotal = result.data.data.total; - this.requestStatus.fetchMetadataPropertIndexes = 'success'; - } catch (error) { - this.requestStatus.fetchMetadataPropertIndexes = 'failed'; - this.errorMessage = error.message; - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts deleted file mode 100644 index 669c1ab28..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts +++ /dev/null @@ -1,590 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { cloneDeep } from 'lodash-es'; -import { v4 } from 'uuid'; - -import { MetadataConfigsRootStore } from './metadataConfigsStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -import { baseUrl, responseData } from '../../types/common'; -import { - MetadataProperty, - MetadataPropertyListResponse, - PageConfig, - CheckedReusableData, - NewMetadataProperty -} from '../../types/GraphManagementStore/metadataConfigsStore'; -import i18next from '../../../i18n'; - -export class MetadataPropertyStore { - metadataConfigsRootStore: MetadataConfigsRootStore; - - constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { - this.metadataConfigsRootStore = MetadataConfigsRootStore; - } - - @observable validateLicenseOrMemories = true; - @observable currentTabStatus = 'list'; - - @observable.shallow requestStatus = { - fetchMetadataPropertyList: 'standby', - checkIfUsing: 'standby', - addMetadataProperty: 'standby', - deleteMetadataProperty: 'standby', - checkConflict: 'standby', - recheckConflict: 'standby', - reuseMetadataProperties: 'standy' - }; - - @observable errorMessage = ''; - - @observable searchWords = ''; - - @observable isSearched = { - status: false, - value: '' - }; - - @observable metadataPropertyPageConfig: PageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - @observable isCreateNewProperty = false; - // should user able to create new vertex type - @observable isCreatedReady = false; - - @observable newMetadataProperty: NewMetadataProperty = { - name: v4(), - // real input name, to handle
key problems - _name: '', - data_type: 'string', - cardinality: 'single' - }; - - @observable.ref metadataProperties: MetadataProperty[] = []; - - @observable metadataPropertyUsingStatus: Record | null = - null; - - @observable selectedMetadataProperty: MetadataProperty | null = null; - // table selection from user - @observable.ref selectedMetadataPropertyNames: string[] = []; - - // reuse - @observable reuseableProperties: MetadataProperty[] = []; - @observable - checkedReusableProperties: CheckedReusableData | null = null; - @observable - editedCheckedReusableProperties: CheckedReusableData | null = null; - @observable reusablePropertyNameChangeIndexes: Set = - new Set(); - - @observable validateNewPropertyErrorMessage = { - name: '' - }; - - @observable validateRenameReusePropertyErrorMessage = { - name: '' - }; - - @computed get reunionMetadataProperty() { - return this.metadataProperties.length < 10 - ? [this.newMetadataProperty].concat(this.metadataProperties) - : [this.newMetadataProperty].concat(this.metadataProperties.slice(0, 9)); - } - - @computed get reuseablePropertyDataMap() { - const dataMap: Record> = {}; - - this.reuseableProperties.forEach(({ name }) => { - dataMap[name] = { - key: name, - title: name - }; - }); - - return dataMap; - } - - @computed get isReadyToReuse() { - return ( - this.editedCheckedReusableProperties && - this.editedCheckedReusableProperties!.propertykey_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - // no data standingby validation - this.reusablePropertyNameChangeIndexes.size === 0 - ); - } - - @action - changeCurrentTabStatus(status: string) { - this.currentTabStatus = status; - } - - @action - mutateSearchWords(text: string) { - this.searchWords = text; - } - - @action - mutatePageNumber(pageNumber: number) { - this.metadataPropertyPageConfig.pageNumber = pageNumber; - } - - @action - mutatePageSort(sort: 'desc' | 'asc') { - this.metadataPropertyPageConfig.sort = sort; - } - - @action - switchIsSearchedStatus(isSearched: boolean) { - this.isSearched.status = isSearched; - - isSearched - ? (this.isSearched.value = this.searchWords) - : (this.isSearched.value = ''); - } - - @action - switchIsCreateNewProperty(flag: boolean) { - this.isCreateNewProperty = flag; - } - - @action - resetNewProperties() { - this.mutateNewProperty({ - name: v4(), - _name: '', - data_type: 'string', - cardinality: 'single' - }); - - this.isCreatedReady = false; - } - - @action - selectProperty(index: number | null) { - if (index === null) { - this.selectedMetadataProperty = null; - return; - } - - this.selectedMetadataProperty = cloneDeep(this.metadataProperties[index]); - } - - @action - mutateNewProperty(newMetadataProperty: NewMetadataProperty) { - this.newMetadataProperty = newMetadataProperty; - } - - @action - mutateSelectedPropertyName(name: string) { - this.selectedMetadataProperty!.name = name; - } - - @action - mutateSelectedMetadataProperyNames(names: string[]) { - this.selectedMetadataPropertyNames = names; - } - - @action - mutateEditedReusableProperties( - newEditedReusableProperties: CheckedReusableData - ) { - this.editedCheckedReusableProperties = newEditedReusableProperties; - } - - @action - mutateReusablePropertyNameChangeIndexes(index: number) { - this.reusablePropertyNameChangeIndexes.add(index); - } - - @action - clearReusablePropertyNameChangeIndexes() { - this.reusablePropertyNameChangeIndexes.clear(); - } - - @action - resetReusablePropeties() { - this.reuseableProperties = []; - } - - @action - validateNewProperty() { - let isReady = true; - - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(this.newMetadataProperty._name!)) { - if (this.newMetadataProperty._name!.length === 0) { - this.validateNewPropertyErrorMessage.name = i18next.t( - 'addition.store.item-is-required' - ); - isReady = false; - } else { - this.validateNewPropertyErrorMessage.name = i18next.t( - 'addition.store.rule4' - ); - isReady = false; - } - } else { - this.validateNewPropertyErrorMessage.name = ''; - } - - this.isCreatedReady = isReady; - return isReady; - } - - @action - validateRenameReuseProperty(index: number) { - let isReady = true; - const propertyName = - this.editedCheckedReusableProperties!.propertykey_conflicts[index].entity - .name; - - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(propertyName)) { - if (propertyName.length === 0) { - this.validateRenameReusePropertyErrorMessage.name = i18next.t( - 'addition.store.item-is-required' - ); - isReady = false; - } else { - this.validateRenameReusePropertyErrorMessage.name = i18next.t( - 'addition.store.rule4' - ); - isReady = false; - } - } else { - this.validateRenameReusePropertyErrorMessage.name = ''; - } - - return isReady; - } - - @action - resetValidateNewProperty() { - this.validateNewPropertyErrorMessage.name = ''; - } - - @action - resetValidateRenameReuseProperty() { - this.validateRenameReusePropertyErrorMessage.name = ''; - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusablePropertyName(index: number) { - this.editedCheckedReusableProperties!.propertykey_conflicts[ - index - ].entity.name = - this.checkedReusableProperties!.propertykey_conflicts[index].entity.name; - } - - @action - dispose() { - this.currentTabStatus = 'list'; - this.requestStatus = { - fetchMetadataPropertyList: 'standby', - checkIfUsing: 'standby', - addMetadataProperty: 'standby', - deleteMetadataProperty: 'standby', - checkConflict: 'standby', - recheckConflict: 'standby', - reuseMetadataProperties: 'standy' - }; - this.errorMessage = ''; - this.searchWords = ''; - this.isSearched = { - status: false, - value: '' - }; - this.metadataPropertyPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - this.isCreateNewProperty = false; - this.isCreatedReady = false; - this.resetNewProperties(); - this.metadataProperties = []; - this.metadataPropertyUsingStatus = null; - this.selectedMetadataProperty = null; - this.selectedMetadataPropertyNames = []; - - this.resetValidateNewProperty(); - this.resetValidateRenameReuseProperty(); - - // reuse - this.reuseableProperties = []; - this.checkedReusableProperties = null; - this.editedCheckedReusableProperties = null; - } - - fetchMetadataPropertyList = flow(function* fetchMetadataPropertyList( - this: MetadataPropertyStore, - options?: { fetchAll?: boolean; reuseId?: number } - ) { - this.requestStatus.fetchMetadataPropertyList = 'pending'; - const conn_id = - options && typeof options.reuseId === 'number' - ? options.reuseId - : this.metadataConfigsRootStore.currentId; - - try { - const result: AxiosResponse> = - yield axios - .get(`${baseUrl}/${conn_id}/schema/propertykeys`, { - params: { - page_no: this.metadataPropertyPageConfig.pageNumber, - page_size: !options ? 10 : -1, - name_order: - this.metadataPropertyPageConfig.sort !== '' - ? this.metadataPropertyPageConfig.sort - : null, - content: - this.isSearched.status && this.searchWords !== '' - ? this.searchWords - : null - } - }) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - if (result.data.status === 401) { - this.validateLicenseOrMemories = false; - } - - throw new Error(result.data.message); - } - - if (options && typeof options.reuseId === 'number') { - this.reuseableProperties = result.data.data.records; - } else { - this.metadataProperties = result.data.data.records; - this.metadataPropertyPageConfig.pageTotal = result.data.data.total; - } - - if (result.data.data.records.length === 0) { - if (this.isSearched.status === true) { - this.currentTabStatus = 'list'; - } else { - this.currentTabStatus = 'empty'; - } - } else if (this.currentTabStatus !== 'reuse') { - // if currentTabStatus is reuse, stay at reuse page - this.currentTabStatus = 'list'; - } - - this.requestStatus.fetchMetadataPropertyList = 'success'; - } catch (error) { - this.requestStatus.fetchMetadataPropertyList = 'failed'; - this.errorMessage = error.message; - } - }); - - checkIfUsing = flow(function* checkIfUsing( - this: MetadataPropertyStore, - selectedPropertyNames: string[] - ) { - this.requestStatus.checkIfUsing = 'pending'; - - try { - const result: AxiosResponse>> = - yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/check_using`, - { - names: selectedPropertyNames - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.metadataPropertyUsingStatus = result.data.data; - this.requestStatus.checkIfUsing = 'success'; - } catch (error) { - this.requestStatus.checkIfUsing = 'failed'; - this.errorMessage = error.message; - } - }); - - addMetadataProperty = flow(function* addMetadataProperty( - this: MetadataPropertyStore - ) { - this.requestStatus.addMetadataProperty = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys`, - { - name: this.newMetadataProperty._name, - data_type: - this.newMetadataProperty.data_type === 'string' - ? 'TEXT' - : this.newMetadataProperty.data_type.toUpperCase(), - cardinality: this.newMetadataProperty.cardinality.toUpperCase() - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.addMetadataProperty = 'success'; - } catch (error) { - this.requestStatus.addMetadataProperty = 'failed'; - this.errorMessage = error.message; - } - }); - - deleteMetadataProperty = flow(function* deleteMetadataProperty( - this: MetadataPropertyStore, - selectedPropertyNames: string[] - ) { - this.requestStatus.deleteMetadataProperty = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .delete( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys?` + - selectedPropertyNames.map((name) => 'names=' + name).join('&') + - `&skip_using=${String(selectedPropertyNames.length !== 1)}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - if ( - selectedPropertyNames.length === this.metadataProperties.length && - this.metadataPropertyPageConfig.pageNumber === - Math.ceil(this.metadataPropertyPageConfig.pageTotal / 10) && - this.metadataPropertyPageConfig.pageNumber > 1 - ) { - this.metadataPropertyPageConfig.pageNumber = - this.metadataPropertyPageConfig.pageNumber - 1; - } - - this.requestStatus.deleteMetadataProperty = 'success'; - } catch (error) { - this.requestStatus.deleteMetadataProperty = 'failed'; - this.errorMessage = error.message; - } - }); - - checkConflict = flow(function* checkConflict( - this: MetadataPropertyStore, - selectedNameList: string[] - ) { - this.requestStatus.checkConflict = 'pending'; - - try { - const result: AxiosResponse> = - yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/check_conflict`, - { - propertykeys: selectedNameList.map((selectedName) => - this.reuseableProperties.find( - ({ name }) => name === selectedName - ) - ) - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.checkedReusableProperties = result.data.data; - this.editedCheckedReusableProperties = cloneDeep(result.data.data); - this.requestStatus.checkConflict = 'success'; - } catch (error) { - this.requestStatus.checkConflict = 'failed'; - this.errorMessage = error.message; - } - }); - - recheckConflict = flow(function* recheckConflict( - this: MetadataPropertyStore - ) { - this.requestStatus.recheckConflict = 'pending'; - - try { - const result: AxiosResponse> = - yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/recheck_conflict`, - { - propertykeys: - this.editedCheckedReusableProperties!.propertykey_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ) - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.checkedReusableProperties = result.data.data; - this.editedCheckedReusableProperties = cloneDeep(result.data.data); - this.requestStatus.recheckConflict = 'success'; - } catch (error) { - this.requestStatus.recheckConflict = 'failed'; - this.errorMessage = error.message; - } - }); - - reuseMetadataProperties = flow(function* reuseMetadataProperties( - this: MetadataPropertyStore - ) { - this.requestStatus.reuseMetadataProperties = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/reuse`, - this.editedCheckedReusableProperties! - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.reuseMetadataProperties = 'success'; - } catch (error) { - this.requestStatus.reuseMetadataProperties = 'failed'; - this.errorMessage = error.message; - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts b/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts deleted file mode 100644 index a91c0ad20..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts +++ /dev/null @@ -1,1266 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { observable, action, flow, computed } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { cloneDeep, isUndefined, remove, size } from 'lodash-es'; - -import { MetadataConfigsRootStore } from './metadataConfigsStore'; -import { checkIfLocalNetworkOffline } from '../../utils'; - -import { baseUrl, responseData } from '../../types/common'; -import { - VertexType, - EditVertexTypeParams, - VertexTypeListResponse, - PageConfig, - CheckedReusableData, - VertexTypeValidateFields, - VertexTypeValidatePropertyIndexes -} from '../../types/GraphManagementStore/metadataConfigsStore'; -import i18next from '../../../i18n'; - -export class VertexTypeStore { - metadataConfigsRootStore: MetadataConfigsRootStore; - - constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { - this.metadataConfigsRootStore = MetadataConfigsRootStore; - } - - @observable validateLicenseOrMemories = true; - @observable currentTabStatus = 'list'; - - @observable.shallow requestStatus = { - fetchVertexTypeList: 'pending', - checkIfUsing: 'pending', - addVertexType: 'pending', - updateVertexType: 'pending', - deleteVertexType: 'pending', - checkConflict: 'pending', - recheckConflict: 'pending', - reuseVertexType: 'pending' - }; - - @observable vertexListPageConfig: PageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - - @observable errorMessage = ''; - - @observable.ref colorSchemas = [ - '#5c73e6', - '#569380', - '#8ecc93', - '#fe9227', - '#fe5b5d', - '#fd6ace', - '#4d8dda', - '#57c7e3', - '#ffe081', - '#c570ff', - '#2b65ff', - '#0eb880', - '#76c100', - '#ed7600', - '#e65055', - '#a64ee6', - '#108cee', - '#00b5d9', - '#f2ca00', - '#e048ae' - ]; - - @observable.ref vertexSizeSchemas = [ - { ch: '超小', en: 'TINY' }, - { ch: '小', en: 'SMALL' }, - { ch: '中', en: 'NORMAL' }, - { ch: '大', en: 'BIG' }, - { ch: '超大', en: 'HUGE' } - ]; - - @observable.shallow newVertexType: VertexType = { - name: '', - id_strategy: 'PRIMARY_KEY', - properties: [], - primary_keys: [], - property_indexes: [], - open_label_index: false, - style: { - color: '#5c73e6', - icon: null, - size: 'NORMAL', - display_fields: ['~id'] - } - }; - - // should user able to create new vertex type - @observable isCreatedReady = false; - // should user able to create new property index - @observable isAddNewPropertyIndexReady = true; - - // only have to check property - @observable isEditReady = true; - - @observable.ref selectedVertexType: VertexType | null = null; - @observable.ref selectedVertexTypeNames: string[] = []; - @observable.ref editedSelectedVertexType: EditVertexTypeParams = { - append_properties: [], - append_property_indexes: [], - remove_property_indexes: [], - style: { - color: '#5c73e6', - icon: null, - size: 'NORMAL', - display_fields: ['~id'] - } - }; - - @observable addedPropertiesInSelectedVertextType: Set = new Set(); - - @observable.ref vertexTypes: VertexType[] = []; - - @observable vertexTypeUsingStatus: Record | null = null; - - // reuse - @observable reusableVertexTypes: VertexType[] = []; - @observable checkedReusableData: CheckedReusableData | null = null; - @observable - editedCheckedReusableData: CheckedReusableData | null = null; - - @observable reusableVertexTypeNameChangeIndexes: Set = new Set< - number - >(); - @observable reusablePropertyNameChangeIndexes: Set = new Set< - number - >(); - @observable reusablePropertyIndexNameChangeIndexes: Set = new Set< - number - >(); - - @observable validateNewVertexTypeErrorMessage: Record< - VertexTypeValidateFields, - string | VertexTypeValidatePropertyIndexes[] - > = { - name: '', - properties: '', - primaryKeys: '', - displayFeilds: '', - propertyIndexes: [] - }; - - @observable.shallow validateEditVertexTypeErrorMessage: Record< - 'propertyIndexes', - VertexTypeValidatePropertyIndexes[] - > = { - propertyIndexes: [] - }; - - @observable validateReuseErrorMessage: Record< - 'vertexType' | 'property' | 'property_index', - string - > = { - vertexType: '', - property: '', - property_index: '' - }; - - @observable validateRenameReuseVertexErrorMessage: Record< - 'vertex' | 'property' | 'property_index', - { name: string } - > = { - vertex: { - name: '' - }, - property: { - name: '' - }, - property_index: { - name: '' - } - }; - - @computed get reusableVertexTypeDataMap() { - const dataMap: Record> = {}; - - this.reusableVertexTypes.forEach(({ name }) => { - dataMap[name] = { - key: name, - title: name - }; - }); - - return dataMap; - } - - @computed get isReadyToReuse() { - return ( - this.editedCheckedReusableData && - this.editedCheckedReusableData!.propertykey_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - this.editedCheckedReusableData!.vertexlabel_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - this.editedCheckedReusableData!.propertyindex_conflicts.every( - ({ status }) => status === 'PASSED' || status === 'EXISTED' - ) && - // no data standingby validation - this.reusableVertexTypeNameChangeIndexes.size === 0 && - this.reusablePropertyNameChangeIndexes.size === 0 && - this.reusablePropertyIndexNameChangeIndexes.size === 0 - ); - } - - @action - changeCurrentTabStatus(status: string) { - this.currentTabStatus = status; - } - - @action - mutateNewProperty(newVertexType: VertexType) { - this.newVertexType = newVertexType; - } - - @action - mutateSelectedVertexTypeNames(names: string[]) { - this.selectedVertexTypeNames = names; - } - - @action - mutatePageNumber(pageNumber: number) { - this.vertexListPageConfig.pageNumber = pageNumber; - } - - @action - mutatePageSort(sort: 'desc' | 'asc') { - this.vertexListPageConfig.sort = sort; - } - - @action - selectVertexType(index: number | null) { - if (index === null) { - this.selectedVertexType = null; - return; - } - - this.selectedVertexType = cloneDeep(this.vertexTypes[index]); - } - - @action - mutateSelectedProperty(selectedProperty: VertexType) { - this.selectedVertexType = selectedProperty; - } - - @action - mutateEditedSelectedVertexType( - editedSelectedVertexType: EditVertexTypeParams - ) { - this.editedSelectedVertexType = editedSelectedVertexType; - } - - @action - resetNewVertextType() { - this.newVertexType = { - name: '', - id_strategy: 'PRIMARY_KEY', - properties: [], - primary_keys: [], - property_indexes: [], - open_label_index: false, - style: { - color: '#5c73e6', - icon: null, - size: 'NORMAL', - display_fields: ['~id'] - } - }; - - this.isCreatedReady = false; - } - - @action - resetAddedPropertiesInSelectedVertextType() { - this.addedPropertiesInSelectedVertextType.clear(); - } - - @action - resetEditedSelectedVertexType() { - this.editedSelectedVertexType = { - append_properties: [], - append_property_indexes: [], - remove_property_indexes: [], - style: { - color: '#5c73e6', - icon: null, - size: 'NORMAL', - display_fields: ['~id'] - } - }; - - // need to clear checkbox status either - this.resetAddedPropertiesInSelectedVertextType(); - } - - // reuse - - @action - mutateEditedReusableData(newEditedReusableVertexTypes: CheckedReusableData) { - this.editedCheckedReusableData = newEditedReusableVertexTypes; - } - - @action - mutateReusableVertexTypeChangeIndexes(index: number) { - this.reusableVertexTypeNameChangeIndexes.add(index); - } - - @action - mutateReusablePropertyNameChangeIndexes(index: number) { - this.reusablePropertyNameChangeIndexes.add(index); - } - - @action - mutateReusablePropertyIndexNameChangeIndexes(index: number) { - this.reusablePropertyIndexNameChangeIndexes.add(index); - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusableVertexTypeName(index: number) { - this.editedCheckedReusableData!.vertexlabel_conflicts[ - index - ].entity.name = this.checkedReusableData!.vertexlabel_conflicts[ - index - ].entity.name; - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusablePropertyName(index: number) { - this.editedCheckedReusableData!.propertykey_conflicts[ - index - ].entity.name = this.checkedReusableData!.propertykey_conflicts[ - index - ].entity.name; - } - - // if cancel clicked, reset to the original name - @action - resetEditedReusablePropertyIndexName(index: number) { - this.editedCheckedReusableData!.propertyindex_conflicts[ - index - ].entity.name = this.checkedReusableData!.propertyindex_conflicts[ - index - ].entity.name; - } - - @action - clearReusableNameChangeIndexes() { - this.reusableVertexTypeNameChangeIndexes.clear(); - this.reusablePropertyNameChangeIndexes.clear(); - this.reusablePropertyIndexNameChangeIndexes.clear(); - } - - @action - resetReusableVertexTypes() { - this.reusableVertexTypes = []; - } - - @action - validateNewVertexType(category: VertexTypeValidateFields, initial = false) { - let isReady = true; - - // if initial is true, error message won't be assigned - // which intends to not pop up error layer - if (category === 'name') { - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(this.newVertexType.name)) { - if (this.newVertexType.name.length === 0) { - !initial && - (this.validateNewVertexTypeErrorMessage.name = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } else { - !initial && - (this.validateNewVertexTypeErrorMessage.name = i18next.t( - 'addition.store.rule4' - )); - isReady = false; - } - } else { - this.validateNewVertexTypeErrorMessage.name = ''; - } - } - - if (category === 'properties') { - if ( - this.newVertexType.properties.length === 0 && - this.newVertexType.id_strategy === 'PRIMARY_KEY' - ) { - !initial && - (this.validateNewVertexTypeErrorMessage.properties = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'primaryKeys') { - if ( - this.newVertexType.id_strategy === 'PRIMARY_KEY' && - this.newVertexType.primary_keys.length === 0 - ) { - !initial && - (this.validateNewVertexTypeErrorMessage.primaryKeys = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'displayFeilds') { - if (this.newVertexType.style.display_fields.length === 0) { - !initial && - (this.validateNewVertexTypeErrorMessage.displayFeilds = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - } - } - - if (category === 'propertyIndexes') { - this.isAddNewPropertyIndexReady = true; - - this.validateNewVertexTypeErrorMessage.propertyIndexes = this.newVertexType.property_indexes.map( - ({ name, type, fields }) => { - const validatedPropertyIndex = { - name: '', - type: '', - properties: '' - }; - - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { - if (!initial) { - if (name.length !== 0) { - validatedPropertyIndex.name = i18next.t('addition.store.rule4'); - } else { - validatedPropertyIndex.name = i18next.t( - 'addition.store.item-is-required' - ); - } - } - - isReady = false; - this.isAddNewPropertyIndexReady = false; - } else { - validatedPropertyIndex.name = ''; - } - - if (type.length === 0) { - !initial && - (validatedPropertyIndex.type = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - this.isAddNewPropertyIndexReady = false; - } else { - validatedPropertyIndex.type = ''; - } - - if (Array.isArray(fields)) { - if (fields.length === 0) { - !initial && - (validatedPropertyIndex.properties = i18next.t( - 'addition.store.item-is-required' - )); - isReady = false; - this.isAddNewPropertyIndexReady = false; - } - } else { - validatedPropertyIndex.properties = ''; - } - - return validatedPropertyIndex; - } - ); - } - - return isReady; - } - - @action - validateAllNewVertexType(initial = false) { - this.isCreatedReady = - this.validateNewVertexType('name', initial) && - this.validateNewVertexType('properties', initial) && - this.validateNewVertexType('primaryKeys', initial) && - this.validateNewVertexType('propertyIndexes', initial) && - this.validateNewVertexType('displayFeilds', initial); - } - - @action - validateEditVertexType(initial = false) { - this.isEditReady = true; - - this.validateEditVertexTypeErrorMessage.propertyIndexes = this.editedSelectedVertexType.append_property_indexes.map( - ({ name, type, fields }) => { - const validatedPropertyIndex = { - name: '', - type: '', - properties: '' - }; - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { - if (!initial) { - if (name.length !== 0) { - validatedPropertyIndex.name = i18next.t('addition.store.rule4'); - } else { - validatedPropertyIndex.name = i18next.t( - 'addition.store.item-is-required' - ); - } - } - - this.isEditReady = false; - } else { - validatedPropertyIndex.name = ''; - } - - if (type.length === 0) { - !initial && - (validatedPropertyIndex.type = i18next.t( - 'addition.store.item-is-required' - )); - this.isEditReady = false; - } else { - validatedPropertyIndex.type = ''; - } - - if (Array.isArray(fields)) { - if (fields.length === 0) { - !initial && - (validatedPropertyIndex.properties = i18next.t( - 'addition.store.item-is-required' - )); - this.isEditReady = false; - } - } else { - validatedPropertyIndex.properties = ''; - } - - return validatedPropertyIndex; - } - ); - } - - @action - validateReuseData( - category: 'vertexType' | 'property' | 'property_index', - originalValue: string, - newValue: string - ) { - if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(newValue)) { - if (newValue.length === 0) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.item-is-required' - ); - } else { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.rule4' - ); - } - - return false; - } - - // if value has changed - if (originalValue !== newValue) { - if (category === 'vertexType') { - if ( - !isUndefined( - this.checkedReusableData!.vertexlabel_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-vertex-name-notice' - ); - - return false; - } - } - - if (category === 'property') { - // check if there's an existed value equals to new value - if ( - !isUndefined( - this.checkedReusableData!.propertykey_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) || - !isUndefined( - this.checkedReusableData!.propertyindex_conflicts.find( - ({ entity }) => - !isUndefined( - entity.fields.find((fieldName) => fieldName === newValue) - ) - ) - ) || - !isUndefined( - this.checkedReusableData!.vertexlabel_conflicts.find( - ({ entity }) => - !isUndefined( - entity.properties.find(({ name }) => name === newValue) - ) || - !isUndefined( - entity.primary_keys.find((key) => key === newValue) - ) || - !isUndefined( - entity.property_indexes.find( - ({ fields }) => - !isUndefined( - fields.find((fieldName) => fieldName === newValue) - ) - ) - ) - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-property-name-notice' - ); - - return false; - } - } - - if (category === 'property_index') { - if ( - !isUndefined( - this.checkedReusableData!.propertyindex_conflicts.find( - ({ entity }) => entity.name === newValue - ) - ) || - !isUndefined( - this.checkedReusableData!.vertexlabel_conflicts.find( - ({ entity }) => - !isUndefined( - entity.property_indexes.find(({ name }) => name === newValue) - ) - ) - ) - ) { - this.validateReuseErrorMessage[category] = i18next.t( - 'addition.store.same-index-name-notice' - ); - - return false; - } - } - } - - return true; - } - - @action - mutateReuseData( - category: 'vertexType' | 'property' | 'property_index', - originalValue: string, - newValue: string - ) { - const editedCheckedReusableData = cloneDeep(this.editedCheckedReusableData); - - if (category === 'vertexType') { - } - - if (category === 'property') { - editedCheckedReusableData!.vertexlabel_conflicts.forEach( - ({ entity }, index) => { - const mutatePropertyIndex = entity.properties.findIndex( - ({ name }) => name === originalValue - ); - - if (mutatePropertyIndex !== -1) { - entity.properties[mutatePropertyIndex].name = newValue; - // property name in current vertex label has been edited - this.reusableVertexTypeNameChangeIndexes.add(index); - } - - const primaryKeyIndex = entity.primary_keys.findIndex( - (key) => key === originalValue - ); - - if (primaryKeyIndex !== -1) { - entity.primary_keys[primaryKeyIndex] = newValue; - this.reusableVertexTypeNameChangeIndexes.add(index); - } - - entity.property_indexes.forEach(({ fields }) => { - const mutatePropertyIndexIndex = fields.findIndex( - (fieldName) => fieldName === originalValue - ); - - if (mutatePropertyIndexIndex !== -1) { - fields[mutatePropertyIndex] = newValue; - this.reusableVertexTypeNameChangeIndexes.add(index); - } - }); - } - ); - - editedCheckedReusableData!.propertyindex_conflicts.forEach( - ({ entity }, index) => { - const mutateIndex = entity.fields.findIndex( - (fieldName) => fieldName === originalValue - ); - - if (mutateIndex !== -1) { - entity.fields[mutateIndex] = newValue; - this.reusablePropertyIndexNameChangeIndexes.add(index); - } - } - ); - } - - if (category === 'property_index') { - editedCheckedReusableData!.vertexlabel_conflicts.forEach( - ({ entity }, index) => { - const mutateVertexIndex = entity.property_indexes.findIndex( - ({ name }) => name === originalValue - ); - - if (mutateVertexIndex !== -1) { - entity.property_indexes[mutateVertexIndex].name = newValue; - this.reusableVertexTypeNameChangeIndexes.add(index); - } - } - ); - } - - this.editedCheckedReusableData = editedCheckedReusableData; - this.checkedReusableData = cloneDeep(editedCheckedReusableData); - } - - @action - deleteReuseData( - category: - | 'vertexlabel_conflicts' - | 'propertykey_conflicts' - | 'propertyindex_conflicts', - index: number - ) { - if (this.editedCheckedReusableData !== null) { - const editedCheckedReusableData = cloneDeep( - this.editedCheckedReusableData - ); - - if (category === 'vertexlabel_conflicts') { - const deletedVertexType = - editedCheckedReusableData.vertexlabel_conflicts[index]; - const deletedPropertyNames: string[] = []; - const deletedPropertyIndexNames: string[] = []; - - deletedVertexType.entity.properties.forEach(({ name }) => { - deletedPropertyNames.push(name); - }); - - deletedVertexType.entity.property_indexes.forEach(({ name }) => { - deletedPropertyIndexNames.push(name); - }); - - editedCheckedReusableData.vertexlabel_conflicts.splice(index, 1); - - // if there's no vertex labels, return since it will move back to the previous step - if (editedCheckedReusableData.vertexlabel_conflicts.length === 0) { - return; - } - - deletedPropertyIndexNames.forEach((propertyIndexName) => { - remove( - editedCheckedReusableData.propertyindex_conflicts, - ({ entity }) => entity.name === propertyIndexName - ); - }); - - deletedPropertyNames - .filter( - (propertyName) => - !isUndefined( - editedCheckedReusableData.vertexlabel_conflicts.find( - ({ entity }) => - isUndefined( - entity.properties.find( - ({ name }) => name === propertyName - ) - ) - ) - ) - ) - .forEach((propertyName) => { - remove( - editedCheckedReusableData.propertykey_conflicts, - ({ entity }) => entity.name === propertyName - ); - }); - } - - if (category === 'propertykey_conflicts') { - const deletedName = - editedCheckedReusableData.propertykey_conflicts[index].entity.name; - // remove property in properties - editedCheckedReusableData.propertykey_conflicts.splice(index, 1); - - // remove property in property index - editedCheckedReusableData.propertyindex_conflicts.forEach( - ({ entity }) => { - remove(entity.fields, (name) => name === deletedName); - } - ); - - remove( - editedCheckedReusableData.propertyindex_conflicts, - ({ entity }) => entity.fields.length === 0 - ); - - // remove property in vertex labels - editedCheckedReusableData.vertexlabel_conflicts.forEach( - ({ entity }, vertexlabelIndex) => { - const cb = (param: { name: string } | string) => { - const name = typeof param === 'string' ? param : param.name; - - if (name === deletedName) { - this.reusableVertexTypeNameChangeIndexes.add(vertexlabelIndex); - return true; - } - - return false; - }; - - remove(entity.properties, cb); - remove(entity.primary_keys, cb); - - entity.property_indexes.forEach(({ fields }) => { - remove(fields, cb); - }); - } - ); - } - - if (category === 'propertyindex_conflicts') { - const { - name: deletedPropertyIndexName, - fields - } = editedCheckedReusableData.propertyindex_conflicts[index].entity; - - editedCheckedReusableData.propertyindex_conflicts.splice(index, 1); - - // delete property index in vertex label - editedCheckedReusableData.vertexlabel_conflicts.forEach( - ({ entity }, index) => { - const deletedIndex = entity.property_indexes.findIndex( - ({ name }) => name === deletedPropertyIndexName - ); - - if (deletedIndex !== -1) { - this.reusableVertexTypeNameChangeIndexes.add(index); - entity.property_indexes.splice(deletedIndex, 1); - } - } - ); - } - - this.mutateEditedReusableData(editedCheckedReusableData); - } - } - - @action - resetValidateNewVertexTypeMessage( - category?: VertexTypeValidateFields, - propertIndexIndex?: number, - propertIndexProperty?: keyof VertexTypeValidatePropertyIndexes - ) { - if (isUndefined(category)) { - this.validateNewVertexTypeErrorMessage = { - name: '', - properties: '', - primaryKeys: '', - displayFeilds: '', - propertyIndexes: [] - }; - - return; - } - - if (category === 'propertyIndexes') { - (this.validateNewVertexTypeErrorMessage - .propertyIndexes as VertexTypeValidatePropertyIndexes[])[ - propertIndexIndex as number - ][propertIndexProperty as keyof VertexTypeValidatePropertyIndexes] = ''; - - return; - } - - this.validateNewVertexTypeErrorMessage[category] = ''; - } - - @action - resetValidateReuseErrorMessage( - category?: 'vertexType' | 'property' | 'property_index' - ) { - if (isUndefined(category)) { - this.validateReuseErrorMessage = { - property: '', - property_index: '', - vertexType: '' - }; - - return; - } - - this.validateReuseErrorMessage[category] = ''; - } - - @action - dispose() { - this.currentTabStatus = 'list'; - this.requestStatus = { - fetchVertexTypeList: 'pending', - checkIfUsing: 'pending', - addVertexType: 'pending', - updateVertexType: 'pending', - deleteVertexType: 'pending', - checkConflict: 'pending', - recheckConflict: 'pending', - reuseVertexType: 'pending' - }; - this.vertexListPageConfig = { - pageNumber: 1, - pageTotal: 0, - sort: '' - }; - this.errorMessage = ''; - - this.isCreatedReady = false; - this.isAddNewPropertyIndexReady = true; - this.isEditReady = true; - - this.resetNewVertextType(); - this.selectedVertexType = null; - this.selectedVertexTypeNames = []; - this.resetEditedSelectedVertexType(); - this.vertexTypes = []; - this.vertexTypeUsingStatus = null; - // reuse - this.reusableVertexTypes = []; - this.checkedReusableData = null; - this.editedCheckedReusableData = null; - this.resetValidateNewVertexTypeMessage(); - this.resetValidateReuseErrorMessage(); - } - - fetchVertexTypeList = flow(function* fetchVertexTypeList( - this: VertexTypeStore, - options?: { fetchAll?: boolean; reuseId?: number } - ) { - this.requestStatus.fetchVertexTypeList = 'pending'; - - const conn_id = - options && typeof options.reuseId === 'number' - ? options.reuseId - : this.metadataConfigsRootStore.currentId; - - try { - const result: AxiosResponse> = yield axios - .get(`${baseUrl}/${conn_id}/schema/vertexlabels`, { - params: { - page_no: this.vertexListPageConfig.pageNumber, - page_size: !options ? 10 : -1, - name_order: - this.vertexListPageConfig.sort !== '' - ? this.vertexListPageConfig.sort - : null - } - }) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - if (result.data.status === 401) { - this.validateLicenseOrMemories = false; - } - - throw new Error(result.data.message); - } - - if (options && typeof options.reuseId === 'number') { - this.reusableVertexTypes = result.data.data.records; - } else { - this.vertexTypes = result.data.data.records; - this.vertexListPageConfig.pageTotal = result.data.data.total; - } - - if (this.currentTabStatus !== 'reuse') { - result.data.data.records.length === 0 - ? (this.currentTabStatus = 'empty') - : (this.currentTabStatus = 'list'); - } - - this.requestStatus.fetchVertexTypeList = 'success'; - } catch (error) { - this.requestStatus.fetchVertexTypeList = 'failed'; - this.errorMessage = error.message; - } - }); - - checkIfUsing = flow(function* checkIfUsing( - this: VertexTypeStore, - selectedPropertyNames: string[] - ) { - this.requestStatus.checkIfUsing = 'pending'; - - try { - const result: AxiosResponse - >> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/check_using`, - { - names: selectedPropertyNames - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.vertexTypeUsingStatus = result.data.data; - this.requestStatus.checkIfUsing = 'success'; - } catch (error) { - this.requestStatus.checkIfUsing = 'failed'; - this.errorMessage = error.message; - } - }); - - addVertexType = flow(function* addVertexType(this: VertexTypeStore) { - this.requestStatus.addVertexType = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels`, - { - name: this.newVertexType.name, - id_strategy: this.newVertexType.id_strategy, - properties: this.newVertexType.properties, - primary_keys: this.newVertexType.primary_keys, - property_indexes: this.newVertexType.property_indexes, - open_label_index: this.newVertexType.open_label_index, - style: this.newVertexType.style - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.addVertexType = 'success'; - } catch (error) { - this.requestStatus.addVertexType = 'failed'; - this.errorMessage = error.message; - } - }); - - updateVertexType = flow(function* updateVertexType(this: VertexTypeStore) { - this.requestStatus.updateVertexType = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .put( - `${baseUrl}/${ - this.metadataConfigsRootStore.currentId - }/schema/vertexlabels/${this.selectedVertexType!.name}`, - { - append_properties: this.editedSelectedVertexType.append_properties, - append_property_indexes: this.editedSelectedVertexType - .append_property_indexes, - remove_property_indexes: this.editedSelectedVertexType - .remove_property_indexes, - style: this.editedSelectedVertexType.style - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.updateVertexType = 'success'; - } catch (error) { - this.requestStatus.updateVertexType = 'failed'; - this.errorMessage = error.message; - } - }); - - deleteVertexType = flow(function* deleteVertexType( - this: VertexTypeStore, - selectedVertexTypeNames: string[] - ) { - this.requestStatus.deleteVertexType = 'pending'; - - const combinedParams = selectedVertexTypeNames - .map((name) => 'names=' + name) - .join('&'); - - try { - const result: AxiosResponse> = yield axios - .delete( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels?` + - combinedParams + - `&skip_using=${String(size(selectedVertexTypeNames) !== 1)}` - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - if ( - selectedVertexTypeNames.length === this.vertexTypes.length && - this.vertexListPageConfig.pageNumber === - Math.ceil(this.vertexListPageConfig.pageTotal / 10) && - this.vertexListPageConfig.pageNumber > 1 - ) { - this.vertexListPageConfig.pageNumber = - this.vertexListPageConfig.pageNumber - 1; - } - - this.requestStatus.deleteVertexType = 'success'; - } catch (error) { - this.requestStatus.deleteVertexType = 'failed'; - this.errorMessage = error.message; - } - }); - - checkConflict = flow(function* checkConflict( - this: VertexTypeStore, - reuseId: string, - selectedVertexTypes: string[] - ) { - this.requestStatus.checkConflict = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/check_conflict`, - { - vertexlabels: selectedVertexTypes.map((selectedVertexType) => - this.reusableVertexTypes.find( - ({ name }) => name === selectedVertexType - ) - ) - }, - { - params: { - reused_conn_id: this.metadataConfigsRootStore.graphManagementStore.idList.find( - ({ name }) => name === reuseId - )!.id - } - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.checkedReusableData = result.data.data; - this.editedCheckedReusableData = cloneDeep(result.data.data); - this.requestStatus.checkConflict = 'success'; - } catch (error) { - this.requestStatus.checkConflict = 'failed'; - this.errorMessage = error.message; - } - }); - - recheckConflict = flow(function* recheckConflict(this: VertexTypeStore) { - this.requestStatus.recheckConflict = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/recheck_conflict`, - { - propertykeys: this.editedCheckedReusableData!.propertykey_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ), - propertyindexes: this.editedCheckedReusableData!.propertyindex_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ), - vertexlabels: this.editedCheckedReusableData!.vertexlabel_conflicts.map( - ({ entity }) => ({ - ...entity - }) - ) - } - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.checkedReusableData = result.data.data; - this.editedCheckedReusableData = cloneDeep(result.data.data); - this.requestStatus.recheckConflict = 'success'; - } catch (error) { - this.requestStatus.recheckConflict = 'failed'; - this.errorMessage = error.message; - } - }); - - reuseVertexType = flow(function* reuseVertexType(this: VertexTypeStore) { - this.requestStatus.reuseVertexType = 'pending'; - - try { - const result: AxiosResponse> = yield axios - .post( - `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/reuse`, - this.editedCheckedReusableData - ) - .catch(checkIfLocalNetworkOffline); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.requestStatus.reuseVertexType = 'success'; - } catch (error) { - this.requestStatus.reuseVertexType = 'failed'; - this.errorMessage = error.message; - } - }); -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/appStore.ts b/hugegraph-hubble/hubble-fe/src/stores/appStore.ts deleted file mode 100644 index d8819211f..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/appStore.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { createContext } from 'react'; -import { observable, action, flow } from 'mobx'; -import axios, { AxiosResponse } from 'axios'; -import { responseData, baseUrl } from './types/common'; - -export class AppStore { - @observable user: string = 'Hi, User name'; - @observable currentId: number | null = null; - @observable currentTab: string = 'graph-management'; - @observable errorMessage = ''; - - @observable colorList: string[] = []; - - @observable.shallow requestStatus = { - fetchColorList: 'pending' - }; - - @action.bound - setCurrentId(id: number) { - this.currentId = id; - } - - @action.bound - switchCurrentTab(tab: string) { - this.currentTab = tab; - } - - @action.bound - setUser(user: string) { - this.user = user; - } - - @action - dispose() { - this.user = 'Hi, User name'; - this.currentTab = 'graph-management'; - this.requestStatus = { - fetchColorList: 'pending' - }; - } - - fetchColorList = flow(function* fetchColorList(this: AppStore) { - this.requestStatus.fetchColorList = 'pending'; - - try { - const result: AxiosResponse> = yield axios.get( - `${baseUrl}/${this.currentId}/schema/vertexlabels/optional-colors` - ); - - if (result.data.status !== 200) { - throw new Error(result.data.message); - } - - this.colorList = result.data.data; - this.requestStatus.fetchColorList = 'success'; - } catch (error) { - this.requestStatus.fetchColorList = 'failed'; - this.errorMessage = error.message; - console.error(error.message); - } - }); -} - -export default createContext(new AppStore()); diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/asyncTasksStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/asyncTasksStore.ts deleted file mode 100644 index 9a0a54052..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/asyncTasksStore.ts +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export function initRequestStatus() { - return { - fetchAsyncTaskList: 'standby', - fetchAsyncTask: 'standby', - deleteAsyncTask: 'standby', - abortAsyncTask: 'standby' - }; -} - -export function initErrorInfo() { - return { - fetchAsyncTaskList: { - code: NaN, - message: '' - }, - fetchAsyncTask: { - code: NaN, - message: '' - }, - deleteAsyncTask: { - code: NaN, - message: '' - }, - abortAsyncTask: { - code: NaN, - message: '' - } - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/algorithmStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/algorithmStore.ts deleted file mode 100644 index b58aa6cd4..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/algorithmStore.ts +++ /dev/null @@ -1,529 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { v4 } from 'uuid'; - -export enum Algorithm { - loopDetection = 'loop-detection', - focusDetection = 'focus-detection', - shortestPath = 'shortest-path', - shortestPathAll = 'shortest-path-all', - allPath = 'all-path', - modelSimilarity = 'model-similarity', - neighborRank = 'neighbor-rank', - kStepNeighbor = 'k-step-neighbor', - kHop = 'k-hop', - customPath = 'custom-path', - radiographicInspection = 'radiographic-inspection', - sameNeighbor = 'same-neighbor', - weightedShortestPath = 'weighted-shortest-path', - singleSourceWeightedShortestPath = 'single-source-weighted-shortest-path', - jaccard = 'jaccard', - personalRankRecommendation = 'personal-rank' -} - -export function initializeRequestStatus() { - return { - fetchAlgorithmResult: 'standby' - }; -} - -export function initializeErrorInfo() { - return { - fetchAlgorithmResult: { - code: NaN, - message: '' - } - }; -} - -export function createLoopDetectionDefaultParams() { - return { - source: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - source_in_ring: true, - limit: '10', - capacity: '10000000' - }; -} - -export function createValidateLoopDetectionParamsErrorMessage() { - return { - source: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - source_in_ring: '', - limit: '', - capacity: '' - }; -} - -export function createFocusDetectionDefaultParams() { - return { - source: '', - target: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - capacity: '10000000', - limit: '10' - }; -} - -export function createValidateFocusDetectionParamsErrorMessage() { - return { - source: '', - target: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - skip_degree: '', - capacity: '', - limit: '' - }; -} - -export function createShortestPathDefaultParams() { - return { - source: '', - target: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - skip_degree: '0', - capacity: '10000000' - }; -} - -export function createValidateShortestPathParamsErrorMessage() { - return { - source: '', - target: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - skip_degree: '', - capacity: '' - }; -} - -export function createShortestPathAllDefaultParams() { - return { - source: '', - target: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - skip_degree: '0', - capacity: '10000000' - }; -} - -export function createValidateShortestPathAllParamsErrorMessage() { - return { - source: '', - target: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - skip_degree: '', - capacity: '' - }; -} - -export function createAllPathDefaultParams() { - return { - source: '', - target: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - skip_degree: '0', - capacity: '10000000', - limit: '10' - }; -} - -export function createValidateAllPathParamsErrorMessage() { - return { - source: '', - target: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - skip_degree: '', - capacity: '', - limit: '' - }; -} - -export function createModelSimilarityDefaultParams() { - return { - method: 'id', - source: '', - vertexType: '', - vertexProperty: [['', '']], - direction: 'BOTH', - least_neighbor: '', - similarity: '', - label: '__all__', - max_similar: '1', - least_similar: '1', - property_filter: '', - least_property_number: '', - max_degree: '10000', - capacity: '10000000', - limit: '10', - return_common_connection: false, - return_complete_info: false - }; -} - -export function createValidateModelSimilarParamsErrorMessage() { - return { - method: '', - source: '', - vertexType: '', - vertexProperty: '', - direction: '', - least_neighbor: '', - similarity: '', - label: '', - max_similar: '', - least_similar: '', - property_filter: '', - least_property_number: '', - max_degree: '', - capacity: '', - limit: '', - return_common_connection: '', - return_complete_info: '' - }; -} - -export function createNeighborRankDefaultParams(): { - source: string; - alpha: string; - capacity: string; - steps: { - uuid: string; - direction: string; - labels: string[]; - degree: string; - top: string; - }[]; -} { - return { - source: '', - alpha: '', - capacity: '10000000', - steps: [ - { - uuid: v4(), - direction: 'BOTH', - labels: ['__all__'], - degree: '10000', - top: '100' - } - ] - }; -} - -export function createValidateNeighborRankErrorMessage(): { - source: string; - alpha: string; - capacity: string; - steps: { - uuid: string; - direction: string; - labels: string; - degree: string; - top: string; - }[]; -} { - return { - source: '', - alpha: '', - capacity: '', - steps: [ - { - uuid: '', - direction: '', - labels: '', - degree: '', - top: '' - } - ] - }; -} - -export function createKStepNeighborDefaultParams() { - return { - source: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - limit: '10000000' - }; -} - -export function createValidateKStepNeighborParamsErrorMessage() { - return { - source: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - limit: '' - }; -} - -export function createKHopDefaultParams() { - return { - source: '', - direction: 'BOTH', - max_depth: '', - nearest: true, - label: '__all__', - max_degree: '10000', - limit: '10000000', - capacity: '10000000' - }; -} - -export function createValidateKHopParamsErrorMessage() { - return { - source: '', - direction: '', - max_depth: '', - nearest: '', - label: '', - max_degree: '', - limit: '', - capacity: '' - }; -} - -export function createCustomPathDefaultParams() { - return { - method: 'id', - source: '', - vertexType: '', - vertexProperty: [['', '']], - sort_by: 'NONE', - capacity: '10000000', - limit: '10', - steps: [ - { - uuid: v4(), - direction: 'BOTH', - labels: [], - properties: [['', '']], - weight_by: '', - default_weight: '', - degree: '10000', - sample: '100' - } - ] - }; -} - -export function createValidateCustomPathParamsErrorMessage() { - return { - method: '', - source: '', - vertexType: '', - vertexProperty: '', - sort_by: '', - capacity: '', - limit: '', - steps: [ - { - uuid: '', - direction: '', - labels: '', - properties: '', - weight_by: '', - default_weight: '', - degree: '', - sample: '' - } - ] - }; -} - -export function createRadiographicInspectionDefaultParams() { - return { - source: '', - direction: 'BOTH', - max_depth: '', - label: '__all__', - max_degree: '10000', - capacity: '1000000', - limit: '10' - }; -} - -export function createValidateRadiographicInspectionParamsErrorMessage() { - return { - source: '', - direction: '', - max_depth: '', - label: '', - max_degree: '', - capacity: '', - limit: '' - }; -} - -export function createSameNeighborDefaultParams() { - return { - vertex: '', - other: '', - direction: 'BOTH', - label: '__all__', - max_degree: '10000', - limit: '10000000' - }; -} - -export function createValidateSameNeighborParamsErrorMessage() { - return { - vertex: '', - other: '', - direction: '', - label: '', - max_degree: '', - limit: '' - }; -} - -export function createWeightedShortestPathDefaultParams() { - return { - source: '', - target: '', - direction: 'BOTH', - weight: '', - with_vertex: true, - label: '__all__', - max_degree: '10000', - skip_degree: '0', - capacity: '10000000' - }; -} - -export function createValidateWeightedShortestPathParamsErrorMessage() { - return { - source: '', - target: '', - direction: '', - weight: '', - with_vertex: '', - label: '', - max_degree: '', - skip_degree: '', - capacity: '' - }; -} - -export function createSingleSourceWeightedShortestPathDefaultParams() { - return { - source: '', - direction: 'BOTH', - weight: '', - with_vertex: true, - label: '__all__', - max_degree: '10000', - skip_degree: '0', - capacity: '10000000', - limit: '10' - }; -} - -export function createValidateSingleSourceWeightedShortestPathParamsErrorMessage() { - return { - source: '', - direction: '', - weight: '', - with_vertex: '', - label: '', - max_degree: '', - skip_degree: '', - capacity: '', - limit: '' - }; -} - -export function createJaccardDefaultParams() { - return { - vertex: '', - other: '', - direction: 'BOTH', - label: '__all__', - max_degree: '10000' - }; -} - -export function createValidateJaccardParamsErrorMessage() { - return { - vertex: '', - other: '', - direction: '', - label: '', - max_degree: '' - }; -} - -export function createPersonalRankDefaultParams() { - return { - source: '', - alpha: '', - max_depth: '', - with_label: 'SAME_LABEL', - label: '', - degree: '10000', - limit: '10000000', - sorted: true - }; -} - -export function createValidatePersonalRankParamsErrorMessage() { - return { - source: '', - alpha: '', - max_depth: '', - with_label: '', - label: '', - degree: '', - limit: '', - sorted: '' - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts deleted file mode 100644 index 236a95734..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export function initalizeRequestStatus() { - return { - fetchIdList: 'standby', - fetchValueTypes: 'standby', - fetchVertexTypeList: 'standby', - fetchColorSchemas: 'standby', - fetchColorList: 'standby', - fetchEdgeTypes: 'standby', - fetchAllNodeStyle: 'standby', - fetchAllEdgeStyle: 'standby', - fetchAllPropertyIndexes: 'standby', - fetchGraphs: 'standby', - createAsyncTask: 'standby', - addGraphNode: 'standby', - fetchRelatedEdges: 'standby', - addGraphEdge: 'standby', - expandGraphNode: 'standby', - filteredGraphData: 'standby', - updateGraphProperties: 'standby', - fetchRelatedVertex: 'standby', - fetchFilteredPropertyOptions: 'standby', - addQueryCollection: 'standby', - editQueryCollection: 'standby', - deleteQueryCollection: 'standby', - fetchExecutionLogs: 'standby', - fetchFavoriteQueries: 'standby' - }; -} - -export function initalizeErrorInfo() { - return { - fetchIdList: { - code: NaN, - message: '' - }, - fetchValueTypes: { - code: NaN, - message: '' - }, - fetchVertexTypeList: { - code: NaN, - message: '' - }, - fetchColorSchemas: { - code: NaN, - message: '' - }, - fetchColorList: { - code: NaN, - message: '' - }, - fetchEdgeTypes: { - code: NaN, - message: '' - }, - fetchAllNodeStyle: { - code: NaN, - message: '' - }, - fetchAllEdgeStyle: { - code: NaN, - message: '' - }, - fetchAllPropertyIndexes: { - code: NaN, - message: '' - }, - fetchGraphs: { - code: NaN, - message: '' - }, - createAsyncTask: { - code: NaN, - message: '' - }, - addGraphNode: { - code: NaN, - message: '' - }, - fetchRelatedEdges: { - code: NaN, - message: '' - }, - addGraphEdge: { - code: NaN, - message: '' - }, - expandGraphNode: { - code: NaN, - message: '' - }, - filteredGraphData: { - code: NaN, - message: '' - }, - updateGraphProperties: { - code: NaN, - message: '' - }, - fetchRelatedVertex: { - code: NaN, - message: '' - }, - filteredPropertyOptions: { - code: NaN, - message: '' - }, - addQueryCollection: { - code: NaN, - message: '' - }, - editQueryCollection: { - code: NaN, - message: '' - }, - fetchExecutionLogs: { - code: NaN, - message: '' - }, - fetchFavoriteQueries: { - code: NaN, - message: '' - }, - deleteQueryCollection: { - code: NaN, - message: '' - } - }; -} - -export function createGraphNode() { - return { - id: '', - label: '', - properties: {} - }; -} - -export function createGraphEdge() { - return { - id: '', - source: '', - target: '', - label: '', - properties: {} - }; -} - -export function createGraphEditableProperties() { - return { - primary: new Map(), - nonNullable: new Map(), - nullable: new Map() - }; -} - -export function createNewGraphDataConfig() { - return { - id: '', - label: '', - properties: { - nullable: new Map(), - nonNullable: new Map() - } - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataImportRootStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataImportRootStore.ts deleted file mode 100644 index 442247a3d..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataImportRootStore.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export function initRequestStatus() { - return { - fetchFilehashes: 'standby', - uploadFiles: 'standby', - deleteFiles: 'standby', - fetchVertexTypeList: 'standby', - fetchEdgeTypeList: 'standby', - sendUploadCompleteSignal: 'standby', - sendMappingCompleteSignal: 'standby' - }; -} - -export function initErrorInfo() { - return { - fetchFilehashes: { - code: NaN, - message: '' - }, - uploadFiles: { - code: NaN, - message: '' - }, - deleteFiles: { - code: NaN, - message: '' - }, - fetchVertexTypeList: { - code: NaN, - message: '' - }, - fetchEdgeTypeList: { - code: NaN, - message: '' - }, - sendUploadCompleteSignal: { - code: NaN, - message: '' - }, - sendMappingCompleteSignal: { - code: NaN, - message: '' - } - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataMapStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataMapStore.ts deleted file mode 100644 index 297383095..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/dataMapStore.ts +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export function initRequestStatus() { - return { - updateFileConfig: 'standby', - fetchDataMaps: 'standby', - updateVertexMap: 'standby', - updateEdgeMap: 'standby', - deleteVertexMap: 'standby', - deleteEdgeMap: 'standby' - }; -} - -export function initErrorInfo() { - return { - updateFileConfig: { - code: NaN, - message: '' - }, - fetchDataMaps: { - code: NaN, - message: '' - }, - updateVertexMap: { - code: NaN, - message: '' - }, - updateEdgeMap: { - code: NaN, - message: '' - }, - deleteVertexMap: { - code: NaN, - message: '' - }, - deleteEdgeMap: { - code: NaN, - message: '' - } - }; -} - -export function createNewVertexType() { - return { - label: '', - id_fields: [''], - field_mapping: [], - value_mapping: [], - null_values: { - checked: ['NULL', 'null'], - customized: [] - } - }; -} - -export function createNewEdgeType() { - return { - label: '', - source_fields: [''], - target_fields: [''], - field_mapping: [], - value_mapping: [], - null_values: { - checked: ['NULL', 'null'], - customized: [] - } - }; -} - -export function createValidateFileInfoErrorMessage() { - return { - delimiter: '', - charset: '', - date_format: '', - skipped_line: '' - }; -} - -export function createValidateAdvanceConfigErrorMessage() { - return { - null_values: [], - value_mapping: [] - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/importManagmentStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/importManagmentStore.ts deleted file mode 100644 index 08be4a12b..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/importManagmentStore.ts +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export function initRequestStatus() { - return { - fetchImportJobList: 'standby', - createNewJob: 'standby', - updateJobInfo: 'standby', - deleteJob: 'standby', - fetchFailedReason: 'standby' - }; -} - -export function initErrorInfo() { - return { - fetchImportJobList: { - code: NaN, - message: '' - }, - createNewJob: { - code: NaN, - message: '' - }, - updateJobInfo: { - code: NaN, - message: '' - }, - deleteJob: { - code: NaN, - message: '' - }, - fetchFailedReason: { - code: NaN, - message: '' - } - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/serverDataImportStore.ts b/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/serverDataImportStore.ts deleted file mode 100644 index 0cc588b1d..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/factory/dataImportStore/serverDataImportStore.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { LoadParameter } from '../../types/GraphManagementStore/dataImportStore'; - -export function initRequestStatus() { - return { - fetchImportTasks: 'standby', - fetchAllImportTasks: 'standby', - setConfigParams: 'standby', - startImport: 'standby', - pauseImport: 'standby', - resumeImport: 'standby', - abortImport: 'standby', - retryImport: 'standby', - deleteTaskImport: 'standby', - checkErrorLogs: 'standby' - }; -} - -export function initErrorInfo() { - return { - fetchImportTasks: { - code: NaN, - message: '' - }, - fetchAllImportTasks: { - code: NaN, - message: '' - }, - setConfigParams: { - code: NaN, - message: '' - }, - startImport: { - code: NaN, - message: '' - }, - pauseImport: { - code: NaN, - message: '' - }, - resumeImport: { - code: NaN, - message: '' - }, - abortImport: { - code: NaN, - message: '' - }, - retryImport: { - code: NaN, - message: '' - }, - deleteTaskImport: { - code: NaN, - message: '' - }, - checkErrorLogs: { - code: NaN, - message: '' - } - }; -} - -export function createValidateFileInfoErrorMessage(): Record< - keyof LoadParameter, - string -> { - return { - check_vertex: '', - insert_timeout: '', - max_parse_errors: '', - max_insert_errors: '', - retry_times: '', - retry_interval: '' - }; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/index.ts b/hugegraph-hubble/hubble-fe/src/stores/index.ts deleted file mode 100644 index 59f9b51c5..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import AppStoreContext, { AppStore } from './appStore'; -import GraphManagementStoreContext, { - GraphManagementStore -} from './GraphManagementStore/graphManagementStore'; -import DataAnalyzeStoreContext, { - DataAnalyzeStore -} from './GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; -import DataImportRootStoreContext, { - DataImportRootStore -} from './GraphManagementStore/dataImportStore/dataImportRootStore'; -import ImportManagerStoreContext, { - ImportManagerStore -} from './GraphManagementStore/dataImportStore/ImportManagerStore'; -import AsyncTasksStoreContext, { - AsyncTasksStore -} from './GraphManagementStore/asyncTasksStore'; - -export { - AppStore, - AppStoreContext, - GraphManagementStore, - GraphManagementStoreContext, - DataAnalyzeStore, - DataAnalyzeStoreContext, - DataImportRootStore, - DataImportRootStoreContext, - ImportManagerStore, - ImportManagerStoreContext, - AsyncTasksStore, - AsyncTasksStoreContext -}; diff --git a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/asyncTasksStore.ts b/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/asyncTasksStore.ts deleted file mode 100644 index 48d31e170..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/asyncTasksStore.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export interface AsyncTask { - id: number; - task_type: string; - task_name: string; - task_status: string; - task_create: string; - task_update: string; - task_result: string; -} - -export interface AsyncTaskListResponse { - records: AsyncTask[]; - total: number; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts b/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts deleted file mode 100644 index 7a2eed3ac..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { Node, Edge } from 'vis-network'; -import { dict, responseData } from '../common'; -import { EdgeType } from './metadataConfigsStore'; - -export type ColorSchemas = dict; -export type RuleMap = dict; - -export interface FetchColorSchemas { - status: number; - data: ColorSchemas; - message: string; -} - -export type FetchFilteredPropertyOptions = responseData; - -export interface GraphNode extends Node { - id: string; - label: string; - properties: dict; - chosen?: any; - vLabel?: string; - style?: dict; -} - -export interface GraphEdge extends Edge { - id: string; - label: string; - properties: dict; - source: string; - target: string; -} - -export interface GraphView { - vertices: GraphNode[]; - edges: GraphEdge[]; -} - -export interface NewGraphData { - id?: string; - label: string; - properties: { - nullable: Map; - nonNullable: Map; - }; -} - -export interface EditableProperties { - nonNullable: Map; - nullable: Map; -} - -export interface QueryResult { - table_view: { - header: string[]; - rows: dict[]; - }; - json_view: { - data: dict[]; - }; - graph_view: GraphView; - type: string; -} - -export type FetchGraphResponse = responseData; - -export interface ValueTypes { - name: string; - data_type: string; - cardinality: string; - create_time: string; -} - -export interface AddQueryCollectionParams { - name: string; - content: string; -} - -export interface ExecutionLogs { - id: number; - async_id: number; - async_status: - | 'UNKNOWN' - | 'SCHEDULING' - | 'SCHEDULED' - | 'QUEUED' - | 'RESTORING' - | 'RUNNING' - | 'SUCCESS' - | 'CANCELLING' - | 'CANCELLED' - | 'FAILED'; - type: string; - algorithm_name: string; - content: string; - status: 'SUCCESS' | 'RUNNING' | 'FAILED'; - duration: string; - create_time: string; -} - -export type ExecutionLogsResponse = responseData<{ - records: ExecutionLogs[]; - total: number; -}>; - -export interface FavoriteQuery { - id: number; - name: string; - content: string; - create_time: string; -} - -export type FavoriteQueryResponse = responseData<{ - records: FavoriteQuery[]; - total: number; -}>; - -/* algorithm store */ -export interface LoopDetectionParams { - source: string; - direction: string; - max_depth: string; - label: string; - source_in_ring: boolean; - max_degree: string; - limit: string; - capacity: string; -} - -export interface FocusDetectionParams { - source: string; - target: string; - direction: string; - max_depth: string; - label: string; - max_degree: string; - limit: string; - capacity: string; -} - -export interface ShortestPathAlgorithmParams { - source: string; - target: string; - direction: string; - max_depth: string; - label: string; - max_degree: string; - skip_degree: string; - capacity: string; -} - -// export type ShortestPathAllAlgorithmParams = ShortestPathAlgorithmParams; -export interface ShortestPathAllAlgorithmParams { - source: string; - target: string; - direction: string; - max_depth: string; - label: string; - max_degree: string; - skip_degree: string; - capacity: string; -} - -export type AllPathAlgorithmParams = { - source: string; - target: string; - direction: string; - max_depth: string; - label: string; - max_degree: string; - capacity: string; - limit: string; -}; - -export interface ModelSimilarityParams { - method: string; - source: string; - vertexType: string; - vertexProperty: string[][]; - direction: string; - least_neighbor: string; - similarity: string; - label: string; - max_similar: string; - least_similar: string; - property_filter: string; - least_property_number: string; - max_degree: string; - capacity: string; - limit: string; - return_common_connection: boolean; - return_complete_info: boolean; -} - -export interface NeighborRankRule { - uuid: string; - direction: string; - labels: string[]; - degree: string; - top: string; -} - -export interface NeighborRankParams { - source: string; - alpha: string; - capacity: string; - steps: NeighborRankRule[]; -} - -export interface KStepNeighbor { - source: string; - direction: string; - max_depth: string; - label: string; - max_degree: string; - limit: string; -} - -export interface KHop { - source: string; - direction: string; - max_depth: string; - nearest: boolean; - label: string; - max_degree: string; - limit: string; - capacity: string; -} - -export interface CustomPathParams { - method: string; - source: string; - vertexType: string; - vertexProperty: string[][]; - sort_by: string; - capacity: string; - limit: string; - steps: CustomPathRule[]; -} - -export interface CustomPathRule { - uuid: string; - direction: string; - labels: string[]; - properties: string[][]; - weight_by: string; - default_weight: string; - degree: string; - sample: string; -} - -export interface RadiographicInspection { - source: string; - direction: string; - max_depth: string; - label: string; - max_degree: string; - capacity: string; - limit: string; -} - -export interface SameNeighbor { - vertex: string; - other: string; - direction: string; - label: string; - max_degree: string; - limit: string; -} - -export interface WeightedShortestPath { - source: string; - target: string; - direction: string; - weight: string; - with_vertex: boolean; - label: string; - max_degree: string; - skip_degree: string; - capacity: string; -} - -export interface SingleSourceWeightedShortestPath { - source: string; - direction: string; - weight: string; - with_vertex: boolean; - label: string; - max_degree: string; - skip_degree: string; - capacity: string; - limit: string; -} - -export interface Jaccard { - vertex: string; - other: string; - direction: string; - label: string; - max_degree: string; -} - -export interface PersonalRank { - source: string; - alpha: string; - max_depth: string; - with_label: string; - label: string; - degree: string; - limit: string; - sorted: boolean; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataImportStore.ts b/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataImportStore.ts deleted file mode 100644 index fbeb8c034..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/dataImportStore.ts +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { CancellablePromise } from 'mobx/lib/api/flow'; - -export interface JobGlance { - name: string; - description: string; -} - -export interface Job { - id: number; - conn_id: number; - job_name: string; - job_remarks: string; - job_size: string; - job_status: string; - job_duration: string; - update_time: string; - create_time: string; -} - -export interface JobResponse { - records: Job[]; - total: number; -} - -export interface JobFailedReason { - task_id: number; - file_id: number; - file_name: string; - reason: string; -} - -export interface FileUploadTask { - name: string; - size: number; - status: 'uploading' | 'failed' | 'success'; - chunkList: { - chunkIndex: number; - chunk: Blob; - }[]; - chunkTotal: number; - uploadedChunkTotal: number; - pendingChunkIndexes: number[]; - failedChunkIndexes: number[]; - uploadedChunksIndexes: number[]; -} - -export interface FileUploadResult { - id: string; - name: string; - size: string; - status: string; - cause: string | null; -} - -export interface FileUploadQueue { - fileName: string; - status: string; - task: CancellablePromise; -} - -export interface FileConfig { - has_header: boolean; - column_names: string[]; - column_values: string[]; - format: string; - delimiter: string; - charset: string; - date_format: string; - time_zone: string; - skipped_line: string; -} - -export type FileValidator = Pick< - FileConfig, - 'delimiter' | 'charset' | 'date_format' | 'skipped_line' ->; - -export interface FieldMapping { - column_name: string; - mapped_name: string; -} - -export interface ValueMapping { - column_name: string; - values: { - column_value: string; - mapped_value: string; - }[]; -} - -export type ValueMapValidator = { - null_values: string[]; - value_mapping: ValueMapping[]; -}; - -export interface NullValues { - checked: string[]; - customized: string[]; -} - -export interface VertexMap { - id?: string; - label: string; - id_fields: string[]; - field_mapping: FieldMapping[]; - value_mapping: ValueMapping[]; - null_values: NullValues; -} - -export interface EdgeMap { - id?: string; - label: string; - source_fields: string[]; - target_fields: string[]; - field_mapping: FieldMapping[]; - value_mapping: ValueMapping[]; - null_values: NullValues; -} - -export interface LoadParameter { - check_vertex: boolean; - insert_timeout: string; - max_parse_errors: string; - max_insert_errors: string; - retry_times: string; - retry_interval: string; -} - -export interface FileMapInfo { - id: number; - name: string; - total_lines: number; - total_size: string; - file_setting: FileConfig; - file_status: string; - vertex_mappings: VertexMap[]; - edge_mappings: EdgeMap[]; - load_parameter: LoadParameter; - last_access_time: string; -} - -export interface FileMapResult { - records: FileMapInfo[]; -} - -export interface ImportTasks { - id: number; - conn_id: number; - file_id: number; - vertices: string[]; - edges: string[]; - load_rate: number; - load_progress: number; - file_total_lines: number; - file_read_lines: number; - status: string; - duration: string; -} - -export interface AllImportTasksRecords { - records: ImportTasks[]; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/graphManagementStore.ts b/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/graphManagementStore.ts deleted file mode 100644 index fdca50cb1..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/graphManagementStore.ts +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { responseData } from '../common'; - -export interface LincenseInfo { - name: string; - edition: string; - version: string; - allowed_graphs: number; - allowed_datasize: string; -} - -export interface GraphData { - id: number; - name: string; - graph: string; - host: string; - port: number; - create_time: string; - username: string; - enabled: boolean; - password: string; -} - -export interface GraphDataConfig { - [index: string]: string | undefined; - name: string; - graph: string; - host: string; - port: string; - username: string; - password: string; -} - -export interface GraphDataPageConfig { - pageNumber: number; - pageSize: number; - pageTotal: number; -} - -export interface GraphDataList { - records: GraphData[]; - total: number; -} - -export type GraphDataResponse = responseData; diff --git a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/metadataConfigsStore.ts b/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/metadataConfigsStore.ts deleted file mode 100644 index 8ed2c3a8c..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/types/GraphManagementStore/metadataConfigsStore.ts +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { dict } from '../common'; -import { VertexTypeStore } from '../../GraphManagementStore/metadataConfigsStore/vertexTypeStore'; - -export interface PageConfig { - pageNumber: number; - pageTotal: number; - sort: 'asc' | 'desc' | ''; -} - -// metadata property - -export interface MetadataProperty { - name: string; - data_type: string; - cardinality: string; - create_time?: string; -} - -export interface NewMetadataProperty extends MetadataProperty { - _name?: string; -} - -export interface MetadataPropertyListResponse { - records: MetadataProperty[]; - total: number; -} - -// vertex types - -export type VertexTypeProperty = { - name: string; - nullable: boolean; -}; - -export type VertexTypePropertyIndex = { - name: string; - type: string; - fields: string[]; -}; - -export type VertexTypeStyle = { - icon: string | null; - color: string | null; - size: string; - display_fields: string[]; -}; - -export type VertexTypeValidateFields = - | 'name' - | 'properties' - | 'primaryKeys' - | 'displayFeilds' - | 'propertyIndexes'; - -export type VertexTypeValidatePropertyIndexes = { - name: string; - type: string; - properties: string; -}; - -export interface EditVertexTypeParams { - append_properties: VertexTypeProperty[]; - append_property_indexes: VertexTypePropertyIndex[]; - remove_property_indexes: string[]; - style: { - color: string | null; - icon: null; - size: string; - display_fields: string[]; - }; -} - -export interface VertexType { - [index: string]: string | any[] | VertexTypeStyle | boolean; - - name: string; - id_strategy: string; - properties: VertexTypeProperty[]; - primary_keys: string[]; - property_indexes: VertexTypePropertyIndex[]; - open_label_index: boolean; - style: VertexTypeStyle; -} - -export interface VertexTypeListResponse { - records: VertexType[]; - total: number; -} - -export interface CheckedReusableData { - type: string; - propertykey_conflicts: { entity: MetadataProperty; status: string }[]; - propertyindex_conflicts: { entity: MetadataPropertyIndex; status: string }[]; - vertexlabel_conflicts: { entity: VertexType; status: string }[]; - edgelabel_conflicts: { entity: EdgeType; status: string }[]; -} - -export interface ReCheckedReusableData { - propertykeys: MetadataProperty[]; - propertyindexes: MetadataPropertyIndex[]; - vertexlabels: VertexType[]; -} - -// edge types - -type EdgeTypeProperty = VertexTypeProperty; -type EdgeTypePropertyIndex = VertexTypePropertyIndex; - -type EdgeTypeStyle = { - color: string | null; - icon: string | null; - with_arrow: boolean; - thickness: string; - display_fields: string[]; -}; - -export type EdgeTypeValidateFields = - | 'name' - | 'sourceLabel' - | 'targetLabel' - | 'properties' - | 'sortKeys' - | 'propertyIndexes' - | 'displayFeilds'; - -export type EdgeTypeValidatePropertyIndexes = VertexTypeValidatePropertyIndexes; - -export interface EditEdgeTypeParams { - append_properties: VertexTypeProperty[]; - append_property_indexes: VertexTypePropertyIndex[]; - remove_property_indexes: string[]; - style: { - color: string | null; - icon: null; - with_arrow: boolean | null; - thickness: string; - display_fields: string[]; - }; -} - -export interface EdgeType { - name: string; - source_label: string; - target_label: string; - link_multi_times: boolean; - properties: EdgeTypeProperty[]; - sort_keys: string[]; - property_indexes: EdgeTypePropertyIndex[]; - open_label_index: boolean; - style: EdgeTypeStyle; -} - -export interface EdgeTypeListResponse { - records: EdgeType[]; - total: number; -} - -// metadata property index - -export interface MetadataPropertyIndex { - owner: string; - owner_type: string; - name: string; - type: string; - fields: string[]; -} - -export interface MetadataPropertyIndexResponse { - records: MetadataPropertyIndex[]; - total: number; -} - -// graph view data - -export type DrawerTypes = - | 'create-property' - | 'create-vertex' - | 'create-edge' - | 'check-property' - | 'check-vertex' - | 'check-edge' - | 'edit-vertex' - | 'edit-edge' - | ''; - -export interface GraphViewData { - vertices: { - id: string; - label: string; - properties: Record; - primary_keys: string[]; - style?: dict; - }[]; - edges: { - id: string; - label: string; - source: string; - target: string; - properties: Record; - sort_keys: string[]; - }[]; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/types/common.ts b/hugegraph-hubble/hubble-fe/src/stores/types/common.ts deleted file mode 100644 index ea4ec7eeb..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/types/common.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export const baseUrl = '/api/v1.2/graph-connections'; - -export type dict = Record; - -export interface responseData { - status: number; - data: T; - message: string; -} diff --git a/hugegraph-hubble/hubble-fe/src/stores/utils/index.ts b/hugegraph-hubble/hubble-fe/src/stores/utils/index.ts deleted file mode 100644 index a2d2c490c..000000000 --- a/hugegraph-hubble/hubble-fe/src/stores/utils/index.ts +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { isUndefined, size } from 'lodash-es'; -import isInt from 'validator/lib/isInt'; -import isFloat from 'validator/lib/isFloat'; -import isBoolean from 'validator/lib/isBoolean'; -import isISO8601 from 'validator/lib/isISO8601'; -import isUUID from 'validator/lib/isUUID'; -import isEmpty from 'validator/lib/isEmpty'; -import i18next from '../../i18n'; - -import type vis from 'vis-network'; -import type { - GraphNode, - GraphEdge -} from '../types/GraphManagementStore/dataAnalyzeStore'; -import type { - VertexTypeProperty, - MetadataProperty -} from '../types/GraphManagementStore/metadataConfigsStore'; - -/* variables */ - -export const vertexRadiusMapping: Record = { - HUGE: 40, - BIG: 30, - NORMAL: 20, - SMALL: 10, - TINY: 1 -}; - -export const edgeWidthMapping: Record = { - THICK: 45, - NORMAL: 20, - FINE: -10 -}; - -/* functions */ - -export function checkIfLocalNetworkOffline(error: any) { - if (error.request) { - throw new Error(i18next.t('addition.store.network-error')); - } -} - -export function mapMetadataProperties( - properties: VertexTypeProperty[], - propertyCollection: MetadataProperty[] -) { - const mappedProperties: Record = {}; - - properties.forEach(({ name }) => { - const value = propertyCollection.find( - ({ name: propertyName }) => propertyName === name - )!.data_type; - - mappedProperties[name] = value; - }); - - return mappedProperties; -} - -export function generateGraphModeId( - id: string, - source: string, - target: string -): string { - return `${source}-${id}->${target}`; -} - -export function convertArrayToString( - values: any[] | any, - separtor: string = ',' -) { - return Array.isArray(values) - ? values.filter((value) => value !== '').join(separtor) - : String(values); -} - -export function validateGraphProperty( - type: string, - value: string, - premitEmpty: boolean = false -) { - if (premitEmpty) { - if (value === '') { - return true; - } - } - - switch (type) { - case 'BOOLEAN': - return isBoolean(value); - case 'BYTE': - return isInt(value) && Number(value) > -128 && Number(value) <= 127; - case 'INT': - case 'LONG': - return isInt(value); - case 'FLOAT': - case 'DOUBLE': - return isFloat(value); - case 'TEXT': - case 'BLOB': - return !isEmpty(value); - case 'DATE': - return isISO8601(value); - case 'UUID': - return isUUID(value); - } -} - -export function addGraphNodes( - collection: GraphNode[], - visGraphNodes: vis.data.DataSet, - vertexSizeMapping: Record, - colorMappings: Record, - displayFieldMappings: Record -) { - collection.forEach(({ id, label, properties }) => { - const joinedLabel = !isUndefined(displayFieldMappings[label]) - ? displayFieldMappings[label] - .map((field) => (field === '~id' ? id : properties[field])) - .filter((label) => label !== undefined && label !== null) - .join('-') - : id; - - visGraphNodes.add({ - id, - label: - size(joinedLabel) <= 15 - ? joinedLabel - : joinedLabel.slice(0, 15) + '...', - vLabel: label, - value: vertexRadiusMapping[vertexSizeMapping[label]], - font: { size: 16 }, - properties, - title: ` -
-
${i18next.t('addition.common.vertex-type')}:
-
${label}
-
-
-
${i18next.t('addition.common.vertex-id')}:
-
${id}
-
- ${Object.entries(properties) - .map(([key, value]) => { - return `
-
${key}:
-
${convertArrayToString(value)}
-
`; - }) - .join('')} - `, - color: { - background: colorMappings[label] || '#5c73e6', - border: colorMappings[label] || '#5c73e6', - highlight: { background: '#fb6a02', border: '#fb6a02' }, - hover: { background: '#ec3112', border: '#ec3112' } - }, - // reveal label when zoom to max - scaling: { - label: { - max: Infinity, - maxVisible: Infinity - } - }, - chosen: { - node(values: any, id: string, selected: boolean, hovering: boolean) { - if (hovering || selected) { - values.shadow = true; - values.shadowColor = 'rgba(0, 0, 0, 0.6)'; - values.shadowX = 0; - values.shadowY = 0; - values.shadowSize = 25; - } - - if (selected) { - values.size += 5; - } - } - } - }); - }); -} - -export function addGraphEdges( - collection: GraphEdge[], - visGraphEdges: vis.data.DataSet, - colorMappings: Record, - edgeThicknessMappings: Record, - edgeWithArrowMappings: Record, - displayFieldMappings: Record -) { - collection.forEach(({ id, label, source, target, properties }) => { - const joinedLabel = displayFieldMappings[label] - .map((field) => (field === '~id' ? label : properties[field])) - .join('-'); - - visGraphEdges.add({ - id, - label: - joinedLabel.length <= 15 - ? joinedLabel - : joinedLabel.slice(0, 15) + '...', - properties, - source, - target, - from: source, - to: target, - font: { size: 16, strokeWidth: 0, color: '#666' }, - arrows: edgeWithArrowMappings[label] ? 'to' : '', - color: colorMappings[label], - value: edgeWidthMapping[edgeThicknessMappings[label]], - title: ` -
-
${i18next.t('addition.common.edge-type')}:
-
${label}
-
-
-
${i18next.t('addition.common.edge-id')}:
-
${id}
-
- ${Object.entries(properties) - .map(([key, value]) => { - return `
-
${key}:
-
${convertArrayToString(value)}
-
`; - }) - .join('')} - ` - }); - }); -} - -export function formatVertexIdText( - text: string, - replacedText: string, - revert: boolean = false -) { - if (!revert) { - return text === '~id' ? replacedText : text; - } else { - return text === replacedText ? '~id' : text; - } -} - -export function isGtNegativeOneButZero(value: string | number) { - if (typeof value === 'number') { - value = String(value); - } - - return !( - !isEmpty(value) && - (!isInt(value as string, { min: -1 }) || String(Number(value)) === '0') - ); -} diff --git a/hugegraph-hubble/hubble-fe/src/third-party.d.ts b/hugegraph-hubble/hubble-fe/src/third-party.d.ts deleted file mode 100644 index 9e63323ba..000000000 --- a/hugegraph-hubble/hubble-fe/src/third-party.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -declare module 'hubble-ui'; diff --git a/hugegraph-hubble/hubble-fe/src/utils/calcAlgorithmFormWidth.ts b/hugegraph-hubble/hubble-fe/src/utils/calcAlgorithmFormWidth.ts deleted file mode 100644 index 76e1a896c..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/calcAlgorithmFormWidth.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export function calcAlgorithmFormWidth( - expand: boolean, - min: number, - max: number -) { - return expand ? min : max; -} diff --git a/hugegraph-hubble/hubble-fe/src/utils/convertStringToJSON.ts b/hugegraph-hubble/hubble-fe/src/utils/convertStringToJSON.ts deleted file mode 100644 index 975563027..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/convertStringToJSON.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export default function convertStringToJSON(text: any): object | null { - if (typeof text !== 'string') { - return null; - } - - let context; - - try { - context = JSON.parse(text); - } catch (e) { - return null; - } - - return typeof context === 'object' && context !== null ? context : null; -} diff --git a/hugegraph-hubble/hubble-fe/src/utils/filterEmptyAlgorightmParams.ts b/hugegraph-hubble/hubble-fe/src/utils/filterEmptyAlgorightmParams.ts deleted file mode 100644 index 6918ddc0a..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/filterEmptyAlgorightmParams.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { omitBy, cloneDeep, isEmpty } from 'lodash-es'; - -export function removeLabelKey>( - params: T, - isCloned = true, - key = 'label' -) { - const paramObject = isCloned ? params : cloneDeep(params); - - if (paramObject[key] === '__all__') { - delete paramObject[key]; - } - - return paramObject; -} - -export function filterEmptyAlgorightmParams(params: object, keys: string[]) { - return omitBy(params, (value, key) => keys.includes(key) && isEmpty(value)); -} diff --git a/hugegraph-hubble/hubble-fe/src/utils/formatAlgorithmStatement.ts b/hugegraph-hubble/hubble-fe/src/utils/formatAlgorithmStatement.ts deleted file mode 100644 index 56b46cc93..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/formatAlgorithmStatement.ts +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import { - isUndefined, - cloneDeep, - trimEnd, - isEmpty, - isObject, - fromPairs -} from 'lodash-es'; - -import type { TFunction, i18n } from 'i18next'; -import type { - NeighborRankParams, - CustomPathParams -} from '../stores/types/GraphManagementStore/dataAnalyzeStore'; - -export const AlgorithmInternalNameMapping: Record = { - rings: 'loop-detection', - crosspoints: 'focus-detection', - shortpath: 'shortest-path', - allshortpath: 'shortest-path-all', - paths: 'all-path', - fsimilarity: 'model-similarity', - neighborrank: 'neighbor-rank', - kneighbor: 'k-step-neighbor', - kout: 'k-hop', - customizedpaths: 'custom-path', - rays: 'radiographic-inspection', - sameneighbors: 'same-neighbor', - weightedshortpath: 'weighted-shortest-path', - singleshortpath: 'single-source-weighted-shortest-path', - jaccardsimilarity: 'jaccard', - personalrank: 'personal-rank' -}; - -export function formatAlgorithmStatement( - content: string, - algorithmType: string | undefined, - translator: TFunction, - i18n: i18n -) { - if (isUndefined(algorithmType)) { - return ['']; - } - - const algorithmName = translator( - `data-analyze.algorithm-forms.api-name-mapping.${algorithmType}` - ); - let algorithmParams = JSON.parse(content); - const statements: string[] = [algorithmName]; - - if (algorithmType === 'fsimilarity') { - let convertedParams: Record; - - if (!isUndefined(algorithmParams.sources)) { - convertedParams = { - source: algorithmParams.sources.ids ?? [], - 'vertex-type': algorithmParams.sources.label ?? '', - 'vertex-property': algorithmParams.sources.properties ?? [], - direction: algorithmParams.direction, - least_neighbor: algorithmParams.min_neighbors, - similarity: algorithmParams.alpha, - label: - algorithmParams.label === null || algorithmParams.label === '__all__' - ? translator( - `data-analyze.algorithm-forms.model-similarity.pre-value` - ) - : algorithmParams.label, - max_similar: algorithmParams.top, - least_similar: algorithmParams.min_similars, - property_filter: algorithmParams.group_property, - least_property_number: algorithmParams.min_groups, - max_degree: algorithmParams.max_degree, - capacity: algorithmParams.capacity, - limit: algorithmParams.limit, - return_common_connection: algorithmParams.with_intermediary, - return_complete_info: algorithmParams.with_vertex - }; - } else { - // no need to convert relative fields in temp log (which sources field is undefined) - convertedParams = { ...algorithmParams }; - convertedParams['vertex-type'] = convertedParams.vertexType; - convertedParams['vertex-property'] = convertedParams.vertexProperty; - convertedParams.label = - algorithmParams.label === null || algorithmParams.label === '__all__' - ? translator( - `data-analyze.algorithm-forms.model-similarity.pre-value` - ) - : algorithmParams.label; - - delete convertedParams.vertexType; - delete convertedParams.vertexProperty; - } - - algorithmParams = convertedParams; - } - - if (algorithmType === 'neighborrank') { - const convertedParams = cloneDeep(algorithmParams); - - convertedParams.steps = []; - - (algorithmParams as NeighborRankParams).steps.forEach( - ({ degree, direction, labels, top }, stepIndex) => { - const step: Record = {}; - - step[ - trimEnd( - translator( - 'data-analyze.algorithm-forms.neighbor-rank.options.degree' - ), - ':' - ) - ] = degree; - step[ - trimEnd( - translator( - 'data-analyze.algorithm-forms.neighbor-rank.options.direction' - ), - ':' - ) - ] = direction; - step[ - trimEnd( - translator( - 'data-analyze.algorithm-forms.neighbor-rank.options.label' - ), - ':' - ) - ] = isEmpty(labels) - ? translator('data-analyze.algorithm-forms.neighbor-rank.pre-value') - : labels.map((label) => - // value may be "__all__" from temp log (local) - label === '__all__' - ? translator( - 'data-analyze.algorithm-forms.neighbor-rank.pre-value' - ) - : label - ); - step[ - trimEnd( - translator( - 'data-analyze.algorithm-forms.neighbor-rank.options.top' - ), - ':' - ) - ] = top; - - convertedParams.steps[stepIndex] = step; - } - ); - - algorithmParams = convertedParams; - } - - // params struct fetched from server is not as consistent as front end - if (algorithmType === 'kout' && algorithmParams.hasOwnProperty('step')) { - algorithmParams.direction = algorithmParams.step.direction; - algorithmParams.max_degree = algorithmParams.step.degree; - algorithmParams.skip_degree = algorithmParams.step.skip_degree; - algorithmParams.label = algorithmParams.step.labels[0] ?? null; - - delete algorithmParams.step; - } - - if (algorithmType === 'customizedpaths') { - let convertedParams: Record; - - if (!isUndefined(algorithmParams.sources)) { - convertedParams = { - source: algorithmParams.sources.ids ?? [], - 'vertex-type': algorithmParams.sources.label ?? '', - 'vertex-property': algorithmParams.sources.properties ?? [], - capacity: algorithmParams.capacity, - limit: algorithmParams.limit, - sort_by: algorithmParams.sort_by, - steps: [] - }; - } else { - convertedParams = { - ...algorithmParams, - source: algorithmParams.source.split(','), - 'vertex-type': algorithmParams.vertexType, - 'vertex-property': fromPairs( - algorithmParams.vertexProperty.map( - ([key, value]: [string, string]) => [key, value.split(',')] - ) - ) - }; - - delete convertedParams.vertexType; - delete convertedParams.vertexProperty; - } - - (algorithmParams as CustomPathParams).steps.forEach((step, stepIndex) => { - const convertedStep: Record = {}; - - delete step.uuid; - - if (step.default_weight !== '') { - step.weight_by = step.default_weight; - } - - delete step.default_weight; - - Object.entries(step).forEach(([key, value]) => { - convertedStep[ - trimEnd( - translator( - `data-analyze.algorithm-forms.custom-path.options.${key}` - ), - ':' - ) - ] = value; - }); - - convertedParams.steps[stepIndex] = convertedStep; - }); - - algorithmParams = convertedParams; - } - - Object.entries(algorithmParams).forEach(([key, value]) => { - value = isObject(value) ? JSON.stringify(value, null, 4) : value; - - // label value could be null when it means all - if (key === 'label' && (value === null || value === '__all__')) { - value = translator( - `data-analyze.algorithm-forms.${AlgorithmInternalNameMapping[algorithmType]}.pre-value` - ); - } - - // personal rank customized - if (algorithmType === 'personalrank' && key === 'with_label') { - value = translator( - `data-analyze.algorithm-forms.personal-rank.with-label-radio-value.${(value as string).toLowerCase()}` - ); - } - - const fullPathKey = `data-analyze.algorithm-forms.${AlgorithmInternalNameMapping[algorithmType]}.options.${key}`; - - // remove redundant key from server - if (!i18n.exists(fullPathKey)) { - return; - } - - key = translator( - `data-analyze.algorithm-forms.${AlgorithmInternalNameMapping[algorithmType]}.options.${key}` - ); - - statements.push(`${key} ${value}`); - }); - - return statements; -} diff --git a/hugegraph-hubble/hubble-fe/src/utils/getUnicodeLength.ts b/hugegraph-hubble/hubble-fe/src/utils/getUnicodeLength.ts deleted file mode 100644 index 35b920f1b..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/getUnicodeLength.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export default function getUnicodeLength(str?: string) { - if (typeof str === 'undefined') { - return 0; - } - - return str.replace(/[^\x00-\xff]/g, '01').length; -} diff --git a/hugegraph-hubble/hubble-fe/src/utils/index.ts b/hugegraph-hubble/hubble-fe/src/utils/index.ts deleted file mode 100644 index 0caa170cd..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -import convertStringToJSON from './convertStringToJSON'; -import getUnicodeLength from './getUnicodeLength'; -import { - AlgorithmInternalNameMapping, - formatAlgorithmStatement -} from './formatAlgorithmStatement'; -import isDataTypeNumeric from './isDataTypeNumeric'; -import { calcAlgorithmFormWidth } from './calcAlgorithmFormWidth'; -import { - removeLabelKey, - filterEmptyAlgorightmParams -} from './filterEmptyAlgorightmParams'; - -export { - convertStringToJSON, - getUnicodeLength, - AlgorithmInternalNameMapping, - formatAlgorithmStatement, - isDataTypeNumeric, - calcAlgorithmFormWidth, - removeLabelKey, - filterEmptyAlgorightmParams -}; diff --git a/hugegraph-hubble/hubble-fe/src/utils/isDataTypeNumeric.ts b/hugegraph-hubble/hubble-fe/src/utils/isDataTypeNumeric.ts deleted file mode 100644 index 8b9d0e408..000000000 --- a/hugegraph-hubble/hubble-fe/src/utils/isDataTypeNumeric.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with this - * work for additional information regarding copyright ownership. The ASF - * licenses this file to You under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - */ - -export default function isDataTypeNumeric(type: string | undefined) { - return ( - type === 'BYTE' || - type === 'INT' || - type === 'LONG' || - type === 'FLOAT' || - type === 'DOUBLE' || - type === 'DATE' - ); -} diff --git a/hugegraph-hubble/hubble-fe/tsconfig-extend.json b/hugegraph-hubble/hubble-fe/tsconfig-extend.json deleted file mode 100644 index 5d35b2a3d..000000000 --- a/hugegraph-hubble/hubble-fe/tsconfig-extend.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "hubble-ui": ["src/components/hubble-ui"] - } - } -} diff --git a/hugegraph-hubble/hubble-fe/tsconfig.json b/hugegraph-hubble/hubble-fe/tsconfig.json deleted file mode 100644 index 0acd731ef..000000000 --- a/hugegraph-hubble/hubble-fe/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "allowJs": true, - "skipLibCheck": true, - "esModuleInterop": true, - "downlevelIteration": true, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "preserve", - "experimentalDecorators": true - }, - "include": [ - "src" - ], - "extends": "./tsconfig-extend.json" -} diff --git a/hugegraph-hubble/hubble-fe/yarn.lock b/hugegraph-hubble/hubble-fe/yarn.lock deleted file mode 100644 index 712d00e2e..000000000 --- a/hugegraph-hubble/hubble-fe/yarn.lock +++ /dev/null @@ -1,13380 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ant-design/colors@^6.0.0": - version "6.0.0" - resolved "https://registry.npmmirror.com/@ant-design/colors/download/@ant-design/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" - integrity sha1-m5NmJXz/zEfbQrnQIDu1ksE8Apg= - dependencies: - "@ctrl/tinycolor" "^3.4.0" - -"@ant-design/icons-svg@^4.2.1": - version "4.2.1" - resolved "https://registry.npmmirror.com/@ant-design/icons-svg/download/@ant-design/icons-svg-4.2.1.tgz?cache=0&sync_timestamp=1632478308697&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40ant-design%2Ficons-svg%2Fdownload%2F%40ant-design%2Ficons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" - integrity sha1-hjDajrRHGkqr2u19H/apfcss8Fo= - -"@ant-design/icons@^4.7.0": - version "4.7.0" - resolved "https://registry.npmmirror.com/@ant-design/icons/download/@ant-design/icons-4.7.0.tgz?cache=0&sync_timestamp=1632478665145&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40ant-design%2Ficons%2Fdownload%2F%40ant-design%2Ficons-4.7.0.tgz#8c3cbe0a556ba92af5dc7d1e70c0b25b5179af0f" - integrity sha1-jDy+ClVrqSr13H0ecMCyW1F5rw8= - dependencies: - "@ant-design/colors" "^6.0.0" - "@ant-design/icons-svg" "^4.2.1" - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - rc-util "^5.9.4" - -"@ant-design/react-slick@~0.28.1": - version "0.28.4" - resolved "https://registry.npmmirror.com/@ant-design/react-slick/download/@ant-design/react-slick-0.28.4.tgz#8b296b87ad7c7ae877f2a527b81b7eebd9dd29a9" - integrity sha1-iylrh618euh38qUnuBt+69ndKak= - dependencies: - "@babel/runtime" "^7.10.4" - classnames "^2.2.5" - json2mq "^0.2.0" - lodash "^4.17.21" - resize-observer-polyfill "^1.5.0" - -"@babel/code-frame@7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4= - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.9.0": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/compat-data/download/@babel/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" - integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== - -"@babel/core@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.4.5": - version "7.16.12" - resolved "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" - integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.12" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.10" - "@babel/types" "^7.16.8" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.16.8", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== - dependencies: - "@babel/types" "^7.16.8" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.8.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.8.3": - version "7.16.10" - resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" - integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" - integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-function-name/download/@babel/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.16.0.tgz?cache=0&sync_timestamp=1635567064131&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-skip-transparent-expression-wrappers%2Fdownload%2F%40babel%2Fhelper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha1-DuM4gHAUfDrgUeSH7KPrsOLouwk= - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.16.7", "@babel/helpers@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/helpers/download/@babel/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/highlight@^7.16.7", "@babel/highlight@^7.8.3": - version "7.16.10" - resolved "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": - version "7.16.12" - resolved "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" - integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - -"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha1-XgZlSvXNBLYIkVqtqbKmeIAERk4= - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" - integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-decorators@7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" - integrity sha1-IVaGCrZcWr8GjD9nBCGEBBBmVD4= - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-decorators" "^7.8.3" - -"@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha1-5FciU/3u1lzd7s/as/kor+sv1dI= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha1-XWdpQJaZ7Js7aGhM2BFs7f+Tutg= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" - integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" - integrity sha1-MdsWsVTDnWuKZFKSRyuYOUwpKlg= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha1-qYP7Gusuw/btBCohD2QOkOeG/g0= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA= - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha1-GV34mxRrS3izv4l/16JXyEZZ1AY= - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-decorators@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.16.7.tgz#f66a0199f16de7c1ef5192160ccf5d069739e3d3" - integrity sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha1-AolkqbqA28CUyRXEh618TnpmRlo= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-flow/download/@babel/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" - integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha1-ypHvRjA1MESLkGZSusLp/plB9pk= - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c= - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha1-YRGiZbz7Ag6579D9/X0mQCue1sE= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io= - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0= - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw= - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - -"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.16.7", "@babel/plugin-transform-block-scoping@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-classes@^7.16.7", "@babel/plugin-transform-classes@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.16.7", "@babel/plugin-transform-computed-properties@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-destructuring@^7.16.7", "@babel/plugin-transform-destructuring@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" - integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-duplicate-keys@^7.16.7", "@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-flow-strip-types@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/download/@babel/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" - integrity sha1-ijU4qkBDTgALj0Sjxcmscim9I5I= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.16.7", "@babel/plugin-transform-for-of@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-function-name@^7.16.7", "@babel/plugin-transform-function-name@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== - dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-literals@^7.16.7", "@babel/plugin-transform-literals@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.9.0": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.16.7", "@babel/plugin-transform-modules-systemjs@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== - dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== - dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8", "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - -"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - -"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.8.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-constant-elements@^7.0.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-constant-elements/download/@babel/plugin-transform-react-constant-elements-7.16.7.tgz#19e9e4c2df2f6c3e6b3aea11778297d81db8df62" - integrity sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-display-name@7.8.3": - version "7.8.3" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha1-cN7Zh8kWCfeDU9120vsqC7mR6OU= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-display-name@^7.16.7", "@babel/plugin-transform-react-display-name@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-jsx-development@^7.16.7", "@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/download/@babel/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" - -"@babel/plugin-transform-react-jsx-self@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/download/@babel/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" - integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-jsx-source@^7.9.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/download/@babel/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" - integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.9.1": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/download/@babel/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" - integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/download/@babel/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.8.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" - integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-runtime@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" - integrity sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - -"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-template-literals@^7.16.7", "@babel/plugin-transform-template-literals@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typeof-symbol@^7.16.7", "@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-typescript@^7.9.0": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" - -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/preset-env@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" - integrity sha1-pfxCSA6VCuj12fjyu8A/UnIt86g= - dependencies: - "@babel/compat-data" "^7.9.0" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.0" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.0" - "@babel/plugin-transform-modules-systemjs" "^7.9.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.0" - browserslist "^4.9.1" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-env@^7.4.5": - version "7.16.11" - resolved "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.npmmirror.com/@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha1-75Odbn8miCfhhBY43G/5VRXhFdk= - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@7.9.1": - version "7.9.1" - resolved "https://registry.npmmirror.com/@babel/preset-react/download/@babel/preset-react-7.9.1.tgz#b346403c36d58c3bb544148272a0cefd9c28677a" - integrity sha1-s0ZAPDbVjDu1RBSCcqDO/ZwoZ3o= - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.9.1" - "@babel/plugin-transform-react-jsx-development" "^7.9.0" - "@babel/plugin-transform-react-jsx-self" "^7.9.0" - "@babel/plugin-transform-react-jsx-source" "^7.9.0" - -"@babel/preset-react@^7.0.0": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/preset-react/download/@babel/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" - -"@babel/preset-typescript@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/preset-typescript/download/@babel/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" - integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-typescript" "^7.9.0" - -"@babel/runtime-corejs3@^7.12.1": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.16.8.tgz#ea533d96eda6fdc76b1812248e9fbd0c11d4a1a7" - integrity sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg== - dependencies: - core-js-pure "^3.20.2" - regenerator-runtime "^0.13.4" - -"@babel/runtime@7.9.0": - version "7.9.0" - resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.9.0.tgz#337eda67401f5b066a6f205a3113d4ac18ba495b" - integrity sha1-M37aZ0AfWwZqbyBaMRPUrBi6SVs= - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.16.7", "@babel/template@^7.4.0", "@babel/template@^7.8.6": - version "7.16.7" - resolved "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": - version "7.16.10" - resolved "https://registry.npmmirror.com/@babel/traverse/download/@babel/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" - integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.10" - "@babel/types" "^7.16.8" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": - version "7.16.8" - resolved "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" - integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.npmmirror.com/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha1-+GSuhQBND8q29QvpFBxNo2jRZWo= - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@csstools/convert-colors@^1.4.0": - version "1.4.0" - resolved "https://registry.npmmirror.com/@csstools/convert-colors/download/@csstools/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" - integrity sha1-rUldxBsS511YjG24uYNPCPoTHrc= - -"@csstools/normalize.css@^10.1.0": - version "10.1.0" - resolved "https://registry.npmmirror.com/@csstools/normalize.css/download/@csstools/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" - integrity sha1-8JULuhiBlRLUL3GX5WxRiqSRzxg= - -"@ctrl/tinycolor@^3.4.0": - version "3.4.0" - resolved "https://registry.npmmirror.com/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz#c3c5ae543c897caa9c2a68630bed355be5f9990f" - integrity sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8= - -"@emotion/is-prop-valid@^0.8.2": - version "0.8.8" - resolved "https://registry.npmmirror.com/@emotion/is-prop-valid/download/@emotion/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" - integrity sha1-2yixxDaKJZtgqXMR1qlS1P0BrBo= - dependencies: - "@emotion/memoize" "0.7.4" - -"@emotion/memoize@0.7.4": - version "0.7.4" - resolved "https://registry.npmmirror.com/@emotion/memoize/download/@emotion/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" - integrity sha1-Gb8PWvGRSREcQNmLsM+CEZ9dnus= - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.npmmirror.com/@hapi/address/download/@hapi/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha1-XWftQ/P9QaadS5/3tW58DR0KgeU= - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.npmmirror.com/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha1-CnCVreoGckPOMoPhtWuKj0U7JCo= - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.npmmirror.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha1-/elgZMpEbeyMVajC8TCVewcMbgY= - -"@hapi/joi@^15.0.0": - version "15.1.1" - resolved "https://registry.npmmirror.com/@hapi/joi/download/@hapi/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc= - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.npmmirror.com/@hapi/topo/download/@hapi/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck= - dependencies: - "@hapi/hoek" "^8.3.0" - -"@hypnosphi/create-react-context@^0.3.1": - version "0.3.1" - resolved "https://registry.npmmirror.com/@hypnosphi/create-react-context/download/@hypnosphi/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" - integrity sha1-+L/r3HZl9dQmy6N1Pg6cfTFU18Y= - dependencies: - gud "^1.0.0" - warning "^4.0.3" - -"@jest/console@^24.7.1", "@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/console/download/@jest/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha1-ebG8Bvt0qM+wHL3t+UVYSxuXB/A= - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - -"@jest/core@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/core/download/@jest/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" - integrity sha1-LOzNC5MYH5xIUOdPKprUPTUTacQ= - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.9.0" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-resolve-dependencies "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - jest-watcher "^24.9.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - realpath-native "^1.1.0" - rimraf "^2.5.4" - slash "^2.0.0" - strip-ansi "^5.0.0" - -"@jest/environment@^24.3.0", "@jest/environment@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/environment/download/@jest/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha1-IeOvotZcBYbL1svv4gi6+t5Eqxg= - dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - -"@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/fake-timers/download/@jest/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha1-uj5r8O7NCaY2BJiWQ00wZjZUDJM= - dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - -"@jest/reporters@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/reporters/download/@jest/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" - integrity sha1-hmYO/44rlmHQQqjpigKLjWMaW0M= - dependencies: - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.2.6" - jest-haste-map "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - node-notifier "^5.4.2" - slash "^2.0.0" - source-map "^0.6.0" - string-length "^2.0.0" - -"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/source-map/download/@jest/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha1-DiY6lEML5LQdpoPMwea//ioZFxQ= - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/test-result/download/@jest/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha1-EXluiqnb+I6gJXV7MVJZWtBroMo= - dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/istanbul-lib-coverage" "^2.0.0" - -"@jest/test-sequencer@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/test-sequencer/download/@jest/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" - integrity sha1-+PM081tiWk8vNV8v5+YDba0uazE= - dependencies: - "@jest/test-result" "^24.9.0" - jest-haste-map "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/transform/download/@jest/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha1-SuJ2iyllU/rasJ6ewRlUPJCxbFY= - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" - pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" - -"@jest/types@^24.3.0", "@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.npmmirror.com/@jest/types/download/@jest/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha1-Y8smy3UA0Gnlo4lEGnxqtekJ/Fk= - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4= - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmmirror.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.npmmirror.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs= - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmmirror.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@react-dnd/asap@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@react-dnd/asap/download/@react-dnd/asap-4.0.0.tgz#b300eeed83e9801f51bd66b0337c9a6f04548651" - integrity sha1-swDu7YPpgB9RvWawM3yabwRUhlE= - -"@react-dnd/invariant@^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@react-dnd/invariant/download/@react-dnd/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e" - integrity sha1-CdLoHNOeDnZ9faYt+TJYYPJOUX4= - -"@react-dnd/shallowequal@^2.0.0": - version "2.0.0" - resolved "https://registry.npmmirror.com/@react-dnd/shallowequal/download/@react-dnd/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a" - integrity sha1-owMetUEp8sZrJ1P4QEJm7Hv2fwo= - -"@stylelint/postcss-css-in-js@^0.37.2": - version "0.37.2" - resolved "https://registry.npmmirror.com/@stylelint/postcss-css-in-js/download/@stylelint/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" - integrity sha1-flqErRgfQjSiSAgDQipHuHSa89I= - dependencies: - "@babel/core" ">=7.9.0" - -"@stylelint/postcss-markdown@^0.36.2": - version "0.36.2" - resolved "https://registry.npmmirror.com/@stylelint/postcss-markdown/download/@stylelint/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391" - integrity sha1-ClQMRpL43N/BPI41LBfnv+4rs5E= - dependencies: - remark "^13.0.0" - unist-util-find-all-after "^3.0.2" - -"@svgr/babel-plugin-add-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/download/@svgr/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" - integrity sha1-2ty2IYUDUy1ohLIQ5/PFAsqqRLE= - -"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-attribute/download/@svgr/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc" - integrity sha1-KXVQuajAxzN76hK9/IqAu2b4Wrw= - -"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-empty-expression/download/@svgr/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7" - integrity sha1-wZYwLz5o6ragXpivnKhXC8ExMcc= - -"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/download/@svgr/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165" - integrity sha1-MQ7Ad13oCKai5P1CaMJF/XNMEWU= - -"@svgr/babel-plugin-svg-dynamic-title@^4.3.3": - version "4.3.3" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/download/@svgr/babel-plugin-svg-dynamic-title-4.3.3.tgz#2cdedd747e5b1b29ed4c241e46256aac8110dd93" - integrity sha1-LN7ddH5bGyntTCQeRiVqrIEQ3ZM= - -"@svgr/babel-plugin-svg-em-dimensions@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/download/@svgr/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391" - integrity sha1-mpR5HJoogQjSCp0sxkysgg8UE5E= - -"@svgr/babel-plugin-transform-react-native-svg@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/download/@svgr/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717" - integrity sha1-FRSHMihDNZocqGsho4Ff0hqItxc= - -"@svgr/babel-plugin-transform-svg-component@^4.2.0": - version "4.2.0" - resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/download/@svgr/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697" - integrity sha1-Xx4viGsshcZ+dtpC8Pa+Gxdntpc= - -"@svgr/babel-preset@^4.3.3": - version "4.3.3" - resolved "https://registry.npmmirror.com/@svgr/babel-preset/download/@svgr/babel-preset-4.3.3.tgz#a75d8c2f202ac0e5774e6bfc165d028b39a1316c" - integrity sha1-p12MLyAqwOV3Tmv8Fl0CizmhMWw= - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0" - "@svgr/babel-plugin-svg-dynamic-title" "^4.3.3" - "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0" - "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0" - "@svgr/babel-plugin-transform-svg-component" "^4.2.0" - -"@svgr/core@^4.3.3": - version "4.3.3" - resolved "https://registry.npmmirror.com/@svgr/core/download/@svgr/core-4.3.3.tgz#b37b89d5b757dc66e8c74156d00c368338d24293" - integrity sha1-s3uJ1bdX3Gbox0FW0Aw2gzjSQpM= - dependencies: - "@svgr/plugin-jsx" "^4.3.3" - camelcase "^5.3.1" - cosmiconfig "^5.2.1" - -"@svgr/hast-util-to-babel-ast@^4.3.2": - version "4.3.2" - resolved "https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/download/@svgr/hast-util-to-babel-ast-4.3.2.tgz#1d5a082f7b929ef8f1f578950238f630e14532b8" - integrity sha1-HVoIL3uSnvjx9XiVAjj2MOFFMrg= - dependencies: - "@babel/types" "^7.4.4" - -"@svgr/plugin-jsx@^4.3.3": - version "4.3.3" - resolved "https://registry.npmmirror.com/@svgr/plugin-jsx/download/@svgr/plugin-jsx-4.3.3.tgz#e2ba913dbdfbe85252a34db101abc7ebd50992fa" - integrity sha1-4rqRPb376FJSo02xAavH69UJkvo= - dependencies: - "@babel/core" "^7.4.5" - "@svgr/babel-preset" "^4.3.3" - "@svgr/hast-util-to-babel-ast" "^4.3.2" - svg-parser "^2.0.0" - -"@svgr/plugin-svgo@^4.3.1": - version "4.3.1" - resolved "https://registry.npmmirror.com/@svgr/plugin-svgo/download/@svgr/plugin-svgo-4.3.1.tgz#daac0a3d872e3f55935c6588dd370336865e9e32" - integrity sha1-2qwKPYcuP1WTXGWI3TcDNoZenjI= - dependencies: - cosmiconfig "^5.2.1" - merge-deep "^3.0.2" - svgo "^1.2.2" - -"@svgr/webpack@4.3.3": - version "4.3.3" - resolved "https://registry.npmmirror.com/@svgr/webpack/download/@svgr/webpack-4.3.3.tgz#13cc2423bf3dff2d494f16b17eb7eacb86895017" - integrity sha1-E8wkI789/y1JTxaxfrfqy4aJUBc= - dependencies: - "@babel/core" "^7.4.5" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.4.5" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^4.3.3" - "@svgr/plugin-jsx" "^4.3.3" - "@svgr/plugin-svgo" "^4.3.1" - loader-utils "^1.2.3" - -"@types/babel__core@^7.1.0": - version "7.1.18" - resolved "https://registry.npmmirror.com/@types/babel__core/download/@types/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmmirror.com/@types/babel__generator/download/@types/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmmirror.com/@types/babel__template/download/@types/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk= - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.npmmirror.com/@types/babel__traverse/download/@types/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha1-/81HC7s/i/MEgWePtVAieMqDOkM= - dependencies: - "@babel/types" "^7.3.0" - -"@types/classnames@^2.2.10": - version "2.3.1" - resolved "https://registry.npmmirror.com/@types/classnames/download/@types/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd" - integrity sha1-PCRnqg8ak/HwIeO5vPk4vV39wN0= - dependencies: - classnames "*" - -"@types/codemirror@^0.0.96": - version "0.0.96" - resolved "https://registry.npmmirror.com/@types/codemirror/download/@types/codemirror-0.0.96.tgz#73b52e784a246cebef31d544fef45ea764de5bad" - integrity sha1-c7UueEokbOvvMdVE/vRep2TeW60= - dependencies: - "@types/tern" "*" - -"@types/d3-array@^1": - version "1.2.9" - resolved "https://registry.npmmirror.com/@types/d3-array/download/@types/d3-array-1.2.9.tgz#c7dc78992cd8ca5c850243a265fd257ea56df1fa" - integrity sha1-x9x4mSzYylyFAkOiZf0lfqVt8fo= - -"@types/d3-axis@^1": - version "1.0.16" - resolved "https://registry.npmmirror.com/@types/d3-axis/download/@types/d3-axis-1.0.16.tgz#93d7a28795c2f8b0e2fd550fcc4d29b7f174e693" - integrity sha1-k9eih5XC+LDi/VUPzE0pt/F05pM= - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-brush@^1": - version "1.1.5" - resolved "https://registry.npmmirror.com/@types/d3-brush/download/@types/d3-brush-1.1.5.tgz#c7cfb58decbfd53ad3e47f0376345e3640a68186" - integrity sha1-x8+1jey/1TrT5H8DdjReNkCmgYY= - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-chord@^1": - version "1.0.11" - resolved "https://registry.npmmirror.com/@types/d3-chord/download/@types/d3-chord-1.0.11.tgz#5760765db1b1a4b936c0d9355a821dde9dd25da2" - integrity sha1-V2B2XbGxpLk2wNk1WoId3p3SXaI= - -"@types/d3-collection@*": - version "1.0.10" - resolved "https://registry.npmmirror.com/@types/d3-collection/download/@types/d3-collection-1.0.10.tgz#bca161e336156968f267c077f7f2bfa8ff224e58" - integrity sha1-vKFh4zYVaWjyZ8B39/K/qP8iTlg= - -"@types/d3-color@^1": - version "1.4.2" - resolved "https://registry.npmmirror.com/@types/d3-color/download/@types/d3-color-1.4.2.tgz#944f281d04a0f06e134ea96adbb68303515b2784" - integrity sha1-lE8oHQSg8G4TTqlq27aDA1FbJ4Q= - -"@types/d3-contour@^1": - version "1.3.3" - resolved "https://registry.npmmirror.com/@types/d3-contour/download/@types/d3-contour-1.3.3.tgz#44529d498bbc1db78b195d75e1c9bb889edd647a" - integrity sha1-RFKdSYu8HbeLGV114cm7iJ7dZHo= - dependencies: - "@types/d3-array" "^1" - "@types/geojson" "*" - -"@types/d3-dispatch@^1": - version "1.0.9" - resolved "https://registry.npmmirror.com/@types/d3-dispatch/download/@types/d3-dispatch-1.0.9.tgz#c5a180f1e251de853b399cfbfbb6dd7f8bf842ae" - integrity sha1-xaGA8eJR3oU7OZz7+7bdf4v4Qq4= - -"@types/d3-drag@^1": - version "1.2.5" - resolved "https://registry.npmmirror.com/@types/d3-drag/download/@types/d3-drag-1.2.5.tgz#0b1b852cb41577075aa625ae6149379ea6c34dfd" - integrity sha1-CxuFLLQVdwdapiWuYUk3nqbDTf0= - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-dsv@^1": - version "1.2.1" - resolved "https://registry.npmmirror.com/@types/d3-dsv/download/@types/d3-dsv-1.2.1.tgz#1524fee9f19d689c2f76aa0e24e230762bf96994" - integrity sha1-FST+6fGdaJwvdqoOJOIwdiv5aZQ= - -"@types/d3-ease@^1": - version "1.0.11" - resolved "https://registry.npmmirror.com/@types/d3-ease/download/@types/d3-ease-1.0.11.tgz#c4728639f5703dcb75b216dfa0860b2720f26898" - integrity sha512-wUigPL0kleGZ9u3RhzBP07lxxkMcUjL5IODP42mN/05UNL+JJCDnpEPpFbJiPvLcTeRKGIRpBBJyP/1BNwYsVA== - -"@types/d3-fetch@^1": - version "1.2.2" - resolved "https://registry.npmmirror.com/@types/d3-fetch/download/@types/d3-fetch-1.2.2.tgz#b93bfe248b8b761af82f4dac57959c989f67da3e" - integrity sha1-uTv+JIuLdhr4L02sV5WcmJ9n2j4= - dependencies: - "@types/d3-dsv" "^1" - -"@types/d3-force@^1": - version "1.2.4" - resolved "https://registry.npmmirror.com/@types/d3-force/download/@types/d3-force-1.2.4.tgz#6e274c72288c2db08fbdb8f5b87b9aa83e55a9e8" - integrity sha1-bidMciiMLbCPvbj1uHuaqD5Vqeg= - -"@types/d3-format@^1": - version "1.4.2" - resolved "https://registry.npmmirror.com/@types/d3-format/download/@types/d3-format-1.4.2.tgz#ea17bf559b71d9afd569ae9bfe4c544dab863baa" - integrity sha1-6he/VZtx2a/Vaa6b/kxUTauGO6o= - -"@types/d3-geo@^1": - version "1.12.3" - resolved "https://registry.npmmirror.com/@types/d3-geo/download/@types/d3-geo-1.12.3.tgz#512ebe735cb1cdf5f87ad59608416e2e9e868c5a" - integrity sha1-US6+c1yxzfX4etWWCEFuLp6GjFo= - dependencies: - "@types/geojson" "*" - -"@types/d3-hierarchy@^1": - version "1.1.8" - resolved "https://registry.npmmirror.com/@types/d3-hierarchy/download/@types/d3-hierarchy-1.1.8.tgz#50657f420d565a06c0b950a4b82eee0a369f2dea" - integrity sha1-UGV/Qg1WWgbAuVCkuC7uCjafLeo= - -"@types/d3-interpolate@^1": - version "1.4.2" - resolved "https://registry.npmmirror.com/@types/d3-interpolate/download/@types/d3-interpolate-1.4.2.tgz#88902a205f682773a517612299a44699285eed7b" - integrity sha1-iJAqIF9oJ3OlF2EimaRGmShe7Xs= - dependencies: - "@types/d3-color" "^1" - -"@types/d3-path@^1": - version "1.0.9" - resolved "https://registry.npmmirror.com/@types/d3-path/download/@types/d3-path-1.0.9.tgz#73526b150d14cd96e701597cbf346cfd1fd4a58c" - integrity sha1-c1JrFQ0UzZbnAVl8vzRs/R/UpYw= - -"@types/d3-polygon@^1": - version "1.0.8" - resolved "https://registry.npmmirror.com/@types/d3-polygon/download/@types/d3-polygon-1.0.8.tgz#127ee83fccda5bf57384011da90f31367fea1530" - integrity sha1-En7oP8zaW/VzhAEdqQ8xNn/qFTA= - -"@types/d3-quadtree@^1": - version "1.0.9" - resolved "https://registry.npmmirror.com/@types/d3-quadtree/download/@types/d3-quadtree-1.0.9.tgz#c7c3b795b5af06e5b043d1d34e754a434b3bae59" - integrity sha1-x8O3lbWvBuWwQ9HTTnVKQ0s7rlk= - -"@types/d3-random@^1": - version "1.1.3" - resolved "https://registry.npmmirror.com/@types/d3-random/download/@types/d3-random-1.1.3.tgz#8f7fdc23f92d1561e0694eb49567e8ab50537a19" - integrity sha1-j3/cI/ktFWHgaU60lWfoq1BTehk= - -"@types/d3-scale-chromatic@^1": - version "1.5.1" - resolved "https://registry.npmmirror.com/@types/d3-scale-chromatic/download/@types/d3-scale-chromatic-1.5.1.tgz#e2b7c3401e5c13809f831911eb820e444f4fc67a" - integrity sha1-4rfDQB5cE4CfgxkR64IORE9Pxno= - -"@types/d3-scale@^2": - version "2.2.6" - resolved "https://registry.npmmirror.com/@types/d3-scale/download/@types/d3-scale-2.2.6.tgz#28540b4dfc99d978970e873e4138a6bea2ea6ab8" - integrity sha1-KFQLTfyZ2XiXDoc+QTimvqLqarg= - dependencies: - "@types/d3-time" "^1" - -"@types/d3-selection@^1": - version "1.4.3" - resolved "https://registry.npmmirror.com/@types/d3-selection/download/@types/d3-selection-1.4.3.tgz#36928bbe64eb8e0bbcbaa01fb05c21ff6c71fa93" - integrity sha1-NpKLvmTrjgu8uqAfsFwh/2xx+pM= - -"@types/d3-shape@^1": - version "1.3.8" - resolved "https://registry.npmmirror.com/@types/d3-shape/download/@types/d3-shape-1.3.8.tgz#c3c15ec7436b4ce24e38de517586850f1fea8e89" - integrity sha1-w8Fex0NrTOJOON5RdYaFDx/qjok= - dependencies: - "@types/d3-path" "^1" - -"@types/d3-time-format@^2": - version "2.3.1" - resolved "https://registry.npmmirror.com/@types/d3-time-format/download/@types/d3-time-format-2.3.1.tgz#87a30e4513b9d1d53b920327a361f87255bf3372" - integrity sha1-h6MORRO50dU7kgMno2H4clW/M3I= - -"@types/d3-time@^1": - version "1.1.1" - resolved "https://registry.npmmirror.com/@types/d3-time/download/@types/d3-time-1.1.1.tgz#6cf3a4242c3bbac00440dfb8ba7884f16bedfcbf" - integrity sha1-bPOkJCw7usAEQN+4uniE8Wvt/L8= - -"@types/d3-timer@^1": - version "1.0.10" - resolved "https://registry.npmmirror.com/@types/d3-timer/download/@types/d3-timer-1.0.10.tgz#329c51c2c931f44ed0acff78b8c84571acf0ed21" - integrity sha1-MpxRwskx9E7QrP94uMhFcazw7SE= - -"@types/d3-transition@^1": - version "1.3.2" - resolved "https://registry.npmmirror.com/@types/d3-transition/download/@types/d3-transition-1.3.2.tgz#ed59beca7b4d679cfa52f88a6a50e5bbeb7e0a3c" - integrity sha1-7Vm+yntNZ5z6UviKalDlu+t+Cjw= - dependencies: - "@types/d3-selection" "^1" - -"@types/d3-voronoi@*": - version "1.1.9" - resolved "https://registry.npmmirror.com/@types/d3-voronoi/download/@types/d3-voronoi-1.1.9.tgz#7bbc210818a3a5c5e0bafb051420df206617c9e5" - integrity sha1-e7whCBijpcXguvsFFCDfIGYXyeU= - -"@types/d3-zoom@^1": - version "1.8.3" - resolved "https://registry.npmmirror.com/@types/d3-zoom/download/@types/d3-zoom-1.8.3.tgz#00237900c6fdc2bb4fe82679ee4d74eb8fbe7b3c" - integrity sha1-ACN5AMb9wrtP6CZ57k1064++ezw= - dependencies: - "@types/d3-interpolate" "^1" - "@types/d3-selection" "^1" - -"@types/d3@^5.7.2": - version "5.16.4" - resolved "https://registry.npmmirror.com/@types/d3/download/@types/d3-5.16.4.tgz#a7dc24a3dc1c19922eee72ba16144fd5bcea987a" - integrity sha1-p9wko9wcGZIu7nK6FhRP1bzqmHo= - dependencies: - "@types/d3-array" "^1" - "@types/d3-axis" "^1" - "@types/d3-brush" "^1" - "@types/d3-chord" "^1" - "@types/d3-collection" "*" - "@types/d3-color" "^1" - "@types/d3-contour" "^1" - "@types/d3-dispatch" "^1" - "@types/d3-drag" "^1" - "@types/d3-dsv" "^1" - "@types/d3-ease" "^1" - "@types/d3-fetch" "^1" - "@types/d3-force" "^1" - "@types/d3-format" "^1" - "@types/d3-geo" "^1" - "@types/d3-hierarchy" "^1" - "@types/d3-interpolate" "^1" - "@types/d3-path" "^1" - "@types/d3-polygon" "^1" - "@types/d3-quadtree" "^1" - "@types/d3-random" "^1" - "@types/d3-scale" "^2" - "@types/d3-scale-chromatic" "^1" - "@types/d3-selection" "^1" - "@types/d3-shape" "^1" - "@types/d3-time" "^1" - "@types/d3-time-format" "^2" - "@types/d3-timer" "^1" - "@types/d3-transition" "^1" - "@types/d3-voronoi" "*" - "@types/d3-zoom" "^1" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.npmmirror.com/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0= - -"@types/estree@*": - version "0.0.50" - resolved "https://registry.npmmirror.com/@types/estree/download/@types/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM= - -"@types/file-saver@^2.0.1": - version "2.0.5" - resolved "https://registry.npmmirror.com/@types/file-saver/download/@types/file-saver-2.0.5.tgz#9ee342a5d1314bb0928375424a2f162f97c310c7" - integrity sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ== - -"@types/geojson@*": - version "7946.0.8" - resolved "https://registry.npmmirror.com/@types/geojson/download/@types/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" - integrity sha1-MHRK/bOF4pReIvOwM/iX92sfEso= - -"@types/glob@^7.1.1": - version "7.2.0" - resolved "https://registry.npmmirror.com/@types/glob/download/@types/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha1-vBtb86qS8lvV3TnzXFc2G9zlsus= - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/hoist-non-react-statics@^3.3.1": - version "3.3.1" - resolved "https://registry.npmmirror.com/@types/hoist-non-react-statics/download/@types/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" - integrity sha1-ESSq/lEYy1kZd66xzqrtEHDrA58= - dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz?cache=0&sync_timestamp=1637266271645&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fistanbul-lib-report%2Fdownload%2F%40types%2Fistanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY= - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.npmmirror.com/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha1-6HXMaJ5HvOVJ7IHz315vbxHPrrI= - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - -"@types/jest-diff@*": - version "24.3.0" - resolved "https://registry.npmmirror.com/@types/jest-diff/download/@types/jest-diff-24.3.0.tgz#29e237a3d954babfe6e23cc59b57ecd8ca8d858d" - integrity sha1-KeI3o9lUur/m4jzFm1fs2MqNhY0= - dependencies: - jest-diff "*" - -"@types/jest@24.0.15": - version "24.0.15" - resolved "https://registry.npmmirror.com/@types/jest/download/@types/jest-24.0.15.tgz#6c42d5af7fe3b44ffff7cc65de7bf741e8fa427f" - integrity sha1-bELVr3/jtE//98xl3nv3Qej6Qn8= - dependencies: - "@types/jest-diff" "*" - -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": - version "7.0.9" - resolved "https://registry.npmmirror.com/@types/json-schema/download/@types/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha1-l+3JA36gw4WFMgsolk3eOznkZg0= - -"@types/lodash-es@^4.17.3": - version "4.17.5" - resolved "https://registry.npmmirror.com/@types/lodash-es/download/@types/lodash-es-4.17.5.tgz#1c3fdd16849d84aea43890b1c60da379fb501353" - integrity sha1-HD/dFoSdhK6kOJCxxg2jeftQE1M= - dependencies: - "@types/lodash" "*" - -"@types/lodash@*": - version "4.14.178" - resolved "https://registry.npmmirror.com/@types/lodash/download/@types/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" - integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== - -"@types/mdast@^3.0.0": - version "3.0.10" - resolved "https://registry.npmmirror.com/@types/mdast/download/@types/mdast-3.0.10.tgz?cache=0&sync_timestamp=1637267171178&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fmdast%2Fdownload%2F%40types%2Fmdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" - integrity sha1-RyQkSoKkWYiEy76bz9c9/5J+6K8= - dependencies: - "@types/unist" "*" - -"@types/minimatch@*": - version "3.0.5" - resolved "https://registry.npmmirror.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1637267467935&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" - integrity sha1-EAHMXmo3BLg8I2An538vWOoBD0A= - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.npmmirror.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1637267478331&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w= - -"@types/node@*": - version "17.0.13" - resolved "https://registry.npmmirror.com/@types/node/download/@types/node-17.0.13.tgz#5ed7ed7c662948335fcad6c412bb42d99ea754e3" - integrity sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw== - -"@types/node@14.11.8": - version "14.11.8" - resolved "https://registry.npmmirror.com/@types/node/download/@types/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f" - integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.npmmirror.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1637268963320&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE= - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.npmmirror.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= - -"@types/prop-types@*": - version "15.7.4" - resolved "https://registry.npmmirror.com/@types/prop-types/download/@types/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha1-/PcgXCXf95Xuea8eMNosl5CAjxE= - -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.npmmirror.com/@types/q/download/@types/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - -"@types/react-dom@16.9.8": - version "16.9.8" - resolved "https://registry.npmmirror.com/@types/react-dom/download/@types/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" - integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== - dependencies: - "@types/react" "*" - -"@types/react-highlight-words@^0.16.1": - version "0.16.4" - resolved "https://registry.npmmirror.com/@types/react-highlight-words/download/@types/react-highlight-words-0.16.4.tgz#441b6f05c27ce6ab76833803a84bc385f0a1e8f2" - integrity sha512-KITBX3xzheQLu2s3bUgLmRE7ekmhc52zRjRTwkKayQARh30L4fjEGzGm7ULK9TuX2LgxWWavZqyQGDGjAHbL3w== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "17.0.38" - resolved "https://registry.npmmirror.com/@types/react/download/@types/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" - integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@16.9.52": - version "16.9.52" - resolved "https://registry.npmmirror.com/@types/react/download/@types/react-16.9.52.tgz#c46c72d1a1d8d9d666f4dd2066c0e22600ccfde1" - integrity sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q== - dependencies: - "@types/prop-types" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.npmmirror.com/@types/scheduler/download/@types/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk= - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.npmmirror.com/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4= - -"@types/tern@*": - version "0.23.4" - resolved "https://registry.npmmirror.com/@types/tern/download/@types/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" - integrity sha1-A5JusT2+rzrg05DK9wayZDoBJ/s= - dependencies: - "@types/estree" "*" - -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.6" - resolved "https://registry.npmmirror.com/@types/unist/download/@types/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha1-JQp7FsO5H2cqJFUuxkZ47rHToI0= - -"@types/uuid@^8.3.0": - version "8.3.4" - resolved "https://registry.npmmirror.com/@types/uuid/download/@types/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" - integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== - -"@types/validator@^13.1.0": - version "13.7.1" - resolved "https://registry.npmmirror.com/@types/validator/download/@types/validator-13.7.1.tgz#cdab1b4779f6b1718a08de89d92d2603b71950cb" - integrity sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q== - -"@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.npmmirror.com/@types/yargs-parser/download/@types/yargs-parser-20.2.1.tgz?cache=0&sync_timestamp=1637271401361&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha1-O5ziSJkZ2eT+pDm3aRarw0st8Sk= - -"@types/yargs@^13.0.0": - version "13.0.12" - resolved "https://registry.npmmirror.com/@types/yargs/download/@types/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" - integrity sha1-2JWojHA7eK8EZaneiKqSxhQwsJI= - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^2.10.0": - version "2.34.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha1-b4zopGx96kpvHRcdK7j7rm2sK+k= - dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha1-01JLZEzbQO687KZ/jPPkzJyPmA8= - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^2.10.0": - version "2.34.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/parser/download/@typescript-eslint/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha1-UCUmMMoxloVCDpo5ygX+GFola8g= - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha1-FK62NTs57wcyzH8bgoUpSTfPN9U= - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k= - dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha1-G6kmopI2E+3OSW/VsC6M6KX0lyE= - -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha1-xJ2tIvZFInxe22EL25aX8aq3Ifc= - -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha1-/qk+Qphj3V5DOFVfQikjhaZT8gQ= - -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.8.5.tgz?cache=0&sync_timestamp=1625473466896&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha1-mnQP9I4/qjAisd/1RCPfmqKTwl4= - dependencies: - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha1-ugt9Oz9+RzPaYFnJMyJ12GBwJFI= - -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha1-3vS5knsBAdyMu9jR7bW3ucguskU= - dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" - -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha1-U3p1Dt31weky83RCBlUckcG5PmE= - -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha1-dMpqa8vhnlCjtrRihH5pUD5r/L8= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - -"@webassemblyjs/ieee754@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha1-cSMp2+8kDza/V70ve4+5v0FUQh4= - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha1-BE7es06mefPgTNT9mCTV41dnrhA= - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha1-qL87XY/+mGx8Hjc8y9wqCRXwztw= - -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha1-li2hKqWswcExyBxCMpkcgs5W4Bo= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/helper-wasm-section" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-opt" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - "@webassemblyjs/wast-printer" "1.8.5" - -"@webassemblyjs/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha1-VIQHZsLBAC62TtGr5yCt7XFPmLw= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wasm-opt@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha1-sk2fa6UDlK8TSfUQr6j/y4pj0mQ= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-buffer" "1.8.5" - "@webassemblyjs/wasm-gen" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - -"@webassemblyjs/wasm-parser@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha1-IVdvDsiLkUJzV7hTY4NmjvfGa40= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/ieee754" "1.8.5" - "@webassemblyjs/leb128" "1.8.5" - "@webassemblyjs/utf8" "1.8.5" - -"@webassemblyjs/wast-parser@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha1-4Q7s1ULQ5705T2gnxJ899tTu+4w= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/floating-point-hex-parser" "1.8.5" - "@webassemblyjs/helper-api-error" "1.8.5" - "@webassemblyjs/helper-code-frame" "1.8.5" - "@webassemblyjs/helper-fsm" "1.8.5" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.8.5": - version "1.8.5" - resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha1-EUu8SB/RDKDiOzVg+oEnSLC65bw= - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmmirror.com/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmmirror.com/@xtuc/long/download/@xtuc/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0= - -abab@^2.0.0: - version "2.0.5" - resolved "https://registry.npmmirror.com/abab/download/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o= - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-globals@^4.1.0, acorn-globals@^4.3.0: - version "4.3.4" - resolved "https://registry.npmmirror.com/acorn-globals/download/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha1-n6GSat3BHJcwjE5m163Q1Awycuc= - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.2.0: - version "5.3.2" - resolved "https://registry.npmmirror.com/acorn-jsx/download/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.npmmirror.com/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha1-Ejy487hMIXHx9/slJhWxx4prGow= - -acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.npmmirror.com/acorn/download/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1: - version "6.4.2" - resolved "https://registry.npmmirror.com/acorn/download/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/address/download/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY= - -adjust-sourcemap-loader@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/adjust-sourcemap-loader/download/adjust-sourcemap-loader-2.0.0.tgz#6471143af75ec02334b219f54bc7970c52fb29a4" - integrity sha1-ZHEUOvdewCM0shn1S8eXDFL7KaQ= - dependencies: - assert "1.4.1" - camelcase "5.0.0" - loader-utils "1.2.3" - object-path "0.11.4" - regex-parser "2.2.10" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/aggregate-error/download/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0= - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmmirror.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0= - -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.9.0" - resolved "https://registry.npmmirror.com/ajv/download/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" - integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.npmmirror.com/ansi-colors/download/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha1-46PaS/uubIapwoViXeEkojQCb78= - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmmirror.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4= - dependencies: - type-fest "^0.21.3" - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.npmmirror.com/ansi-html/download/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= - -ansi-regex@^5.0.0, ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -antd@^4.18.5: - version "4.18.5" - resolved "https://registry.npmmirror.com/antd/download/antd-4.18.5.tgz#e5ffbe238fd6fdfcd1ed39ba96e4b1bd5f589757" - integrity sha512-5fN3C2lWAzonhOYYlNpzIw2OHl7vxFZ+4cJ7DK/XZrV+75OY61Y+OkanqMJwrFtDDamIez35OM7cAezGko9tew== - dependencies: - "@ant-design/colors" "^6.0.0" - "@ant-design/icons" "^4.7.0" - "@ant-design/react-slick" "~0.28.1" - "@babel/runtime" "^7.12.5" - "@ctrl/tinycolor" "^3.4.0" - classnames "^2.2.6" - copy-to-clipboard "^3.2.0" - lodash "^4.17.21" - memoize-one "^6.0.0" - moment "^2.25.3" - rc-cascader "~3.2.1" - rc-checkbox "~2.3.0" - rc-collapse "~3.1.0" - rc-dialog "~8.6.0" - rc-drawer "~4.4.2" - rc-dropdown "~3.2.0" - rc-field-form "~1.22.0-2" - rc-image "~5.2.5" - rc-input-number "~7.3.0" - rc-mentions "~1.6.1" - rc-menu "~9.2.1" - rc-motion "^2.4.4" - rc-notification "~4.5.7" - rc-pagination "~3.1.9" - rc-picker "~2.5.17" - rc-progress "~3.2.1" - rc-rate "~2.9.0" - rc-resize-observer "^1.2.0" - rc-select "~14.0.0-alpha.15" - rc-slider "~9.7.4" - rc-steps "~4.1.0" - rc-switch "~3.2.0" - rc-table "~7.22.2" - rc-tabs "~11.10.0" - rc-textarea "~0.3.0" - rc-tooltip "~5.1.1" - rc-tree "~5.4.3" - rc-tree-select "~5.1.1" - rc-trigger "^5.2.10" - rc-upload "~4.3.0" - rc-util "^5.14.0" - scroll-into-view-if-needed "^2.2.25" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/anymatch/download/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.npmmirror.com/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmmirror.com/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= - dependencies: - sprintf-js "~1.0.2" - -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/aria-query/download/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arity-n@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/arity-n/download/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" - integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.npmmirror.com/array-flatten/download/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk= - -array-includes@^3.0.3, array-includes@^3.1.1: - version "3.1.4" - resolved "https://registry.npmmirror.com/array-includes/download/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha1-9bSTFix2DzU5Yx8AW6K7Rqy0W6k= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - is-string "^1.0.7" - -array-tree-filter@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/array-tree-filter/download/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" - integrity sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA= - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.npmmirror.com/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.npmmirror.com/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.1: - version "1.2.5" - resolved "https://registry.npmmirror.com/array.prototype.flat/download/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha1-B+CXXYS7x8SM0YedYJ5oJZjTPhM= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asap@~2.0.3, asap@~2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.npmmirror.com/asn1.js/download/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.npmmirror.com/asn1/download/asn1-0.2.6.tgz?cache=0&sync_timestamp=1635986760581&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasn1%2Fdownload%2Fasn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0= - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@1.4.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/assert/download/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= - dependencies: - util "0.10.3" - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.npmmirror.com/assert/download/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.npmmirror.com/ast-types-flow/download/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/astral-regex/download/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha1-SDFDxWeu7UeFdZwIZXhtx319LjE= - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.npmmirror.com/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8= - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= - -async-validator@^4.0.2: - version "4.0.7" - resolved "https://registry.npmmirror.com/async-validator/download/async-validator-4.0.7.tgz?cache=0&sync_timestamp=1634529502627&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-validator%2Fdownload%2Fasync-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe" - integrity sha1-A0oP0hA6ay6/AQ2nUYO+wpkkev4= - -async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= - -autoprefixer@^9.6.1, autoprefixer@^9.8.6: - version "9.8.8" - resolved "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" - integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - picocolors "^0.2.1" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.npmmirror.com/aws4/download/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk= - -axios@^0.19.0: - version "0.19.2" - resolved "https://registry.npmmirror.com/axios/download/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -axobject-query@^2.0.2: - version "2.2.0" - resolved "https://registry.npmmirror.com/axobject-query/download/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha1-lD1H4QwLcEqkInXiDt83ImSJib4= - -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.npmmirror.com/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-eslint@10.1.0: - version "10.1.0" - resolved "https://registry.npmmirror.com/babel-eslint/download/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI= - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-extract-comments@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/babel-extract-comments/download/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" - integrity sha1-Cirt+BQX7TkbheGLRhTmk6A1GiE= - dependencies: - babylon "^6.18.0" - -babel-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/babel-jest/download/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" - integrity sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ= - dependencies: - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.9.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-loader@8.1.0: - version "8.1.0" - resolved "https://registry.npmmirror.com/babel-loader/download/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== - dependencies: - find-cache-dir "^2.1.0" - loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" - schema-utils "^2.6.5" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha1-hP2hnJduxcbe/vV/lCez3vZuF6M= - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha1-30reg9iXqS3wacTZolzyZxKTyFQ= - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha1-T4NwketAfgFEfIhDy+xUbQAC11Y= - dependencies: - "@types/babel__traverse" "^7.0.6" - -babel-plugin-macros@2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/babel-plugin-macros/download/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" - integrity sha1-D5WKfMZVax5lNERl2ZERoeXhATg= - dependencies: - "@babel/runtime" "^7.7.2" - cosmiconfig "^6.0.0" - resolve "^1.12.0" - -babel-plugin-named-asset-import@^0.3.6: - version "0.3.8" - resolved "https://registry.npmmirror.com/babel-plugin-named-asset-import/download/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" - integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== - -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.1" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" - integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.20.0" - -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - -babel-plugin-syntax-object-rest-spread@^6.8.0: - version "6.13.0" - resolved "https://registry.npmmirror.com/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-transform-object-rest-spread@^6.26.0: - version "6.26.0" - resolved "https://registry.npmmirror.com/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz?cache=0&sync_timestamp=1624608042865&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-transform-object-rest-spread%2Fdownload%2Fbabel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" - integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= - dependencies: - babel-plugin-syntax-object-rest-spread "^6.8.0" - babel-runtime "^6.26.0" - -babel-plugin-transform-react-remove-prop-types@0.4.24: - version "0.4.24" - resolved "https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/download/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" - integrity sha1-8u2vm0xqX75cHWeL+1MQeMFVXzo= - -babel-preset-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/babel-preset-jest/download/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha1-GStSHiIX+x0fZ89z9wwzZlCtPNw= - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" - -babel-preset-react-app@^9.1.2: - version "9.1.2" - resolved "https://registry.npmmirror.com/babel-preset-react-app/download/babel-preset-react-app-9.1.2.tgz#54775d976588a8a6d1a99201a702befecaf48030" - integrity sha1-VHddl2WIqKbRqZIBpwK+/sr0gDA= - dependencies: - "@babel/core" "7.9.0" - "@babel/plugin-proposal-class-properties" "7.8.3" - "@babel/plugin-proposal-decorators" "7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "7.8.3" - "@babel/plugin-proposal-numeric-separator" "7.8.3" - "@babel/plugin-proposal-optional-chaining" "7.9.0" - "@babel/plugin-transform-flow-strip-types" "7.9.0" - "@babel/plugin-transform-react-display-name" "7.8.3" - "@babel/plugin-transform-runtime" "7.9.0" - "@babel/preset-env" "7.9.0" - "@babel/preset-react" "7.9.1" - "@babel/preset-typescript" "7.9.0" - "@babel/runtime" "7.9.0" - babel-plugin-macros "2.8.0" - babel-plugin-transform-react-remove-prop-types "0.4.24" - -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.npmmirror.com/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.npmmirror.com/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM= - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.npmmirror.com/bail/download/bail-1.0.5.tgz?cache=0&sync_timestamp=1636274807479&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbail%2Fdownload%2Fbail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y= - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/balanced-match/download/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= - -balanced-match@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/balanced-match/download/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" - integrity sha1-3HD5INeNuLhYU1eVhnv0j4IGM9k= - -base16@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/base16/download/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" - integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= - -base64-js@^1.0.2: - version "1.5.1" - resolved "https://registry.npmmirror.com/base64-js/download/base64-js-1.5.1.tgz?cache=0&sync_timestamp=1624607950711&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbase64-js%2Fdownload%2Fbase64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.npmmirror.com/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/batch/download/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmmirror.com/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.npmmirror.com/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/binary-extensions/download/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha1-EDU8npRTNLwFEabZCzj7x8nFBN8= - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.npmmirror.com/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmmirror.com/bn.js/download/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og= - -bn.js@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/bn.js/download/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI= - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.npmmirror.com/bonjour/download/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmmirror.com/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.npmmirror.com/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY= - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.npmmirror.com/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY= - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.npmmirror.com/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha1-Mmc0ZC9APavDADIJhTu3CtQo70g= - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/browserify-cipher/download/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha1-jWR0wbhwv9q807z8wZNKEOlPFfA= - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/browserify-des/download/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw= - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/browserify-rsa/download/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0= - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" - integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== - dependencies: - bn.js "^5.2.1" - browserify-rsa "^4.1.0" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.4" - inherits "^2.0.4" - parse-asn1 "^5.1.6" - readable-stream "^3.6.2" - safe-buffer "^5.2.1" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/browserify-zlib/download/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha1-KGlFnZqjviRf6P4sofRuLn9U1z8= - dependencies: - pako "~1.0.5" - -browserslist@4.10.0: - version "4.10.0" - resolved "https://registry.npmmirror.com/browserslist/download/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" - integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== - dependencies: - caniuse-lite "^1.0.30001035" - electron-to-chromium "^1.3.378" - node-releases "^1.1.52" - pkg-up "^3.1.0" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1: - version "4.19.1" - resolved "https://registry.npmmirror.com/browserslist/download/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== - dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU= - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/buffer-indexof/download/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow= - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.npmmirror.com/buffer/download/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.npmmirror.com/cacache/download/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw= - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.npmmirror.com/cacache/download/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw= - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/cache-base/download/cache-base-1.0.1.tgz?cache=0&sync_timestamp=1636237308360&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/call-bind/download/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/call-me-maybe/download/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1633674944097&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= - -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.npmmirror.com/camel-case/download/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha1-lygHKpVPgFIoIlpt7qazhGHhvVo= - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.npmmirror.com/camelcase-keys/download/camelcase-keys-6.2.2.tgz?cache=0&sync_timestamp=1633332938539&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A= - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/camelcase/download/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/caniuse-api/download/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA= - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001286: - version "1.0.30001303" - resolved "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001303.tgz#9b168e4f43ccfc372b86f4bc5a551d9b909c95c9" - integrity sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha1-+5U7+uvreB9iiYI52rtCbQilCaQ= - dependencies: - rsvp "^4.8.4" - -case-sensitive-paths-webpack-plugin@2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" - integrity sha1-I6xhPMmoVuT4j/i7c7u16YmCXPc= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.npmmirror.com/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/download/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.npmmirror.com/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha1-lLwYRdznClu50uzHSHJWYSk9j8E= - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.npmmirror.com/character-entities/download/character-entities-1.2.4.tgz?cache=0&sync_timestamp=1635868846406&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-entities%2Fdownload%2Fcharacter-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha1-4Sw5Obfq9OWxXnrUxeKOHUjFsWs= - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.npmmirror.com/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&sync_timestamp=1636446259053&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA= - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1634639163489&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.npmmirror.com/chokidar/download/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.3.0, chokidar@^3.4.1: - version "3.5.3" - resolved "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1, chownr@^1.1.2: - version "1.1.4" - resolved "https://registry.npmmirror.com/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs= - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw= - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y= - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/cipher-base/download/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.npmmirror.com/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@*, classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: - version "2.3.1" - resolved "https://registry.npmmirror.com/classnames/download/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -clean-css@^4.2.3: - version "4.2.4" - resolved "https://registry.npmmirror.com/clean-css/download/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" - integrity sha1-czv0brpOYHxokepXwkqYk1aDEXg= - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= - dependencies: - restore-cursor "^3.1.0" - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha1-sEM9C06chH7xiGik7xb9X8gnHEg= - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha1-NIQi2+gtgAswIu709qwQvy5NG0k= - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone-deep@^0.2.4: - version "0.2.4" - resolved "https://registry.npmmirror.com/clone-deep/download/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" - integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY= - dependencies: - for-own "^0.1.3" - is-plain-object "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" - shallow-clone "^0.1.2" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/clone-deep/download/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c= - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clone-regexp@^2.1.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/clone-regexp/download/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" - integrity sha1-fWXgCIXNh5ZAXDWnN+eoa3Qp428= - dependencies: - is-regexp "^2.0.0" - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.npmmirror.com/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/coa/download/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM= - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -codemirror@^5.55.0: - version "5.65.1" - resolved "https://registry.npmmirror.com/codemirror/download/codemirror-5.65.1.tgz#5988a812c974c467f964bcc1a00c944e373de502" - integrity sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= - -color-string@^1.6.0: - version "1.9.0" - resolved "https://registry.npmmirror.com/color-string/download/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" - integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.2.1" - resolved "https://registry.npmmirror.com/color/download/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.npmmirror.com/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= - dependencies: - delayed-stream "~1.0.0" - -commander@^2.11.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/commander/download/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.npmmirror.com/common-tags/download/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.npmmirror.com/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= - -compose-function@3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/compose-function/download/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" - integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= - dependencies: - arity-n "^1.0.4" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmmirror.com/compressible/download/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o= - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmmirror.com/compression/download/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48= - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -compute-scroll-into-view@^1.0.17: - version "1.0.17" - resolved "https://registry.npmmirror.com/compute-scroll-into-view/download/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" - integrity sha1-aojxis2dQunPS6pr7H4FImB6t6s= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.npmmirror.com/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -confusing-browser-globals@^1.0.9: - version "1.0.11" - resolved "https://registry.npmmirror.com/confusing-browser-globals/download/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" - integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w= - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/console-browserify/download/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha1-ZwY871fOts9Jk6KrOlWECujEkzY= - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/contains-path/download/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@1.7.0: - version "1.7.0" - resolved "https://registry.npmmirror.com/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^0.3.3: - version "0.3.5" - resolved "https://registry.npmmirror.com/convert-source-map/download/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" - integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= - -convert-source-map@^1.4.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmmirror.com/convert-source-map/download/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k= - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -copy-anything@^2.0.1: - version "2.0.6" - resolved "https://registry.npmmirror.com/copy-anything/download/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" - integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== - dependencies: - is-what "^3.14.1" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.npmmirror.com/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.npmmirror.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-to-clipboard@^3.2.0: - version "3.3.1" - resolved "https://registry.npmmirror.com/copy-to-clipboard/download/copy-to-clipboard-3.3.1.tgz?cache=0&sync_timestamp=1624607975240&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcopy-to-clipboard%2Fdownload%2Fcopy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" - integrity sha1-EVqhqZmP+rYZb5MHatbaO5E2Yq4= - dependencies: - toggle-selection "^1.0.6" - -core-js-compat@^3.20.0, core-js-compat@^3.20.2, core-js-compat@^3.6.2: - version "3.20.3" - resolved "https://registry.npmmirror.com/core-js-compat/download/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" - integrity sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw== - dependencies: - browserslist "^4.19.1" - semver "7.0.0" - -core-js-pure@^3.20.2: - version "3.20.3" - resolved "https://registry.npmmirror.com/core-js-pure/download/core-js-pure-3.20.3.tgz#6cc4f36da06c61d95254efc54024fe4797fd5d02" - integrity sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA== - -core-js@^2.4.0: - version "2.6.12" - resolved "https://registry.npmmirror.com/core-js/download/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-js@^3.5.0: - version "3.20.3" - resolved "https://registry.npmmirror.com/core-js/download/core-js-3.20.3.tgz#c710d0a676e684522f3db4ee84e5e18a9d11d69a" - integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmmirror.com/core-util-is/download/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U= - -cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" - integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha1-cU11ZSLKzoZ4Z8y0R0xdAbuuXW0= - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.npmmirror.com/create-ecdh/download/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4= - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/create-hash/download/create-hash-1.2.0.tgz?cache=0&sync_timestamp=1624607951398&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcreate-hash%2Fdownload%2Fcreate-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY= - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.npmmirror.com/create-hmac/download/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8= - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-fetch@^3.0.4: - version "3.1.5" - resolved "https://registry.npmmirror.com/cross-fetch/download/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== - dependencies: - node-fetch "2.6.7" - -cross-spawn@7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/cross-spawn/download/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha1-CrVihuD3wk4VPQTMKqAn5DqaXRQ= - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.npmmirror.com/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.npmmirror.com/crypto-browserify/download/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha1-OWz58xN/A+S45TLFj2mCVOAPgOw= - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-blank-pseudo@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/css-blank-pseudo/download/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" - integrity sha1-3979MlS/ioICeZNnTM81SDv8s8U= - dependencies: - postcss "^7.0.5" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.npmmirror.com/css-color-names/download/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha1-wZiUD2OnbX42wecQGLABchBUyyI= - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-has-pseudo@^0.10.0: - version "0.10.0" - resolved "https://registry.npmmirror.com/css-has-pseudo/download/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" - integrity sha1-PGQqs0yiQsWcQaEl35EFhB9pZu4= - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^5.0.0-rc.4" - -css-loader@3.4.2: - version "3.4.2" - resolved "https://registry.npmmirror.com/css-loader/download/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" - integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.23" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.1.1" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.2" - schema-utils "^2.6.0" - -css-prefers-color-scheme@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/css-prefers-color-scheme/download/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" - integrity sha1-b4MKJxQZnU8NDQu4onkW7WXP8fQ= - dependencies: - postcss "^7.0.5" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc= - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/css-select/download/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8= - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-select@^4.1.3: - version "4.2.1" - resolved "https://registry.npmmirror.com/css-select/download/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" - integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== - dependencies: - boolbase "^1.0.0" - css-what "^5.1.0" - domhandler "^4.3.0" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.npmmirror.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha1-mL69YsTB2flg7DQM+fdSLjBwmiI= - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@^1.1.2: - version "1.1.3" - resolved "https://registry.npmmirror.com/css-tree/download/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0= - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.npmmirror.com/css-what/download/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ= - -css-what@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/css-what/download/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" - integrity sha1-P3tweq32M7r2LCzrhXm1RbtA9/4= - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.npmmirror.com/css/download/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk= - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssdb@^4.4.0: - version "4.4.0" - resolved "https://registry.npmmirror.com/cssdb/download/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" - integrity sha1-O/LypowQ9cagir2SN4Mx7oA83bA= - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/cssesc/download/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM= - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/cssesc/download/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= - -cssnano-preset-default@^4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" - integrity sha1-kgYisfwelaNOiDggPxOXpQTy0/8= - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.3" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI= - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.npmmirror.com/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M= - -cssnano@^4.1.10: - version "4.1.11" - resolved "https://registry.npmmirror.com/cssnano/download/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" - integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.8" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.2.0" - resolved "https://registry.npmmirror.com/csso/download/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: - version "0.3.8" - resolved "https://registry.npmmirror.com/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o= - -cssstyle@^1.0.0, cssstyle@^1.1.1: - version "1.4.0" - resolved "https://registry.npmmirror.com/cssstyle/download/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha1-nTEyginTxWXGHlhrAgQaKPzNzPE= - dependencies: - cssom "0.3.x" - -csstype@^3.0.2: - version "3.0.10" - resolved "https://registry.npmmirror.com/csstype/download/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== - -customize-cra@^0.9.1: - version "0.9.1" - resolved "https://registry.npmmirror.com/customize-cra/download/customize-cra-0.9.1.tgz#76b42c4f537c16329eccc09cfefd804d04c81550" - integrity sha1-drQsT1N8FjKezMCc/v2ATQTIFVA= - dependencies: - lodash.flow "^3.5.0" - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/d/download/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -damerau-levenshtein@^1.0.4: - version "1.0.8" - resolved "https://registry.npmmirror.com/damerau-levenshtein/download/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" - integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.npmmirror.com/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0, data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/data-urls/download/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4= - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -date-fns@2.x: - version "2.28.0" - resolved "https://registry.npmmirror.com/date-fns/download/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== - -dayjs@1.x: - version "1.10.7" - resolved "https://registry.npmmirror.com/dayjs/download/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.1.1, debug@^3.2.5, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.npmmirror.com/debug/download/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -deep-equal@^1.0.1, deep-equal@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/deep-equal/download/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o= - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.npmmirror.com/deep-is/download/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE= - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/default-gateway/download/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs= - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/del/download/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/des.js/download/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM= - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.npmmirror.com/detect-node/download/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha1-yccHdaScPQO8LAbZpzvlUPl4+LE= - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.npmmirror.com/detect-port-alt/download/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha1-JHB96r6TLUo89iEwICfCsmZWgnU= - dependencies: - address "^1.0.1" - debug "^2.6.0" - -diff-sequences@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/diff-sequences/download/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" - integrity sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU= - -diff-sequences@^27.4.0: - version "27.4.0" - resolved "https://registry.npmmirror.com/diff-sequences/download/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" - integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.npmmirror.com/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha1-QOjumPVaIUlgcUaSHGPhrl89KHU= - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/dir-glob/download/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - integrity sha1-CyBdK2rvmCOMooZZioIE0p0KADQ= - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= - dependencies: - path-type "^4.0.0" - -dnd-core@^11.1.3: - version "11.1.3" - resolved "https://registry.npmmirror.com/dnd-core/download/dnd-core-11.1.3.tgz#f92099ba7245e49729d2433157031a6267afcc98" - integrity sha1-+SCZunJF5Jcp0kMxVwMaYmevzJg= - dependencies: - "@react-dnd/asap" "^4.0.0" - "@react-dnd/invariant" "^2.0.0" - redux "^4.0.4" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/dns-equal/download/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.npmmirror.com/dns-packet/download/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" - integrity sha1-40VQZYJKJQe6iGxVqJljuxB97G8= - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/dns-txt/download/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.npmmirror.com/doctrine/download/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/doctrine/download/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha1-XNAfwQFiG0LEzX9dGmYkNxbT850= - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= - dependencies: - esutils "^2.0.2" - -dom-align@^1.7.0: - version "1.12.2" - resolved "https://registry.npmmirror.com/dom-align/download/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b" - integrity sha1-D4Fk69DJwhsMeQMQSTzYVYkqzUs= - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/dom-converter/download/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g= - dependencies: - utila "~0.4" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmmirror.com/dom-serializer/download/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E= - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.npmmirror.com/dom-serializer/download/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha1-YgZDfTLO767HFhgDIwx6ILwbTZE= - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.npmmirror.com/domain-browser/download/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8= - -domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/domelementtype/download/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc= - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA= - dependencies: - webidl-conversions "^4.0.2" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.npmmirror.com/domhandler/download/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha1-iAUJfpM9ZehVRvcm1g9euItE+AM= - dependencies: - domelementtype "1" - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/domhandler/download/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" - integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== - dependencies: - domelementtype "^2.2.0" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.npmmirror.com/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1630106606599&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmmirror.com/domutils/download/domutils-2.8.0.tgz?cache=0&sync_timestamp=1630106606599&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU= - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/dot-case/download/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha1-mytnDQCkMWZ6inW6Kc0bmICc51E= - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/dot-prop/download/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= - dependencies: - is-obj "^2.0.0" - -dotenv-expand@5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha1-P7rwIL/XlIhAcuomsel5HUWmKfA= - -dotenv@8.2.0: - version "8.2.0" - resolved "https://registry.npmmirror.com/dotenv/download/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.npmmirror.com/duplexer/download/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.npmmirror.com/duplexify/download/duplexify-3.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fduplexify%2Fdownload%2Fduplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.npmmirror.com/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.3.378, electron-to-chromium@^1.4.17: - version "1.4.56" - resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.56.tgz#f660fd2c6739b341d8922fe3a441a5a2804911a1" - integrity sha512-0k/S0FQqRRpJbX7YUjwCcLZ8D42RqGKtaiq90adXBOYgTIWwLA/g3toO8k9yEpqU8iC4QyaWYYWSTBIna8WV4g== - -elliptic@^6.5.3, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.npmmirror.com/elliptic/download/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s= - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1, emoji-regex@^7.0.2: - version "7.0.3" - resolved "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha1-VXBmIEatKeLpFucariYKvf9Pang= - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmmirror.com/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1624607958717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.1.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew= - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/entities/download/entities-1.1.2.tgz?cache=0&sync_timestamp=1628508126700&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha1-vfpzUplmTfr9NFKe1PhSKidf6lY= - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1628508126700&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU= - -errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.npmmirror.com/errno/download/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8= - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmmirror.com/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.npmmirror.com/es-abstract/download/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha1-1IhXlodpFpWd547aoN9FZicRXsM= - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@~0.10.14: - version "0.10.63" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.63.tgz#9c222a63b6a332ac80b1e373b426af723b895bd6" - integrity sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - esniff "^2.0.1" - next-tick "^1.1.0" - -es6-iterator@2.0.3, es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.npmmirror.com/es6-symbol/download/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha1-utXTwbzawoJp9MszHkMceKxwXRg= - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/escalade/download/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^1.11.0, escodegen@^1.9.1: - version "1.14.3" - resolved "https://registry.npmmirror.com/escodegen/download/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM= - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@^5.2.1: - version "5.2.1" - resolved "https://registry.npmmirror.com/eslint-config-react-app/download/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" - integrity sha1-aYv3ru4n8M6gE56u8mHHv33WI98= - dependencies: - confusing-browser-globals "^1.0.9" - -eslint-import-resolver-node@^0.3.2: - version "0.3.6" - resolved "https://registry.npmmirror.com/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha1-QEi5WDldqJZoJSAB29nsprg7rL0= - dependencies: - debug "^3.2.7" - resolve "^1.20.0" - -eslint-loader@3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/eslint-loader/download/eslint-loader-3.0.3.tgz#e018e3d2722381d982b1201adb56819c73b480ca" - integrity sha1-4Bjj0nIjgdmCsSAa21aBnHO0gMo= - dependencies: - fs-extra "^8.1.0" - loader-fs-cache "^1.0.2" - loader-utils "^1.2.3" - object-hash "^2.0.1" - schema-utils "^2.6.1" - -eslint-module-utils@^2.4.1: - version "2.7.3" - resolved "https://registry.npmmirror.com/eslint-module-utils/download/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== - dependencies: - debug "^3.2.7" - find-up "^2.1.0" - -eslint-plugin-flowtype@4.6.0: - version "4.6.0" - resolved "https://registry.npmmirror.com/eslint-plugin-flowtype/download/eslint-plugin-flowtype-4.6.0.tgz#82b2bd6f21770e0e5deede0228e456cb35308451" - integrity sha1-grK9byF3Dg5d7t4CKORWyzUwhFE= - dependencies: - lodash "^4.17.15" - -eslint-plugin-import@2.20.1: - version "2.20.1" - resolved "https://registry.npmmirror.com/eslint-plugin-import/download/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.1" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jsx-a11y@6.2.3: - version "6.2.3" - resolved "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/download/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" - integrity sha1-uHKgnV3lGvcKl9se6n3JMwQ3CKo= - dependencies: - "@babel/runtime" "^7.4.5" - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.2" - damerau-levenshtein "^1.0.4" - emoji-regex "^7.0.2" - has "^1.0.3" - jsx-ast-utils "^2.2.1" - -eslint-plugin-react-hooks@^1.6.1: - version "1.7.0" - resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/download/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" - integrity sha1-YhC21aNyBfC5KFj4laToJwIKfQQ= - -eslint-plugin-react@7.19.0: - version "7.19.0" - resolved "https://registry.npmmirror.com/eslint-plugin-react/download/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" - integrity sha1-bQj5ZzYoqmnFVZ0zSJ6FXYNVFmY= - dependencies: - array-includes "^3.1.1" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.15.1" - semver "^6.3.0" - string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha1-ygODMxD2iJoyZHgaqC5j65z+eEg= - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0: - version "5.1.1" - resolved "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.npmmirror.com/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8= - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/eslint-utils/download/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= - -eslint@^6.6.0: - version "6.8.0" - resolved "https://registry.npmmirror.com/eslint/download/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esniff@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" - integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== - dependencies: - d "^1.0.1" - es5-ext "^0.10.62" - event-emitter "^0.3.5" - type "^2.7.2" - -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.npmmirror.com/espree/download/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o= - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= - -esquery@^1.0.1: - version "1.4.0" - resolved "https://registry.npmmirror.com/esquery/download/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha1-IUj/w4uC6McFff7UhCWz5h8PJKU= - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0, esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/esrecurse/download/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmmirror.com/estraverse/download/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha1-LupSkHAvJquP5TcDcP+GyWXSESM= - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmmirror.com/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.npmmirror.com/eventemitter3/download/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/events/download/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA= - -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.npmmirror.com/eventsource/download/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI= - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.npmmirror.com/exec-sh/download/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha1-/yZPnjJVGaYMteJzaSlDSDzKY7w= - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1637147199964&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execall@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/execall/download/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" - integrity sha1-FqBrX+UJnffQC+XZwG7s3tFmO0U= - dependencies: - clone-regexp "^2.1.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.npmmirror.com/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/expect/download/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha1-t1FltIFwdPpKFXeU9G/p8boVtso= - dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" - -express@^4.17.1: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.npmmirror.com/ext/download/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha1-OHHVBkHodMwXLitT+RmELRnbTFI= - dependencies: - type "^2.5.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.npmmirror.com/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/extsprintf/download/extsprintf-1.3.0.tgz?cache=0&sync_timestamp=1635889863507&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fextsprintf%2Fdownload%2Fextsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.npmmirror.com/extsprintf/download/extsprintf-1.4.1.tgz?cache=0&sync_timestamp=1635889863507&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fextsprintf%2Fdownload%2Fextsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha1-jRcsBkhn8jXAyEpZaAbSeb9LzAc= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.npmmirror.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= - -fast-glob@^2.0.2: - version "2.2.7" - resolved "https://registry.npmmirror.com/fast-glob/download/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha1-aVOFfDr6R1//ku5gFdUtpwpM050= - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.2.5, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.npmmirror.com/fast-glob/download/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.npmmirror.com/fastest-levenshtein/download/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" - integrity sha1-mZD306iMxan/0fF0V0UlFwDUl+I= - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmmirror.com/fastq/download/fastq-1.13.0.tgz?cache=0&sync_timestamp=1631609698424&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffastq%2Fdownload%2Ffastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw= - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.npmmirror.com/faye-websocket/download/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.4" - resolved "https://registry.npmmirror.com/faye-websocket/download/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo= - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/fb-watchman/download/fb-watchman-2.0.1.tgz?cache=0&sync_timestamp=1624607942135&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffb-watchman%2Fdownload%2Ffb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU= - dependencies: - bser "2.1.1" - -fbemitter@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/fbemitter/download/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" - integrity sha1-ALKhr1QRJUqrQWzXX55iib7kv/M= - dependencies: - fbjs "^3.0.0" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha1-IWVRE2rgL+JVkyw+yHdfGOLAeLg= - -fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.2" - resolved "https://registry.npmmirror.com/fbjs/download/fbjs-3.0.2.tgz#dfae08a85c66a58372993ce2caf30863f569ff94" - integrity sha512-qv+boqYndjElAJHNN3NoM8XuwQZ1j2m3kEvTgdle8IDjr6oUbkEpvABWtj/rQl3vq4ew7dnElBxL4YJAwTVqQQ== - dependencies: - cross-fetch "^3.0.4" - fbjs-css-vars "^1.0.0" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.30" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.npmmirror.com/figgy-pudding/download/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4= - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/figures/download/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w= - dependencies: - flat-cache "^2.0.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/file-entry-cache/download/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha1-IRst2WWcsDlLBz5zI6w8kz1SICc= - dependencies: - flat-cache "^3.0.4" - -file-loader@4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/file-loader/download/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" - integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.5.0" - -file-saver@^2.0.2: - version "2.0.5" - resolved "https://registry.npmmirror.com/file-saver/download/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" - integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= - -filesize@6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/filesize/download/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" - integrity sha1-+FC1CZCcfIb35FDqGQBsMcLtPS8= - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/find-cache-dir/download/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc= - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.2.0: - version "3.3.2" - resolved "https://registry.npmmirror.com/find-cache-dir/download/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks= - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.npmmirror.com/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= - dependencies: - locate-path "^3.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA= - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/flat-cache/download/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE= - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg= - -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.npmmirror.com/flatted/download/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== - -flatten@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/flatten/download/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" - integrity sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs= - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -flux@^4.0.1: - version "4.0.3" - resolved "https://registry.npmmirror.com/flux/download/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" - integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== - dependencies: - fbemitter "^3.0.0" - fbjs "^3.0.1" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio= - dependencies: - debug "=3.1.0" - -follow-redirects@^1.0.0: - version "1.14.7" - resolved "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" - integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmmirror.com/for-each/download/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha1-abRH6IoKXTLD5whPPxcQA0shN24= - dependencies: - is-callable "^1.1.3" - -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.npmmirror.com/for-in/download/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.3: - version "0.1.5" - resolved "https://registry.npmmirror.com/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -fork-ts-checker-webpack-plugin@3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/download/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" - integrity sha1-oWQsDT5l9QwswXQunAqA9EH4axk= - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^3.3.0" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.npmmirror.com/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -framer-motion@^2.1.2: - version "2.9.5" - resolved "https://registry.npmmirror.com/framer-motion/download/framer-motion-2.9.5.tgz#bbb185325d531c57f494cf3f6cf7719fc2c225c7" - integrity sha1-u7GFMl1THFf0lM8/bPdxn8LCJcc= - dependencies: - framesync "^4.1.0" - hey-listen "^1.0.8" - popmotion "9.0.0-rc.20" - style-value-types "^3.1.9" - tslib "^1.10.0" - optionalDependencies: - "@emotion/is-prop-valid" "^0.8.2" - -framesync@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/framesync/download/framesync-4.1.0.tgz#69a8db3ca432dc70d6a76ba882684a1497ef068a" - integrity sha1-aajbPKQy3HDWp2uogmhKFJfvBoo= - dependencies: - hey-listen "^1.0.5" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha1-TxicRKoSO4lfcigE9V6iPq3DSOk= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/fs-minipass/download/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs= - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.npmmirror.com/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/fsevents/download/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU= - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.npmmirror.com/fsevents/download/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg= - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmmirror.com/fsevents/download/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmmirror.com/gensync/download/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.npmmirror.com/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.npmmirror.com/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= - -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y= - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ= - -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/get-stdin/download/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha1-y61qc/63X27rIrqeAfiaooqpelM= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/get-symbol-description/download/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha1-f9uByQAQH71WTdXxowr1qtweWNY= - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.npmmirror.com/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.npmmirror.com/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.npmmirror.com/glob/download/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@2.0.0, global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/global-modules/download/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha1-mXYFrSNF8n9RU5vqJldEISFcd4A= - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/global-prefix/download/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha1-/IX3MGTfafUEIfR/iD/luRO6m5c= - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmmirror.com/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.npmmirror.com/globals/download/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg= - dependencies: - type-fest "^0.8.1" - -globby@8.0.2: - version "8.0.2" - resolved "https://registry.npmmirror.com/globby/download/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha1-VpdhnM2VxSdduy1vqkIIfBqUHY0= - dependencies: - array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^11.0.3: - version "11.1.0" - resolved "https://registry.npmmirror.com/globby/download/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/globjoin/download/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= - -gonzales-pe@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/gonzales-pe/download/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" - integrity sha1-/p3sXzxVfurQn/hoxlgmvlTQZ7M= - dependencies: - minimist "^1.2.5" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.9" - resolved "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/gud/download/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha1-pIlYGxfmpwvsqavjrlfeekmYUsA= - -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/gzip-size/download/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ= - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/handle-thing/download/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha1-hX95zjWVgMNA1DCBzGSJcNC7I04= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.npmmirror.com/har-validator/download/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/hard-rejection/download/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM= - -harmony-reflect@^1.4.6: - version "1.6.2" - resolved "https://registry.npmmirror.com/harmony-reflect/download/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" - integrity sha1-Mey9MuZIo00DDYattn1NR1R/5xA= - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1631558652943&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/has-bigints/download/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/has-symbols/download/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM= - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/has-tostringtag/download/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU= - dependencies: - has-symbols "^1.0.2" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.npmmirror.com/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/hash-base/download/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM= - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.npmmirror.com/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/he/download/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/hex-color-regex/download/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4= - -hey-listen@^1.0.5, hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/hey-listen/download/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha1-jllWH/ckkI3hqpJO1uzISlapqmg= - -highlight-words-core@^1.2.0: - version "1.2.2" - resolved "https://registry.npmmirror.com/highlight-words-core/download/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa" - integrity sha1-Hv9tfZ8KIvFVBCoAeRI3eRse6qo= - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^3.3.0: - version "3.3.2" - resolved "https://registry.npmmirror.com/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz?cache=0&sync_timestamp=1627566706387&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhoist-non-react-statics%2Fdownload%2Fhoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U= - dependencies: - react-is "^16.7.0" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmmirror.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k= - -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.npmmirror.com/hosted-git-info/download/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.npmmirror.com/hpack.js/download/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/hsl-regex/download/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/hsla-regex/download/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg= - dependencies: - whatwg-encoding "^1.0.1" - -html-entities@^1.2.1: - version "1.4.0" - resolved "https://registry.npmmirror.com/html-entities/download/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha1-z70bAdKvr5rcobEK59/6uYxx0tw= - -html-escaper@^2.0.0, html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/html-escaper/download/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM= - -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/html-minifier-terser/download/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha1-ki6W8fO7YIMsJjS3mIQJY4mx8FQ= - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/html-parse-stringify/download/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha1-38EBc0fOn3fIFBpQfyMwQMWcVdI= - dependencies: - void-elements "3.1.0" - -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/html-tags/download/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" - integrity sha1-e15vfmZen7QfMAB+2eDUHpf7IUA= - -html-webpack-plugin@4.0.0-beta.11: - version "4.0.0-beta.11" - resolved "https://registry.npmmirror.com/html-webpack-plugin/download/html-webpack-plugin-4.0.0-beta.11.tgz#3059a69144b5aecef97708196ca32f9e68677715" - integrity sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg== - dependencies: - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.15" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -htmlparser2@^3.10.0: - version "3.10.1" - resolved "https://registry.npmmirror.com/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1636640945377&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha1-vWedw/WYl7ajS7EHSchVu1OpOS8= - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/htmlparser2/download/htmlparser2-6.1.0.tgz?cache=0&sync_timestamp=1636640945377&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha1-xNditsM3GgXb5l6UrkOp+EX7j7c= - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.npmmirror.com/http-deceiver/download/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmmirror.com/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-parser-js@>=0.5.1: - version "0.5.5" - resolved "https://registry.npmmirror.com/http-parser-js/download/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5" - integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.npmmirror.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.npmmirror.com/http-proxy/download/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk= - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1637178703812&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -i18next@^19.5.3: - version "19.9.2" - resolved "https://registry.npmmirror.com/i18next/download/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" - integrity sha1-6loSRBbjxauF/dyiyOPDZpqNo5c= - dependencies: - "@babel/runtime" "^7.12.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmmirror.com/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/icss-utils/download/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc= - dependencies: - postcss "^7.0.14" - -identity-obj-proxy@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/identity-obj-proxy/download/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" - integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= - dependencies: - harmony-reflect "^1.4.6" - -ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.npmmirror.com/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.npmmirror.com/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.npmmirror.com/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.8, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/ignore/download/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.npmmirror.com/image-size/download/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= - -immer@1.10.0: - version "1.10.0" - resolved "https://registry.npmmirror.com/immer/download/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" - integrity sha1-utZ2BbqcgQJ12R4cKkfUWC6YKG0= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/import-cwd/download/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmmirror.com/import-fresh/download/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/import-from/download/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/import-lazy/download/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha1-6OtidIOgpD2jwD8+NVSL5csMwVM= - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/indexes-of/download/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmmirror.com/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.npmmirror.com/ini/download/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= - -inquirer@7.0.4: - version "7.0.4" - resolved "https://registry.npmmirror.com/inquirer/download/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" - integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.2" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.2.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.npmmirror.com/inquirer/download/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/internal-ip/download/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc= - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/internal-slot/download/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha1-c0fjB97uovqsKsYgXUvH00ln9Zw= - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmmirror.com/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= - dependencies: - loose-envify "^1.0.0" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/invert-kv/download/invert-kv-2.0.0.tgz?cache=0&sync_timestamp=1630996775723&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finvert-kv%2Fdownload%2Finvert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI= - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.9" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" - integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.npmmirror.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-absolute-url/download/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/is-absolute-url/download/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.npmmirror.com/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-alphabetical/download/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha1-nn1rlJFr4iFTdF0YTCmMv5hqaG0= - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-alphanumerical/download/is-alphanumerical-1.0.4.tgz?cache=0&sync_timestamp=1636009291782&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-alphanumerical%2Fdownload%2Fis-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha1-frmiQx+FX2se8aeOMm31FWlsTb8= - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmmirror.com/is-arguments/download/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps= - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha1-RXSirlb3qyBolvtDHq7tBm/fjwM= - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-bigint/download/is-bigint-1.0.4.tgz?cache=0&sync_timestamp=1628747500062&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-bigint%2Fdownload%2Fis-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM= - dependencies: - has-bigints "^1.0.1" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmmirror.com/is-boolean-object/download/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk= - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.0.2, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.npmmirror.com/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha1-76ouqdqg16suoTqXsritUf776L4= - -is-buffer@^2.0.0: - version "2.0.5" - resolved "https://registry.npmmirror.com/is-buffer/download/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE= - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.npmmirror.com/is-callable/download/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU= - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw= - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-color-stop/download/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-core-module@^2.5.0, is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.npmmirror.com/is-core-module/download/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.npmmirror.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmmirror.com/is-date-object/download/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8= - dependencies: - has-tostringtag "^1.0.0" - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-decimal/download/is-decimal-1.0.4.tgz?cache=0&sync_timestamp=1636008960795&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-decimal%2Fdownload%2Fis-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha1-ZaOllYocW2OnBuGzM9fNn2MNP6U= - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.npmmirror.com/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.npmmirror.com/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.npmmirror.com/is-docker/download/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao= - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-generator-fn/download/is-generator-fn-2.1.0.tgz?cache=0&sync_timestamp=1628686122487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-generator-fn%2Fdownload%2Fis-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha1-fRQK3DiarzARqPKipM+m+q3/sRg= - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ= - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-hexadecimal/download/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha1-zDXJdYjaS9Saju3WvECC1E3LI6c= - -is-negative-zero@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/is-negative-zero/download/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.npmmirror.com/is-number-object/download/is-number-object-1.0.6.tgz?cache=0&sync_timestamp=1628221744591&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-number-object%2Fdownload%2Fis-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha1-anqvg4x/BoalC0VT9+VKlklOifA= - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/is-path-cwd/download/is-path-cwd-2.2.0.tgz?cache=0&sync_timestamp=1628686723402&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha1-v+Lcomxp85cmWkAJljYCk1oFOss= - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-path-inside/download/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha1-fJgQWH1lmkDSe8201WFuqwWUlLI= - dependencies: - path-is-inside "^1.0.2" - -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-plain-obj/download/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha1-ReQuN/zPH0Dajl927iFRWEDAkoc= - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= - dependencies: - isobject "^3.0.1" - -is-regex@^1.0.4, is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/is-regex/download/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg= - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-regexp@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-regexp/download/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" - integrity sha1-zXNKVoZOI7lWv058ZsOWpMCyLC0= - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-resolvable/download/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg= - -is-root@2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-root/download/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha1-gJ4YEpzxEpZEMCpPhUQDXVGYSpw= - -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/is-shared-array-buffer/download/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha1-l7DIX72stZycRG/mU7gs8rW3z+Y= - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-stream/download/is-stream-1.1.0.tgz?cache=0&sync_timestamp=1628592752355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-stream%2Fdownload%2Fis-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/is-string/download/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0= - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/is-symbol/download/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha1-ptrJO2NbBjymhyI23oiRClevE5w= - dependencies: - has-symbols "^1.0.2" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz?cache=0&sync_timestamp=1625294654260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-unicode-supported%2Fdownload%2Fis-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc= - -is-weakref@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-weakref/download/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-what@^3.14.1: - version "3.14.1" - resolved "https://registry.npmmirror.com/is-what/download/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" - integrity sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.npmmirror.com/is-wsl/download/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE= - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.npmmirror.com/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1634527209200&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k= - -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha1-pfY9kfC7wMPkee9MXeAnM17G1jA= - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.npmmirror.com/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha1-WoETzXRtQ8SInro2qxDn1QybTzM= - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz?cache=0&sync_timestamp=1634004113980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-source-maps%2Fdownload%2Fistanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha1-KEmXxIIRdS7EhiU9qX44ed77qMg= - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" - source-map "^0.6.1" - -istanbul-reports@^2.2.6: - version "2.2.7" - resolved "https://registry.npmmirror.com/istanbul-reports/download/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha1-XZOfYjfXtIOTzAlZ6rQM1P0FaTE= - dependencies: - html-escaper "^2.0.0" - -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-changed-files/download/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha1-CNjBXreaf6P8mCabwUtFHugvgDk= - dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" - -jest-cli@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-cli/download/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" - integrity sha1-rS3mLQdHLUGcarwwH8QyuYsQ0q8= - dependencies: - "@jest/core" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - exit "^0.1.2" - import-local "^2.0.0" - is-ci "^2.0.0" - jest-config "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^13.3.0" - -jest-config@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-config/download/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" - integrity sha1-+xu8YMc6Rq8DWQcZ76SCXm5N0bU= - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.9.0" - "@jest/types" "^24.9.0" - babel-jest "^24.9.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^24.9.0" - jest-environment-node "^24.9.0" - jest-get-type "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - micromatch "^3.1.10" - pretty-format "^24.9.0" - realpath-native "^1.1.0" - -jest-diff@*: - version "27.4.6" - resolved "https://registry.npmmirror.com/jest-diff/download/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" - integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.4.0" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-diff@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-diff/download/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" - integrity sha1-kxt9DVd4obr3RSy4FuMl43JAVdo= - dependencies: - chalk "^2.0.1" - diff-sequences "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-docblock@^24.3.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-docblock/download/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" - integrity sha1-eXAgGAK6Vg4cQJLMJcvt9a9ajOI= - dependencies: - detect-newline "^2.1.0" - -jest-each@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-each/download/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" - integrity sha1-6y2mAuKmEImNvF8fbfO6hrVfiwU= - dependencies: - "@jest/types" "^24.9.0" - chalk "^2.0.1" - jest-get-type "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - -jest-environment-jsdom-fourteen@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/jest-environment-jsdom-fourteen/download/jest-environment-jsdom-fourteen-1.0.1.tgz#4cd0042f58b4ab666950d96532ecb2fc188f96fb" - integrity sha1-TNAEL1i0q2ZpUNllMuyy/BiPlvs= - dependencies: - "@jest/environment" "^24.3.0" - "@jest/fake-timers" "^24.3.0" - "@jest/types" "^24.3.0" - jest-mock "^24.0.0" - jest-util "^24.0.0" - jsdom "^14.1.0" - -jest-environment-jsdom@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-environment-jsdom/download/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" - integrity sha1-SwgGx/yU+V7bNpppzCd47sK3N1s= - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jsdom "^11.5.1" - -jest-environment-node@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-environment-node/download/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" - integrity sha1-Mz0tJ5b5aH8q7r8HQrUZ8zwcv9M= - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-get-type/download/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha1-FoSgyKUPLkkBtmRK6GH1ee7S7w4= - -jest-get-type@^27.4.0: - version "27.4.0" - resolved "https://registry.npmmirror.com/jest-get-type/download/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" - integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== - -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-haste-map/download/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha1-s4pdZCdJNOIfpBeump++t3zqrH0= - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - -jest-jasmine2@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-jasmine2/download/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" - integrity sha1-H3sb0yQsF3TmKsq7NkbZavw75qA= - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^24.9.0" - is-generator-fn "^2.0.0" - jest-each "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - throat "^4.0.0" - -jest-leak-detector@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-leak-detector/download/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" - integrity sha1-tmXep8dxAMXE99/LFTtlzwfc+Wo= - dependencies: - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-matcher-utils/download/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha1-9bNmHV5ijf/m3WUlHf2uDofDoHM= - dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-message-util/download/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha1-Un9UoeOA9eICqNEUmw7IcvQxGeM= - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-mock@^24.0.0, jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-mock/download/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha1-wig1VB7jebkIZzrVEIeiGFwT8cY= - dependencies: - "@jest/types" "^24.9.0" - -jest-pnp-resolver@^1.2.1: - version "1.2.2" - resolved "https://registry.npmmirror.com/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha1-twSsCuAoqJEIpNBAs/kZ393I4zw= - -jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-regex-util/download/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha1-wT+zOAveIr9ldUMsST6o/jeWVjY= - -jest-resolve-dependencies@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-resolve-dependencies/download/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" - integrity sha1-rQVRmJWcTPuopPBmxnOj8HhlB6s= - dependencies: - "@jest/types" "^24.9.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.9.0" - -jest-resolve@24.9.0, jest-resolve@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-resolve/download/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" - integrity sha1-3/BMdoevNMTdflJIktnPd+XRcyE= - dependencies: - "@jest/types" "^24.9.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - -jest-runner@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-runner/download/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" - integrity sha1-V0+v29VEVcKzS0vfQ2WiOFf830I= - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.4.2" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-leak-detector "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-runtime/download/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" - integrity sha1-nxRYOvak9zFKap2fAibhp4HI5Kw= - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^13.3.0" - -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-serializer/download/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha1-5tfX75bTHouQeacUdUxdXFgojnM= - -jest-snapshot@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-snapshot/download/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" - integrity sha1-7I6cpPLsDFyHro+SXPl0l7DpUbo= - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - expect "^24.9.0" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^24.9.0" - semver "^6.2.0" - -jest-util@^24.0.0, jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-util/download/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha1-c5aBTkhTbS6Fo33j5MQx18sUAWI= - dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-validate/download/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha1-B3XFU2DRc82FTkAYB1bU/1Le+Ks= - dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" - leven "^3.1.0" - pretty-format "^24.9.0" - -jest-watch-typeahead@0.4.2: - version "0.4.2" - resolved "https://registry.npmmirror.com/jest-watch-typeahead/download/jest-watch-typeahead-0.4.2.tgz#e5be959698a7fa2302229a5082c488c3c8780a4a" - integrity sha1-5b6Vlpin+iMCIppQgsSIw8h4Cko= - dependencies: - ansi-escapes "^4.2.1" - chalk "^2.4.1" - jest-regex-util "^24.9.0" - jest-watcher "^24.3.0" - slash "^3.0.0" - string-length "^3.1.0" - strip-ansi "^5.0.0" - -jest-watcher@^24.3.0, jest-watcher@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-watcher/download/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" - integrity sha1-S1bl0c7/AF9biOUo3Jr8jdTtKzs= - dependencies: - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.9.0" - string-length "^2.0.0" - -jest-worker@^24.6.0, jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest-worker/download/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U= - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -jest-worker@^25.1.0: - version "25.5.0" - resolved "https://registry.npmmirror.com/jest-worker/download/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha1-JhHQcbec6g9D7lej0RhZOsFUfbE= - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/jest/download/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" - integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== - dependencies: - import-local "^2.0.0" - jest-cli "^24.9.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmmirror.com/js-yaml/download/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.npmmirror.com/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.npmmirror.com/jsdom/download/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsdom@^14.1.0: - version "14.1.0" - resolved "https://registry.npmmirror.com/jsdom/download/jsdom-14.1.0.tgz#916463b6094956b0a6c1782c94e380cd30e1981b" - integrity sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng== - dependencies: - abab "^2.0.0" - acorn "^6.0.4" - acorn-globals "^4.3.0" - array-equal "^1.0.0" - cssom "^0.3.4" - cssstyle "^1.1.1" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.0" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.1.3" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.5" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^2.5.0" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^6.1.2" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmmirror.com/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmmirror.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha1-rnvLNlard6c7pcSb9lTzjmtoYOI= - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/json-schema/download/json-schema-0.4.0.tgz?cache=0&sync_timestamp=1636423476647&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-schema%2Fdownload%2Fjson-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json2mq@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/json2mq/download/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" - integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo= - dependencies: - string-convert "^0.2.0" - -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.npmmirror.com/json3/download/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E= - -json5@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.npmmirror.com/json5/download/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.npmmirror.com/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/jsprim/download/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: - version "2.4.1" - resolved "https://registry.npmmirror.com/jsx-ast-utils/download/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha1-ERSkwSCUgdsGxpDCtPSIzGZfZX4= - dependencies: - array-includes "^3.1.1" - object.assign "^4.1.0" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/killable/download/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI= - -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/kind-of/download/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU= - dependencies: - is-buffer "^1.0.2" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.npmmirror.com/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= - -known-css-properties@^0.21.0: - version "0.21.0" - resolved "https://registry.npmmirror.com/known-css-properties/download/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d" - integrity sha1-FfvQu7g0R/POCdivJH7UfGjt6A0= - -last-call-webpack-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/last-call-webpack-plugin/download/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" - integrity sha1-l0LfDhDjz0blwDgcLekNOnotdVU= - dependencies: - lodash "^4.17.5" - webpack-sources "^1.1.0" - -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.npmmirror.com/lazy-cache/download/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha1-bvXS32DlL4LrIopMNz6NHzlyU88= - dependencies: - invert-kv "^2.0.0" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4= - -less-loader@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/less-loader/download/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" - integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg== - dependencies: - clone "^2.1.1" - loader-utils "^1.1.0" - pify "^4.0.1" - -less@^3.11.3: - version "3.13.1" - resolved "https://registry.npmmirror.com/less/download/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" - integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== - dependencies: - copy-anything "^2.0.1" - tslib "^1.10.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - native-request "^1.0.5" - source-map "~0.6.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I= - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/levenary/download/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c= - dependencies: - leven "^3.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmmirror.com/lines-and-columns/download/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/load-json-file/download/load-json-file-2.0.0.tgz?cache=0&sync_timestamp=1631508607226&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fload-json-file%2Fdownload%2Fload-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/load-json-file/download/load-json-file-4.0.0.tgz?cache=0&sync_timestamp=1631508607226&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fload-json-file%2Fdownload%2Fload-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -loader-fs-cache@^1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" - integrity sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k= - dependencies: - find-cache-dir "^0.1.1" - mkdirp "^0.5.1" - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.npmmirror.com/loader-runner/download/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c= - -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.npmmirror.com/loader-utils/download/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc= - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha1-xXm140yzSxp07cbB+za/o3HVphM= - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= - dependencies: - p-locate "^4.1.0" - -lodash-es@^4.17.15: - version "4.17.21" - resolved "https://registry.npmmirror.com/lodash-es/download/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/lodash._reinterpolate/download/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.curry@^4.0.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/lodash.curry/download/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmmirror.com/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.flow@^3.3.0, lodash.flow@^3.5.0: - version "3.5.0" - resolved "https://registry.npmmirror.com/lodash.flow/download/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.npmmirror.com/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash.template@^4.4.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/lodash.template/download/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha1-+XYZXPPzR9DV9SSDVp/oAxzM6Ks= - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/lodash.templatesettings/download/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha1-5IExDwSdPPbUfpEq0JMTsVTw+zM= - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.npmmirror.com/lodash.truncate/download/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5: - version "4.17.21" - resolved "https://registry.npmmirror.com/lodash/download/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/log-symbols/download/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha1-P727lbRoOsn8eFER55LlWNSr1QM= - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loglevel@^1.6.6: - version "1.8.0" - resolved "https://registry.npmmirror.com/loglevel/download/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" - integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== - -longest-streak@^2.0.0: - version "2.0.4" - resolved "https://registry.npmmirror.com/longest-streak/download/longest-streak-2.0.4.tgz?cache=0&sync_timestamp=1636446222992&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flongest-streak%2Fdownload%2Flongest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" - integrity sha1-uFmZV9pbXatk3uP+MW+ndFl9kOQ= - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/loose-envify/download/loose-envify-1.4.0.tgz?cache=0&sync_timestamp=1627566748051&other_urls=https%3A%2F%2Fregistry.nlark.com%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/lower-case/download/lower-case-2.0.2.tgz?cache=0&sync_timestamp=1624607698082&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flower-case%2Fdownload%2Flower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha1-b6I3xj29xKgsoP2ILkci3F5jTig= - dependencies: - tslib "^2.0.3" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/lru-cache/download/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/lru-cache/download/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= - dependencies: - yallist "^4.0.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.npmmirror.com/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= - dependencies: - semver "^6.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmmirror.com/makeerror/download/makeerror-1.0.12.tgz?cache=0&sync_timestamp=1635238315869&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmakeerror%2Fdownload%2Fmakeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha1-Pl3SB5qC6BLpg8xmEMSiyw6qgBo= - dependencies: - tmpl "1.0.5" - -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.npmmirror.com/mamacro/download/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha1-rSyVdhl8nxq/MI0Hh4Zb2XWj8+Q= - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.npmmirror.com/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo= - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.npmmirror.com/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/map-obj/download/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -mathml-tag-names@^2.1.3: - version "2.1.3" - resolved "https://registry.npmmirror.com/mathml-tag-names/download/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" - integrity sha1-TdrdZzCOeAzxakdoWHjuJ7c2oKM= - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.npmmirror.com/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-from-markdown@^0.8.0: - version "0.8.5" - resolved "https://registry.npmmirror.com/mdast-util-from-markdown/download/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" - integrity sha1-0e8spCvDd+ywRjqYeRDa6JvZoow= - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-string "^2.0.0" - micromark "~2.11.0" - parse-entities "^2.0.0" - unist-util-stringify-position "^2.0.0" - -mdast-util-to-markdown@^0.6.0: - version "0.6.5" - resolved "https://registry.npmmirror.com/mdast-util-to-markdown/download/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" - integrity sha1-sz9nyoINaebMUnqT1AOSSbUEvr4= - dependencies: - "@types/unist" "^2.0.0" - longest-streak "^2.0.0" - mdast-util-to-string "^2.0.0" - parse-entities "^2.0.0" - repeat-string "^1.0.0" - zwitch "^1.0.0" - -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/mdast-util-to-string/download/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" - integrity sha1-uM/mpxPhCRy1tyj8SIhaR2f4uXs= - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA= - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs= - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/mem/download/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg= - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memoize-one@^4.0.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/memoize-one/download/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" - integrity sha1-ojh8WMA//yfKOQwxt2Snmt3z+QY= - -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/memoize-one/download/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha1-slkbhx7YKUiu5HJ9xqvO7qyMEEU= - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.npmmirror.com/memory-fs/download/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/meow/download/meow-9.0.0.tgz?cache=0&sync_timestamp=1637477490247&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmeow%2Fdownload%2Fmeow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" - integrity sha1-zZUQvFysne59A8c+4fmtlZ9Oo2Q= - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize "^1.2.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - -merge-deep@^3.0.2: - version "3.0.3" - resolved "https://registry.npmmirror.com/merge-deep/download/merge-deep-3.0.3.tgz#1a2b2ae926da8b2ae93a0ac15d90cd1922766003" - integrity sha1-Gisq6SbaiyrpOgrBXZDNGSJ2YAM= - dependencies: - arr-union "^3.1.0" - clone-deep "^0.2.4" - kind-of "^3.0.2" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= - -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/microevent.ts/download/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha1-cLCbg/Q99RctAgWmMCW84Pc1f6A= - -micromark@~2.11.0: - version "2.11.4" - resolved "https://registry.npmmirror.com/micromark/download/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" - integrity sha1-0TQ2E47qgmOD6CJEnJpcUO5EZlo= - dependencies: - debug "^4.0.0" - parse-entities "^2.0.0" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.npmmirror.com/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.npmmirror.com/micromatch/download/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k= - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.npmmirror.com/miller-rabin/download/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha1-8IA1HIZbDcViqEYpZtqlNUPHik0= - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": - version "1.51.0" - resolved "https://registry.npmmirror.com/mime-db/download/mime-db-1.51.0.tgz?cache=0&sync_timestamp=1636426033377&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-db%2Fdownload%2Fmime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19: - version "2.1.34" - resolved "https://registry.npmmirror.com/mime-types/download/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== - dependencies: - mime-db "1.51.0" - -mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.npmmirror.com/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= - -mime@^2.4.4: - version "2.6.0" - resolved "https://registry.npmmirror.com/mime/download/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" - integrity sha1-oqaCqVzU0MsdYlfij4PafjWAA2c= - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/min-indent/download/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha1-pj9oFnOzBXH76LwlaGrnRu76mGk= - -mini-css-extract-plugin@0.9.0: - version "0.9.0" - resolved "https://registry.npmmirror.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54= - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= - dependencies: - brace-expansion "^1.1.7" - -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/minimist-options/download/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk= - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" - integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/minipass-collect/download/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc= - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/minipass-flush/download/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M= - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.npmmirror.com/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw= - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.6" - resolved "https://registry.npmmirror.com/minipass/download/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.npmmirror.com/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/mixin-object/download/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= - dependencies: - minimist "^1.2.5" - -mobx-react-lite@^2.2.0: - version "2.2.2" - resolved "https://registry.npmmirror.com/mobx-react-lite/download/mobx-react-lite-2.2.2.tgz#87c217dc72b4e47b22493daf155daf3759f868a6" - integrity sha1-h8IX3HK05HsiST2vFV2vN1n4aKY= - -mobx-react@^6.2.2: - version "6.3.1" - resolved "https://registry.npmmirror.com/mobx-react/download/mobx-react-6.3.1.tgz#204f9756e42e19d91cb6598837063b7e7de87c52" - integrity sha1-IE+XVuQuGdkctlmINwY7fn3ofFI= - dependencies: - mobx-react-lite "^2.2.0" - -mobx@^5.13.0: - version "5.15.7" - resolved "https://registry.npmmirror.com/mobx/download/mobx-5.15.7.tgz#b9a5f2b6251f5d96980d13c78e9b5d8d4ce22665" - integrity sha1-uaXytiUfXZaYDRPHjptdjUziJmU= - -moment@^2.24.0, moment@^2.25.3: - version "2.29.4" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" - integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.npmmirror.com/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1633354996608&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha1-oOx72QVcQoL3kMPIL04o2zsxsik= - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.npmmirror.com/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= - -nan@^2.12.1: - version "2.15.0" - resolved "https://registry.npmmirror.com/nan/download/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4= - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.npmmirror.com/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -native-request@^1.0.5: - version "1.1.0" - resolved "https://registry.npmmirror.com/native-request/download/native-request-1.1.0.tgz#acdb30fe2eefa3e1bc8c54b3a6852e9c5c0d3cb0" - integrity sha1-rNsw/i7vo+G8jFSzpoUunFwNPLA= - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.npmmirror.com/neo-async/download/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmmirror.com/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/no-case/download/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0= - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.npmmirror.com/node-forge/download/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" - integrity sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M= - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/node-libs-browser/download/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU= - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-notifier@^5.4.2: - version "5.4.5" - resolved "https://registry.npmmirror.com/node-notifier/download/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" - integrity sha1-DLwaKw9lhJO0Ald1oTrZOOlgke8= - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-releases@^1.1.52: - version "1.1.77" - resolved "https://registry.npmmirror.com/node-releases/download/node-releases-1.1.77.tgz?cache=0&sync_timestamp=1634807933091&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" - integrity sha1-ULDP7ehV3TdOdYW/Io/zTlfBwy4= - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/node-releases/download/node-releases-2.0.1.tgz?cache=0&sync_timestamp=1634807933091&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha1-PR05XyBPHy8ppUNYuftnh2WtL8U= - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmmirror.com/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.npmmirror.com/normalize-package-data/download/normalize-package-data-3.0.3.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha1-28w+LaWVCaCYNCKITNFy7v36Ul4= - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/normalize-selector/download/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk= - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1633420566316&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw= - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/nth-check/download/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha1-Lv4WL1w9oGoolZ+9PbddvuqfD8I= - dependencies: - boolbase "^1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/num2fraction/download/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.7, nwsapi@^2.1.3: - version "2.2.0" - resolved "https://registry.npmmirror.com/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.npmmirror.com/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmmirror.com/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^2.0.1: - version "2.2.0" - resolved "https://registry.npmmirror.com/object-hash/download/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" - integrity sha1-WtUYWB7vxEO9djRyuP8unCwNVKU= - -object-inspect@^1.11.0: - version "1.12.0" - resolved "https://registry.npmmirror.com/object-inspect/download/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== - -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.npmmirror.com/object-is/download/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha1-ud7qpfx/GEag+uzc7sE45XePU6w= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= - -object-path@0.11.4: - version "0.11.4" - resolved "https://registry.npmmirror.com/object-path/download/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" - integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/object.assign/download/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA= - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.entries@^1.1.0, object.entries@^1.1.1: - version "1.1.5" - resolved "https://registry.npmmirror.com/object.entries/download/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha1-4azdF8TeLNltWghIfPuduE2IGGE= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.fromentries@^2.0.2: - version "2.0.5" - resolved "https://registry.npmmirror.com/object.fromentries/download/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha1-ezeyBRCcIedB5gVyf+iwrV+gglE= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1: - version "2.1.3" - resolved "https://registry.npmmirror.com/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha1-siPPOOF/77l6Y8EMkd9yzLOG354= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0, object.values@^1.1.1: - version "1.1.5" - resolved "https://registry.npmmirror.com/object.values/download/object.values-1.1.5.tgz?cache=0&sync_timestamp=1633327208193&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha1-lZ9j486e8QhyAzMIITHkpFm3Fqw= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/obuf/download/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/on-headers/download/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8= - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.npmmirror.com/onetime/download/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= - dependencies: - mimic-fn "^2.1.0" - -open@^7.0.2: - version "7.4.2" - resolved "https://registry.npmmirror.com/open/download/open-7.4.2.tgz?cache=0&sync_timestamp=1635049636729&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fopen%2Fdownload%2Fopen-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha1-uBR+Jtzz5CYxbHMAif1x7dKcIyE= - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/opn/download/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w= - dependencies: - is-wsl "^1.1.0" - -optimize-css-assets-webpack-plugin@5.0.3: - version "5.0.3" - resolved "https://registry.npmmirror.com/optimize-css-assets-webpack-plugin/download/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" - integrity sha1-4vHU2UrYwK+JZ+vXzxONyx7xRXI= - dependencies: - cssnano "^4.1.10" - last-call-webpack-plugin "^3.0.0" - -optionator@^0.8.1, optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.npmmirror.com/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/original/download/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8= - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/os-locale/download/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo= - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-defer/download/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-each-series/download/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/p-is-promise/download/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.2: - version "2.3.0" - resolved "https://registry.npmmirror.com/p-limit/download/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/p-map/download/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha1-1wTZr4orpoTiYA2aIVmD1BQal50= - dependencies: - aggregate-error "^3.0.0" - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-reduce/download/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/p-retry/download/p-retry-3.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha1-MWtMiJPiyNwc+okfQGxLQivr8yg= - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= - -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.npmmirror.com/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1627560187062&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpako%2Fdownload%2Fpako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8= - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/parallel-transform/download/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.npmmirror.com/param-case/download/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU= - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz?cache=0&sync_timestamp=1633337488003&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparent-module%2Fdownload%2Fparent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.6: - version "5.1.6" - resolved "https://registry.npmmirror.com/parse-asn1/download/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ= - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/parse-entities/download/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" - integrity sha1-U8brW5MUofTsmfoP33zgHs2gy+g= - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/parse-json/download/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= - -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/parse5/download/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha1-xZNByXI/QUxFKXVWTHwApo1YrNI= - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmmirror.com/pascal-case/download/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs= - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.npmmirror.com/path-browserify/download/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha1-5sTd1+06onxoogzE5Q4aTug7vEo= - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.npmmirror.com/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmmirror.com/path-parse/download/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/path-type/download/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha1-zvMdyOCho7sNEFwM2Xzzv0f0428= - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= - -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.npmmirror.com/pbkdf2/download/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU= - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8= - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/picocolors/download/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw= - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.1" - resolved "https://registry.npmmirror.com/picomatch/download/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmmirror.com/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^4.0.1: - version "4.0.5" - resolved "https://registry.npmmirror.com/pirates/download/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-1.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= - dependencies: - find-up "^4.0.0" - -pkg-up@3.1.0, pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/pkg-up/download/pkg-up-3.1.0.tgz?cache=0&sync_timestamp=1636035118070&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-up%2Fdownload%2Fpkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU= - dependencies: - find-up "^3.0.0" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs= - -pnp-webpack-plugin@1.6.4: - version "1.6.4" - resolved "https://registry.npmmirror.com/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" - integrity sha1-yXEaxNxIpoXauvyG+Lbdn434QUk= - dependencies: - ts-pnp "^1.1.6" - -popmotion@9.0.0-rc.20: - version "9.0.0-rc.20" - resolved "https://registry.npmmirror.com/popmotion/download/popmotion-9.0.0-rc.20.tgz#f3550042ae31957b5416793ae8723200951ad39d" - integrity sha1-81UAQq4xlXtUFnk66HIyAJUa050= - dependencies: - framesync "^4.1.0" - hey-listen "^1.0.8" - style-value-types "^3.1.9" - tslib "^1.10.0" - -popper.js@^1.14.4: - version "1.16.1" - resolved "https://registry.npmmirror.com/popper.js/download/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - -portfinder@^1.0.25: - version "1.0.28" - resolved "https://registry.npmmirror.com/portfinder/download/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" - integrity sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g= - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.npmmirror.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-attribute-case-insensitive@^4.0.1: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-attribute-case-insensitive/download/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" - integrity sha1-2T5GtQRYnpSscnewRjImxoBBqIA= - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^6.0.2" - -postcss-browser-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-browser-comments/download/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" - integrity sha1-EkjS2TX7cgU8jh9hqEpXKS2fZek= - dependencies: - postcss "^7" - -postcss-calc@^7.0.1: - version "7.0.5" - resolved "https://registry.npmmirror.com/postcss-calc/download/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" - integrity sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4= - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-color-functional-notation@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/postcss-color-functional-notation/download/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" - integrity sha1-Xv03qI+6vrAKKWbR5T2Yztk/dOA= - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-gray@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/postcss-color-gray/download/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" - integrity sha1-Uyox65CfjaiYzv/ilv3B+GS+hUc= - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-color-hex-alpha@^5.0.3: - version "5.0.3" - resolved "https://registry.npmmirror.com/postcss-color-hex-alpha/download/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" - integrity sha1-qNnKTDnUl8lmHjdLnFGJnvD4c4g= - dependencies: - postcss "^7.0.14" - postcss-values-parser "^2.0.1" - -postcss-color-mod-function@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/postcss-color-mod-function/download/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" - integrity sha1-gWuhRawRzDy2uqkFp1pJ+QPk0x0= - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-color-rebeccapurple@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-color-rebeccapurple/download/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" - integrity sha1-x6ib6HK7dORbHjAiv+V0iCPm3nc= - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha1-rgYLzpPteUrHEmTwgTLVUJVr04E= - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8= - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-custom-media@^7.0.8: - version "7.0.8" - resolved "https://registry.npmmirror.com/postcss-custom-media/download/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" - integrity sha1-//0T/+/61zYhvl84cHaiiwApTgw= - dependencies: - postcss "^7.0.14" - -postcss-custom-properties@^8.0.11: - version "8.0.11" - resolved "https://registry.npmmirror.com/postcss-custom-properties/download/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" - integrity sha1-LWF3LW6S8i9eDVJgLfj65G+jDZc= - dependencies: - postcss "^7.0.17" - postcss-values-parser "^2.0.1" - -postcss-custom-selectors@^5.1.2: - version "5.1.2" - resolved "https://registry.npmmirror.com/postcss-custom-selectors/download/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" - integrity sha1-ZIWMbrLs/y+0HQsoyd17PbTef7o= - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-dir-pseudo-class@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/postcss-dir-pseudo-class/download/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" - integrity sha1-bjpBd9Dts6vMhf22+7HCbauuq6I= - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha1-H7q9LCRr/2qq15l7KwkY9NevQDM= - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha1-P+EzzTyCKC5VD8myORdqkge3hOs= - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha1-yMlR6fc+2UKAGUWERKAq2Qu592U= - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha1-ZSrvipZybwKfXj4AFG7npOdV/1c= - dependencies: - postcss "^7.0.0" - -postcss-double-position-gradients@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/postcss-double-position-gradients/download/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" - integrity sha1-/JJ9Uv3ciWyzooEuvF3xR+EQUi4= - dependencies: - postcss "^7.0.5" - postcss-values-parser "^2.0.0" - -postcss-env-function@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/postcss-env-function/download/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" - integrity sha1-Dz49PFfwlKksK69LYkHwsNpTZdc= - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-flexbugs-fixes@4.1.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/postcss-flexbugs-fixes/download/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" - integrity sha1-4JSp3xeD4iALexn4ddytOzr/iyA= - dependencies: - postcss "^7.0.0" - -postcss-focus-visible@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-focus-visible/download/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" - integrity sha1-R30QcROt5gJLFBKDF63ivR4XBG4= - dependencies: - postcss "^7.0.2" - -postcss-focus-within@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-focus-within/download/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" - integrity sha1-djuHiFls7puHTJmSAc3egGWe9oA= - dependencies: - postcss "^7.0.2" - -postcss-font-variant@^4.0.0: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-font-variant/download/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" - integrity sha1-QtTAqzCJT2D5ixdWHrXAMh9QJkE= - dependencies: - postcss "^7.0.2" - -postcss-gap-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/postcss-gap-properties/download/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" - integrity sha1-QxwZKrPtlqPD0J8v9hWWD5AsFxU= - dependencies: - postcss "^7.0.2" - -postcss-html@^0.36.0: - version "0.36.0" - resolved "https://registry.npmmirror.com/postcss-html/download/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" - integrity sha1-tAkT+U6qzCRT/TChMnrW7h+IsgQ= - dependencies: - htmlparser2 "^3.10.0" - -postcss-image-set-function@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/postcss-image-set-function/download/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" - integrity sha1-KJIKLymUW+1MMZjX32SW1BDT8og= - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-initial@^3.0.0: - version "3.0.4" - resolved "https://registry.npmmirror.com/postcss-initial/download/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" - integrity sha1-nTIGmhBTH+Lsr6C2rHUO4Lx+/FM= - dependencies: - postcss "^7.0.2" - -postcss-lab-function@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/postcss-lab-function/download/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" - integrity sha1-u1GmhWzRIomrSuINseOCHvE9fS4= - dependencies: - "@csstools/convert-colors" "^1.4.0" - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-less@^3.1.4: - version "3.1.4" - resolved "https://registry.npmmirror.com/postcss-less/download/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" - integrity sha1-Np9YZCtZKO+Jj/vBpuk8lYMExa0= - dependencies: - postcss "^7.0.14" - -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.npmmirror.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha1-xepQTyxK7zPHNZo03jVzdyrXUCo= - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-loader/download/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0= - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-logical@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-logical/download/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" - integrity sha1-JJXQ+LgunyYnJfdflAGzTntF1bU= - dependencies: - postcss "^7.0.2" - -postcss-media-minmax@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-media-minmax/download/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" - integrity sha1-t1u2y8IXyKxJQz4S8iBIgUpPXtU= - dependencies: - postcss "^7.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.npmmirror.com/postcss-media-query-parser/download/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.npmmirror.com/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ= - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha1-NivqT/Wh+Y5AdacTxsslrv75plA= - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY= - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE= - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ= - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g= - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha1-gYcZoa4doyX5gyRGsBE27rSTzX4= - dependencies: - postcss "^7.0.5" - -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A= - dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^2.1.1: - version "2.2.0" - resolved "https://registry.npmmirror.com/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha1-OFyuATzHdD9afXYC0Qc6iequYu4= - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA= - dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-nesting@^7.0.0: - version "7.0.1" - resolved "https://registry.npmmirror.com/postcss-nesting/download/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" - integrity sha1-tQrXt/AXPlteOIDDUBNEcD4EwFI= - dependencies: - postcss "^7.0.2" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha1-izWt067oOhNrBHHg1ZvlilAoXdQ= - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha1-Db4EpM6QY9RmftK+R2u4MMglk1o= - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8= - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw= - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw= - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha1-jgCcoqOUnNr4rSPmtquZy159KNk= - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs= - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE= - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI= - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize@8.0.1: - version "8.0.1" - resolved "https://registry.npmmirror.com/postcss-normalize/download/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" - integrity sha1-kOgKd2PX/fLaby8Pgr6DLOT2Z3Y= - dependencies: - "@csstools/normalize.css" "^10.1.0" - browserslist "^4.6.2" - postcss "^7.0.17" - postcss-browser-comments "^3.0.0" - sanitize.css "^10.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4= - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-overflow-shorthand@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/postcss-overflow-shorthand/download/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" - integrity sha1-MezzUOnG9t3CUKePDD4RHzLdTDA= - dependencies: - postcss "^7.0.2" - -postcss-page-break@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/postcss-page-break/download/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" - integrity sha1-rdUtDgpSjKvmr+6LRuKrsnffRr8= - dependencies: - postcss "^7.0.2" - -postcss-place@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-place/download/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" - integrity sha1-6fOdM9LcWE5G7h20Wtt3yp0dzGI= - dependencies: - postcss "^7.0.2" - postcss-values-parser "^2.0.0" - -postcss-preset-env@6.7.0: - version "6.7.0" - resolved "https://registry.npmmirror.com/postcss-preset-env/download/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" - integrity sha1-w03az4+QI4OzWtHgMPF49M3xGKU= - dependencies: - autoprefixer "^9.6.1" - browserslist "^4.6.4" - caniuse-lite "^1.0.30000981" - css-blank-pseudo "^0.1.4" - css-has-pseudo "^0.10.0" - css-prefers-color-scheme "^3.1.1" - cssdb "^4.4.0" - postcss "^7.0.17" - postcss-attribute-case-insensitive "^4.0.1" - postcss-color-functional-notation "^2.0.1" - postcss-color-gray "^5.0.0" - postcss-color-hex-alpha "^5.0.3" - postcss-color-mod-function "^3.0.3" - postcss-color-rebeccapurple "^4.0.1" - postcss-custom-media "^7.0.8" - postcss-custom-properties "^8.0.11" - postcss-custom-selectors "^5.1.2" - postcss-dir-pseudo-class "^5.0.0" - postcss-double-position-gradients "^1.0.0" - postcss-env-function "^2.0.2" - postcss-focus-visible "^4.0.0" - postcss-focus-within "^3.0.0" - postcss-font-variant "^4.0.0" - postcss-gap-properties "^2.0.0" - postcss-image-set-function "^3.0.1" - postcss-initial "^3.0.0" - postcss-lab-function "^2.0.1" - postcss-logical "^3.0.0" - postcss-media-minmax "^4.0.0" - postcss-nesting "^7.0.0" - postcss-overflow-shorthand "^2.0.0" - postcss-page-break "^2.0.0" - postcss-place "^4.0.1" - postcss-pseudo-class-any-link "^6.0.0" - postcss-replace-overflow-wrap "^3.0.0" - postcss-selector-matches "^4.0.0" - postcss-selector-not "^4.0.0" - -postcss-pseudo-class-any-link@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/postcss-pseudo-class-any-link/download/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" - integrity sha1-LtPu05OzcCh53sSocDKyENrrBNE= - dependencies: - postcss "^7.0.2" - postcss-selector-parser "^5.0.0-rc.3" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha1-f9QuvqXpyBRgljniwuhK4nC6SN8= - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha1-F++kBerMbge+NBSlyi0QdGgdTik= - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-replace-overflow-wrap@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/postcss-replace-overflow-wrap/download/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" - integrity sha1-YbNg/9rtyoTHyRjSsPDQ6lWasBw= - dependencies: - postcss "^7.0.2" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/postcss-resolve-nested-selector/download/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= - -postcss-safe-parser@4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-safe-parser/download/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" - integrity sha1-h1bZ5MNv3OLHKwkbvIyhdqsfzeo= - dependencies: - postcss "^7.0.0" - -postcss-safe-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/postcss-safe-parser/download/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha1-ptTkjw832ffBGypYG/APi6SHC5Y= - dependencies: - postcss "^7.0.26" - -postcss-sass@^0.4.4: - version "0.4.4" - resolved "https://registry.npmmirror.com/postcss-sass/download/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3" - integrity sha1-kfDzRHtFzjcyJ6mLYfjY8HhShaM= - dependencies: - gonzales-pe "^4.3.0" - postcss "^7.0.21" - -postcss-scss@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/postcss-scss/download/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383" - integrity sha1-7Dp1+imlXgFrkL8yaQJsU8HSs4M= - dependencies: - postcss "^7.0.6" - -postcss-selector-matches@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/postcss-selector-matches/download/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" - integrity sha1-ccgkj5F7osyTA3yWN+4JxkQ2/P8= - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-not@^4.0.0: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-selector-not/download/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" - integrity sha1-JjAW7vHPIZ4K3pqRN4D8H0ggTL8= - dependencies: - balanced-match "^1.0.0" - postcss "^7.0.2" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA= - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: - version "5.0.0" - resolved "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha1-JJBENWaXsztk8aj3yAki3d7nGVw= - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.5: - version "6.0.9" - resolved "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" - integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/postcss-svgo/download/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" - integrity sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4= - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.npmmirror.com/postcss-syntax/download/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" - integrity sha1-8IV4x9lYNFdOVZOoLfv6ivrjtRw= - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w= - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0: - version "3.3.1" - resolved "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.2.0" - resolved "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/postcss-values-parser/download/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" - integrity sha1-2otHLZAdoeIFtHvcmGN7np5VDl8= - dependencies: - flatten "^1.0.2" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss@7.0.21: - version "7.0.21" - resolved "https://registry.npmmirror.com/postcss/download/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" - integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.39" - resolved "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== - dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.npmmirror.com/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prettier@^2.0.5: - version "2.5.1" - resolved "https://registry.npmmirror.com/prettier/download/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== - -pretty-bytes@^5.1.0: - version "5.6.0" - resolved "https://registry.npmmirror.com/pretty-bytes/download/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha1-NWJW9kOAR3PIL2RyP+eMksYr6us= - -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.npmmirror.com/pretty-error/download/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y= - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.npmmirror.com/pretty-format/download/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha1-EvrDGzcBmk7qPBGqmpWet2KKp8k= - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -pretty-format@^27.4.6: - version "27.4.6" - resolved "https://registry.npmmirror.com/pretty-format/download/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" - integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.npmmirror.com/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmmirror.com/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.npmmirror.com/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= - dependencies: - asap "~2.0.3" - -promise@^8.0.3: - version "8.1.0" - resolved "https://registry.npmmirror.com/promise/download/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha1-aXwlw9/nQ13Xn81Yw4oTWIjq8F4= - dependencies: - asap "~2.0.6" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmmirror.com/prompts/download/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha1-e1fnOzpIAprRDr1E90sBcipMsGk= - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.npmmirror.com/prop-types/download/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.npmmirror.com/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.npmmirror.com/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA= - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/pump/download/pump-2.0.1.tgz?cache=0&sync_timestamp=1624607960506&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpump%2Fdownload%2Fpump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/pump/download/pump-3.0.0.tgz?cache=0&sync_timestamp=1624607960506&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpump%2Fdownload%2Fpump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.npmmirror.com/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.npmmirror.com/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.npmmirror.com/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= - -pure-color@^1.2.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/pure-color/download/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.npmmirror.com/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.npmmirror.com/qs/download/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.npmmirror.com/query-string/download/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.npmmirror.com/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmmirror.com/querystringify/download/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y= - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmmirror.com/queue-microtask/download/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= - -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/quick-lru/download/quick-lru-4.0.1.tgz?cache=0&sync_timestamp=1637478663596&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fquick-lru%2Fdownload%2Fquick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha1-W4h48ROlgheEjGSCAmxz4bpXcn8= - -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.npmmirror.com/raf/download/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk= - dependencies: - performance-now "^2.1.0" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/randombytes/download/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.npmmirror.com/randomfill/download/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha1-ySGW/IarQr6YPxvzF3giSTHWFFg= - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc-align@^4.0.0: - version "4.0.11" - resolved "https://registry.npmmirror.com/rc-align/download/rc-align-4.0.11.tgz?cache=0&sync_timestamp=1628678366435&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-align%2Fdownload%2Frc-align-4.0.11.tgz#8198c62db266bc1b8ef05e56c13275bf72628a5e" - integrity sha1-gZjGLbJmvBuO8F5WwTJ1v3Jiil4= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - dom-align "^1.7.0" - lodash "^4.17.21" - rc-util "^5.3.0" - resize-observer-polyfill "^1.5.1" - -rc-cascader@~3.2.1: - version "3.2.1" - resolved "https://registry.npmmirror.com/rc-cascader/download/rc-cascader-3.2.1.tgz#fc928d67d96c3d9f358263e4a9127bcf4257cc6b" - integrity sha512-Raxam9tFzBL4TCgHoyVcf7+Q2KSFneUk3FZXi9w1tfxEihLlezSH0oCNMjHJN8hxWwwx9ZbI9UzWTfFImjXc0Q== - dependencies: - "@babel/runtime" "^7.12.5" - array-tree-filter "^2.1.0" - classnames "^2.3.1" - rc-select "~14.0.0-alpha.23" - rc-tree "~5.4.3" - rc-util "^5.6.1" - -rc-checkbox@~2.3.0: - version "2.3.2" - resolved "https://registry.npmmirror.com/rc-checkbox/download/rc-checkbox-2.3.2.tgz#f91b3678c7edb2baa8121c9483c664fa6f0aefc1" - integrity sha1-+Rs2eMftsrqoEhyUg8Zk+m8K78E= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - -rc-collapse@~3.1.0: - version "3.1.2" - resolved "https://registry.npmmirror.com/rc-collapse/download/rc-collapse-3.1.2.tgz#76028a811b845d03d9460ccc409c7ea8ad09db14" - integrity sha1-dgKKgRuEXQPZRgzMQJx+qK0J2xQ= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.3.4" - rc-util "^5.2.1" - shallowequal "^1.1.0" - -rc-dialog@~8.6.0: - version "8.6.0" - resolved "https://registry.npmmirror.com/rc-dialog/download/rc-dialog-8.6.0.tgz?cache=0&sync_timestamp=1627272166293&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-dialog%2Fdownload%2Frc-dialog-8.6.0.tgz#3b228dac085de5eed8c6237f31162104687442e7" - integrity sha1-OyKNrAhd5e7YxiN/MRYhBGh0Quc= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-motion "^2.3.0" - rc-util "^5.6.1" - -rc-drawer@~4.4.2: - version "4.4.3" - resolved "https://registry.npmmirror.com/rc-drawer/download/rc-drawer-4.4.3.tgz?cache=0&sync_timestamp=1637134392366&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frc-drawer%2Fdownload%2Frc-drawer-4.4.3.tgz#2094937a844e55dc9644236a2d9fba79c344e321" - integrity sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-util "^5.7.0" - -rc-dropdown@^3.2.0, rc-dropdown@~3.2.0: - version "3.2.2" - resolved "https://registry.npmmirror.com/rc-dropdown/download/rc-dropdown-3.2.2.tgz#0fee9a66f100d686ddaa8d09717d090f72e1ce29" - integrity sha512-oA9VYYg+jQaPRdFoYFfBn5EAQk2NlL6H0vR2v6JG/8i4HEfUq8p1TTt6HyQ/dGxLe8lpnK+nM7WCjgZT/cpSRQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-trigger "^5.0.4" - -rc-field-form@~1.22.0-2: - version "1.22.1" - resolved "https://registry.npmmirror.com/rc-field-form/download/rc-field-form-1.22.1.tgz#0bd2f4e730ff2f071529d00bef28e062362890f5" - integrity sha512-LweU7nBeqmC5r3HDUjRprcOXXobHXp/TGIxD7ppBq5FX6Iptt3ibdpRVg4RSyNulBNGHOuknHlRcguuIpvVMVg== - dependencies: - "@babel/runtime" "^7.8.4" - async-validator "^4.0.2" - rc-util "^5.8.0" - -rc-image@~5.2.5: - version "5.2.5" - resolved "https://registry.npmmirror.com/rc-image/download/rc-image-5.2.5.tgz#44e6ffc842626827960e7ab72e1c0d6f3a8ce440" - integrity sha1-ROb/yEJiaCeWDnq3LhwNbzqM5EA= - dependencies: - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - rc-dialog "~8.6.0" - rc-util "^5.0.6" - -rc-input-number@~7.3.0: - version "7.3.4" - resolved "https://registry.npmmirror.com/rc-input-number/download/rc-input-number-7.3.4.tgz#674aea98260250287d36e330a7e065b174486e9d" - integrity sha512-W9uqSzuvJUnz8H8vsVY4kx+yK51SsAxNTwr8SNH4G3XqQNocLVmKIibKFRjocnYX1RDHMND9FFbgj2h7E7nvGA== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-util "^5.9.8" - -rc-mentions@~1.6.1: - version "1.6.1" - resolved "https://registry.npmmirror.com/rc-mentions/download/rc-mentions-1.6.1.tgz#46035027d64aa33ef840ba0fbd411871e34617ae" - integrity sha1-RgNQJ9ZKoz74QLoPvUEYceNGF64= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-menu "^9.0.0" - rc-textarea "^0.3.0" - rc-trigger "^5.0.4" - rc-util "^5.0.1" - -rc-menu@^9.0.0: - version "9.3.1" - resolved "https://registry.npmmirror.com/rc-menu/download/rc-menu-9.3.1.tgz#a0e502938d2b7467ea8d343ae00c4af6019ba412" - integrity sha512-D9ZHlwtTpch0v15LXt7PRbAl+FCxXNEllly9fl1GhLzz52iTL2NVqzofecV5Yv3ekLUOojg+gkykv4elLNBKWg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.4.3" - rc-overflow "^1.2.0" - rc-trigger "^5.1.2" - rc-util "^5.12.0" - shallowequal "^1.1.0" - -rc-menu@~9.2.1: - version "9.2.1" - resolved "https://registry.npmmirror.com/rc-menu/download/rc-menu-9.2.1.tgz#6fbe47f4846363bb81a5a21f0960026c3ada497a" - integrity sha512-UbEtn3rflJ8zS+etYGTVQuzy7Fm+yWXR5c0Rl6ecNTS/dPknRyWAyhJcbeR0Hu1+RdQT+0VCqrUPrgKnm4iY+w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.4.3" - rc-overflow "^1.2.0" - rc-trigger "^5.1.2" - rc-util "^5.12.0" - shallowequal "^1.1.0" - -rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4: - version "2.4.4" - resolved "https://registry.npmmirror.com/rc-motion/download/rc-motion-2.4.4.tgz#e995d5fa24fc93065c24f714857cf2677d655bb0" - integrity sha1-6ZXV+iT8kwZcJPcUhXzyZ31lW7A= - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-util "^5.2.1" - -rc-notification@~4.5.7: - version "4.5.7" - resolved "https://registry.npmmirror.com/rc-notification/download/rc-notification-4.5.7.tgz#265e6e6a0c1a0fac63d6abd4d832eb8ff31522f1" - integrity sha1-Jl5uagwaD6xj1qvU2DLrj/MVIvE= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.2.0" - rc-util "^5.0.1" - -rc-overflow@^1.0.0, rc-overflow@^1.2.0: - version "1.2.2" - resolved "https://registry.npmmirror.com/rc-overflow/download/rc-overflow-1.2.2.tgz#95b0222016c0cdbdc0db85f569c262e7706a5f22" - integrity sha1-lbAiIBbAzb3A24X1acJi53BqXyI= - dependencies: - "@babel/runtime" "^7.11.1" - classnames "^2.2.1" - rc-resize-observer "^1.0.0" - rc-util "^5.5.1" - -rc-pagination@~3.1.9: - version "3.1.15" - resolved "https://registry.npmmirror.com/rc-pagination/download/rc-pagination-3.1.15.tgz#e05eddf4c15717a5858290bed0857e27e2f957ff" - integrity sha512-4L3fot8g4E+PjWEgoVGX0noFCg+8ZFZmeLH4vsnZpB3O2T2zThtakjNxG+YvSaYtyMVT4B+GLayjKrKbXQpdAg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - -rc-picker@~2.5.17: - version "2.5.19" - resolved "https://registry.npmmirror.com/rc-picker/download/rc-picker-2.5.19.tgz#73d07546fac3992f0bfabf2789654acada39e46f" - integrity sha1-c9B1RvrDmS8L+r8niWVKyto55G8= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - date-fns "2.x" - dayjs "1.x" - moment "^2.24.0" - rc-trigger "^5.0.4" - rc-util "^5.4.0" - shallowequal "^1.1.0" - -rc-progress@~3.2.1: - version "3.2.4" - resolved "https://registry.npmmirror.com/rc-progress/download/rc-progress-3.2.4.tgz#4036acdae2566438545bc4df2203248babaf7549" - integrity sha512-M9WWutRaoVkPUPIrTpRIDpX0SPSrVHzxHdCRCbeoBFrd9UFWTYNWRlHsruJM5FH1AZI+BwB4wOJUNNylg/uFSw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.6" - rc-util "^5.16.1" - -rc-rate@~2.9.0: - version "2.9.1" - resolved "https://registry.npmmirror.com/rc-rate/download/rc-rate-2.9.1.tgz#e43cb95c4eb90a2c1e0b16ec6614d8c43530a731" - integrity sha1-5Dy5XE65CiweCxbsZhTYxDUwpzE= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-util "^5.0.1" - -rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/rc-resize-observer/download/rc-resize-observer-1.2.0.tgz#9f46052f81cdf03498be35144cb7c53fd282c4c7" - integrity sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-util "^5.15.0" - resize-observer-polyfill "^1.5.1" - -rc-select@~14.0.0-alpha.15, rc-select@~14.0.0-alpha.23, rc-select@~14.0.0-alpha.8: - version "14.0.0-alpha.25" - resolved "https://registry.npmmirror.com/rc-select/download/rc-select-14.0.0-alpha.25.tgz#9e6ca83b090e020a730fdfdab07c1050549426e4" - integrity sha512-U9AMzXsOCCdtn96YIZdUrYbxk+5u6uWUCaYH2129X3FTjQITqAjEPYHfPcxU/G7+lwiD0pIaU95W0NMkg+26qw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.0.1" - rc-overflow "^1.0.0" - rc-trigger "^5.0.4" - rc-util "^5.16.1" - rc-virtual-list "^3.2.0" - -rc-slider@~9.7.4: - version "9.7.5" - resolved "https://registry.npmmirror.com/rc-slider/download/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4" - integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-tooltip "^5.0.1" - rc-util "^5.16.1" - shallowequal "^1.1.0" - -rc-steps@~4.1.0: - version "4.1.4" - resolved "https://registry.npmmirror.com/rc-steps/download/rc-steps-4.1.4.tgz#0ba82db202d59ca52d0693dc9880dd145b19dc23" - integrity sha1-C6gtsgLVnKUtBpPcmIDdFFsZ3CM= - dependencies: - "@babel/runtime" "^7.10.2" - classnames "^2.2.3" - rc-util "^5.0.1" - -rc-switch@~3.2.0: - version "3.2.2" - resolved "https://registry.npmmirror.com/rc-switch/download/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8" - integrity sha1-0AH3fxJmTVJZW09vtCXdnmb7qOg= - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-util "^5.0.1" - -rc-table@~7.22.2: - version "7.22.2" - resolved "https://registry.npmmirror.com/rc-table/download/rc-table-7.22.2.tgz#218f3f53bc91660560a344c8290a91a841a60b0a" - integrity sha512-Ng2gNkGi6ybl6dzneRn2H4Gp8XhIbRa5rXQ7ZhZcgWVmfVMok70UHGPXcf68tXW6O0/qckTf/eOVsoviSvK4sw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-resize-observer "^1.1.0" - rc-util "^5.14.0" - shallowequal "^1.1.0" - -rc-tabs@~11.10.0: - version "11.10.5" - resolved "https://registry.npmmirror.com/rc-tabs/download/rc-tabs-11.10.5.tgz#53bbb642d04b307f8ce86e318ab99d519507b29b" - integrity sha512-DDuUdV6b9zGRYLtjI5hyejWLKoz1QiLWNgMeBzc3aMeQylZFhTYnFGdDc6HRqj5IYearNTsFPVSA+6VIT8g5cg== - dependencies: - "@babel/runtime" "^7.11.2" - classnames "2.x" - rc-dropdown "^3.2.0" - rc-menu "^9.0.0" - rc-resize-observer "^1.0.0" - rc-util "^5.5.0" - -rc-textarea@^0.3.0, rc-textarea@~0.3.0: - version "0.3.7" - resolved "https://registry.npmmirror.com/rc-textarea/download/rc-textarea-0.3.7.tgz#987142891efdedb774883c07e2f51b318fde5a11" - integrity sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.1" - rc-resize-observer "^1.0.0" - rc-util "^5.7.0" - shallowequal "^1.1.0" - -rc-tooltip@^5.0.1, rc-tooltip@~5.1.1: - version "5.1.1" - resolved "https://registry.npmmirror.com/rc-tooltip/download/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154" - integrity sha1-lBeO0WLQJSvEmTtyX13CrA/M8VQ= - dependencies: - "@babel/runtime" "^7.11.2" - rc-trigger "^5.0.0" - -rc-tree-select@~5.1.1: - version "5.1.2" - resolved "https://registry.npmmirror.com/rc-tree-select/download/rc-tree-select-5.1.2.tgz#0dfe12f01b9b0dc9ce658b96501692d4421b8366" - integrity sha512-sTulyQZB1SgF2HzAR49i4vjMNvV/tfPxCTc+qNuWOwaAtSm2bwGH6/wfi3k3Dw2/5PPOGpRRpgCMltoP9aG0+w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-select "~14.0.0-alpha.8" - rc-tree "~5.4.3" - rc-util "^5.16.1" - -rc-tree@~5.4.3: - version "5.4.3" - resolved "https://registry.npmmirror.com/rc-tree/download/rc-tree-5.4.3.tgz#8674644964e17e5ab9b111c5aa18676f673e7bd0" - integrity sha512-WAHV8FkBerulj9J/+61+Qn0TD/Zo37PrDG8/45WomzGTYavxFMur9YguKjQj/J+NxjVJzrJL3lvdSZsumfdbiA== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "2.x" - rc-motion "^2.0.1" - rc-util "^5.16.1" - rc-virtual-list "^3.4.1" - -rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10: - version "5.2.10" - resolved "https://registry.npmmirror.com/rc-trigger/download/rc-trigger-5.2.10.tgz#8a0057a940b1b9027eaa33beec8a6ecd85cce2b1" - integrity sha1-igBXqUCxuQJ+qjO+7IpuzYXM4rE= - dependencies: - "@babel/runtime" "^7.11.2" - classnames "^2.2.6" - rc-align "^4.0.0" - rc-motion "^2.0.0" - rc-util "^5.5.0" - -rc-upload@~4.3.0: - version "4.3.3" - resolved "https://registry.npmmirror.com/rc-upload/download/rc-upload-4.3.3.tgz#e237aa525e5313fa16f4d04d27f53c2f0e157bb8" - integrity sha512-YoJ0phCRenMj1nzwalXzciKZ9/FAaCrFu84dS5pphwucTC8GUWClcDID/WWNGsLFcM97NqIboDqrV82rVRhW/w== - dependencies: - "@babel/runtime" "^7.10.1" - classnames "^2.2.5" - rc-util "^5.2.0" - -rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.0.7, rc-util@^5.12.0, rc-util@^5.14.0, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.5.1, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4, rc-util@^5.9.8: - version "5.17.0" - resolved "https://registry.npmmirror.com/rc-util/download/rc-util-5.17.0.tgz#6b0788038075c3d5c215541539573a4a03827070" - integrity sha512-HWuTIKzBeZQQ7IBqdokE0wMp/xx39/KfUJ0gcquBigoldDCrf3YBcWFHrrQlJG7sI82Wg8mwp1uAKV3zMGfAgg== - dependencies: - "@babel/runtime" "^7.12.5" - react-is "^16.12.0" - shallowequal "^1.1.0" - -rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.1: - version "3.4.2" - resolved "https://registry.npmmirror.com/rc-virtual-list/download/rc-virtual-list-3.4.2.tgz#1078327aa7230b5e456d679ed2ce99f3c036ebd1" - integrity sha1-EHgyeqcjC15FbWee0s6Z88A269E= - dependencies: - classnames "^2.2.6" - rc-resize-observer "^1.0.0" - rc-util "^5.0.7" - -react-app-polyfill@^1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/react-app-polyfill/download/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" - integrity sha1-iQ+NfyhCzmBz8DCxF96RMKXzhfA= - dependencies: - core-js "^3.5.0" - object-assign "^4.1.1" - promise "^8.0.3" - raf "^3.4.1" - regenerator-runtime "^0.13.3" - whatwg-fetch "^3.0.0" - -react-app-rewired@^2.1.6: - version "2.1.11" - resolved "https://registry.npmmirror.com/react-app-rewired/download/react-app-rewired-2.1.11.tgz#ad5781e3ef5e506be935898bb7642f7f9d50b61a" - integrity sha512-zRIqJUPsCoPnfYtea3xgPbKR42vx0NoH5oo8R8FELXqzkjJHa39V6zD8CAdkLJoYL8V3JScWHAfKMZOzi1Ydmw== - dependencies: - semver "^5.6.0" - -react-base16-styling@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/react-base16-styling/download/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= - dependencies: - base16 "^1.0.0" - lodash.curry "^4.0.1" - lodash.flow "^3.3.0" - pure-color "^1.2.0" - -react-dev-utils@^10.2.1: - version "10.2.1" - resolved "https://registry.npmmirror.com/react-dev-utils/download/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" - integrity sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ== - dependencies: - "@babel/code-frame" "7.8.3" - address "1.1.2" - browserslist "4.10.0" - chalk "2.4.2" - cross-spawn "7.0.1" - detect-port-alt "1.1.6" - escape-string-regexp "2.0.0" - filesize "6.0.1" - find-up "4.1.0" - fork-ts-checker-webpack-plugin "3.1.1" - global-modules "2.0.0" - globby "8.0.2" - gzip-size "5.1.1" - immer "1.10.0" - inquirer "7.0.4" - is-root "2.1.0" - loader-utils "1.2.3" - open "^7.0.2" - pkg-up "3.1.0" - react-error-overlay "^6.0.7" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - strip-ansi "6.0.0" - text-table "0.2.0" - -react-dnd-html5-backend@^11.1.3: - version "11.1.3" - resolved "https://registry.npmmirror.com/react-dnd-html5-backend/download/react-dnd-html5-backend-11.1.3.tgz#2749f04f416ec230ea193f5c1fbea2de7dffb8f7" - integrity sha1-J0nwT0FuwjDqGT9cH76i3n3/uPc= - dependencies: - dnd-core "^11.1.3" - -react-dnd@^11.1.3: - version "11.1.3" - resolved "https://registry.npmmirror.com/react-dnd/download/react-dnd-11.1.3.tgz#f9844f5699ccc55dfc81462c2c19f726e670c1af" - integrity sha1-+YRPVpnMxV38gUYsLBn3JuZwwa8= - dependencies: - "@react-dnd/shallowequal" "^2.0.0" - "@types/hoist-non-react-statics" "^3.3.1" - dnd-core "^11.1.3" - hoist-non-react-statics "^3.3.0" - -react-dom@^16.13.1: - version "16.14.0" - resolved "https://registry.npmmirror.com/react-dom/download/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-error-overlay@^6.0.7: - version "6.0.10" - resolved "https://registry.npmmirror.com/react-error-overlay/download/react-error-overlay-6.0.10.tgz#0fe26db4fa85d9dbb8624729580e90e7159a59a6" - integrity sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA== - -react-highlight-words@^0.16.0: - version "0.16.0" - resolved "https://registry.npmmirror.com/react-highlight-words/download/react-highlight-words-0.16.0.tgz#4b4b9824e3d2b98789d3e3b3aedb5e961ae1b7cf" - integrity sha1-S0uYJOPSuYeJ0+Ozrttelhrht88= - dependencies: - highlight-words-core "^1.2.0" - memoize-one "^4.0.0" - prop-types "^15.5.8" - -react-i18next@^11.7.3: - version "11.15.3" - resolved "https://registry.npmmirror.com/react-i18next/download/react-i18next-11.15.3.tgz#7608fb3cacc02ac75a62fc2d68b579f140b198dd" - integrity sha512-RSUEM4So3Tu2JHV0JsZ5Yje+4nz66YViMfPZoywxOy0xyn3L7tE2CHvJ7Y9LUsrTU7vGmZ5bwb8PpjnkatdIxg== - dependencies: - "@babel/runtime" "^7.14.5" - html-escaper "^2.0.2" - html-parse-stringify "^3.0.1" - -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.4: - version "16.13.1" - resolved "https://registry.npmmirror.com/react-is/download/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmmirror.com/react-is/download/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA= - -react-json-view@^1.19.1: - version "1.21.3" - resolved "https://registry.npmmirror.com/react-json-view/download/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" - integrity sha1-8YQgnujxvzdPsMQbCBPP9UVJxHU= - dependencies: - flux "^4.0.1" - react-base16-styling "^0.6.0" - react-lifecycles-compat "^3.0.4" - react-textarea-autosize "^8.3.2" - -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.npmmirror.com/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha1-TxonOv38jzSIqMUWv9p4+HI1I2I= - -react-popper-tooltip@^2.11.1: - version "2.11.1" - resolved "https://registry.npmmirror.com/react-popper-tooltip/download/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" - integrity sha1-PEvf2LwQ0cK5oWLoWbq4lY9bJkQ= - dependencies: - "@babel/runtime" "^7.9.2" - react-popper "^1.3.7" - -react-popper@^1.3.7: - version "1.3.11" - resolved "https://registry.npmmirror.com/react-popper/download/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" - integrity sha1-osw/Cme3W2bPpi0sQJ+d0fzHH/0= - dependencies: - "@babel/runtime" "^7.1.2" - "@hypnosphi/create-react-context" "^0.3.1" - deep-equal "^1.1.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - -react-scripts@3.4.1: - version "3.4.1" - resolved "https://registry.npmmirror.com/react-scripts/download/react-scripts-3.4.1.tgz#f551298b5c71985cc491b9acf3c8e8c0ae3ada0a" - integrity sha1-9VEpi1xxmFzEkbms88jowK462go= - dependencies: - "@babel/core" "7.9.0" - "@svgr/webpack" "4.3.3" - "@typescript-eslint/eslint-plugin" "^2.10.0" - "@typescript-eslint/parser" "^2.10.0" - babel-eslint "10.1.0" - babel-jest "^24.9.0" - babel-loader "8.1.0" - babel-plugin-named-asset-import "^0.3.6" - babel-preset-react-app "^9.1.2" - camelcase "^5.3.1" - case-sensitive-paths-webpack-plugin "2.3.0" - css-loader "3.4.2" - dotenv "8.2.0" - dotenv-expand "5.1.0" - eslint "^6.6.0" - eslint-config-react-app "^5.2.1" - eslint-loader "3.0.3" - eslint-plugin-flowtype "4.6.0" - eslint-plugin-import "2.20.1" - eslint-plugin-jsx-a11y "6.2.3" - eslint-plugin-react "7.19.0" - eslint-plugin-react-hooks "^1.6.1" - file-loader "4.3.0" - fs-extra "^8.1.0" - html-webpack-plugin "4.0.0-beta.11" - identity-obj-proxy "3.0.0" - jest "24.9.0" - jest-environment-jsdom-fourteen "1.0.1" - jest-resolve "24.9.0" - jest-watch-typeahead "0.4.2" - mini-css-extract-plugin "0.9.0" - optimize-css-assets-webpack-plugin "5.0.3" - pnp-webpack-plugin "1.6.4" - postcss-flexbugs-fixes "4.1.0" - postcss-loader "3.0.0" - postcss-normalize "8.0.1" - postcss-preset-env "6.7.0" - postcss-safe-parser "4.0.1" - react-app-polyfill "^1.0.6" - react-dev-utils "^10.2.1" - resolve "1.15.0" - resolve-url-loader "3.1.1" - sass-loader "8.0.2" - semver "6.3.0" - style-loader "0.23.1" - terser-webpack-plugin "2.3.5" - ts-pnp "1.1.6" - url-loader "2.3.0" - webpack "4.42.0" - webpack-dev-server "3.10.3" - webpack-manifest-plugin "2.2.0" - workbox-webpack-plugin "4.3.1" - optionalDependencies: - fsevents "2.1.2" - -react-textarea-autosize@^8.3.2: - version "8.3.3" - resolved "https://registry.npmmirror.com/react-textarea-autosize/download/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" - integrity sha1-9wkTlFNp2kU/1VTBaPa6rNH6BNg= - dependencies: - "@babel/runtime" "^7.10.2" - use-composed-ref "^1.0.0" - use-latest "^1.0.0" - -react@^16.13.1: - version "16.14.0" - resolved "https://registry.npmmirror.com/react/download/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg= - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/read-pkg/download/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/read-pkg/download/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.npmmirror.com/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmmirror.com/readdirp/download/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc= - dependencies: - picomatch "^2.2.1" - -realpath-native@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/realpath-native/download/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha1-IAMpT+oj+wZy8kduviL89Jii1lw= - dependencies: - util.promisify "^1.0.0" - -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.npmmirror.com/recursive-readdir/download/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha1-mUb7MnThYo3m42svZxSVO0hFCU8= - dependencies: - minimatch "3.0.4" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/redent/download/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8= - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - -redux@^4.0.4: - version "4.1.2" - resolved "https://registry.npmmirror.com/redux/download/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" - integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== - dependencies: - "@babel/runtime" "^7.9.2" - -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha1-VNCccRXh9T3CMUqXSzLBw0Tv4yY= - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmmirror.com/regenerate/download/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo= - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.npmmirror.com/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.npmmirror.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.npmmirror.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ= - dependencies: - "@babel/runtime" "^7.8.4" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regex-parser@2.2.10: - version "2.2.10" - resolved "https://registry.npmmirror.com/regex-parser/download/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37" - integrity sha1-nmao9z2JoQdhbmOznU3t3+6RKzc= - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.4.1" - resolved "https://registry.npmmirror.com/regexp.prototype.flags/download/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" - integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8= - -regexpp@^3.0.0: - version "3.2.0" - resolved "https://registry.npmmirror.com/regexpp/download/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha1-BCWido2PI7rXDKS5BGH6LxIT4bI= - -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.npmmirror.com/regexpu-core/download/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha1-5WBbo2G2excYR4UBMnUC9EeamPA= - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.npmmirror.com/regjsgen/download/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM= - -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.npmmirror.com/regjsparser/download/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha1-prZntUyIXhi1JVTLSWDvcRh+mWg= - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.npmmirror.com/relateurl/download/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remark-parse@^9.0.0: - version "9.0.0" - resolved "https://registry.npmmirror.com/remark-parse/download/remark-parse-9.0.0.tgz?cache=0&sync_timestamp=1637259966298&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fremark-parse%2Fdownload%2Fremark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" - integrity sha1-TSCimWZYgOT0r12Qt8e4qTWFNkA= - dependencies: - mdast-util-from-markdown "^0.8.0" - -remark-stringify@^9.0.0: - version "9.0.1" - resolved "https://registry.npmmirror.com/remark-stringify/download/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" - integrity sha1-V20G6RBUiwpxkacfJ7M/EhiGKJQ= - dependencies: - mdast-util-to-markdown "^0.6.0" - -remark@^13.0.0: - version "13.0.0" - resolved "https://registry.npmmirror.com/remark/download/remark-13.0.0.tgz?cache=0&sync_timestamp=1637260202521&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fremark%2Fdownload%2Fremark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425" - integrity sha1-0V2b9xpAL0Aofr42Bntm1Uho5CU= - dependencies: - remark-parse "^9.0.0" - remark-stringify "^9.0.0" - unified "^9.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.npmmirror.com/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.npmmirror.com/renderkid/download/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha1-Rk8namvc7mBvShWZP5sp/HTKhgk= - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.npmmirror.com/repeat-element/download/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek= - -repeat-string@^1.0.0, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.npmmirror.com/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/request-promise-core/download/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8= - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.npmmirror.com/request-promise-native/download/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg= - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.87.0, request@^2.88.0: - version "2.88.2" - resolved "https://registry.npmmirror.com/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/require-from-string/download/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.npmmirror.com/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= - -resolve-url-loader@3.1.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/resolve-url-loader/download/resolve-url-loader-3.1.1.tgz#28931895fa1eab9be0647d3b2958c100ae3c0bf0" - integrity sha1-KJMYlfoeq5vgZH07KVjBAK48C/A= - dependencies: - adjust-sourcemap-loader "2.0.0" - camelcase "5.3.1" - compose-function "3.0.3" - convert-source-map "1.7.0" - es6-iterator "2.0.3" - loader-utils "1.2.3" - postcss "7.0.21" - rework "1.0.1" - rework-visit "1.0.0" - source-map "0.6.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.npmmirror.com/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.npmmirror.com/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.15.0: - version "1.15.0" - resolved "https://registry.npmmirror.com/resolve/download/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" - integrity sha1-G3ypYHPrtS50H/15n2s56kYsZ/U= - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.22.0" - resolved "https://registry.npmmirror.com/resolve/download/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.npmmirror.com/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.npmmirror.com/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= - -rework-visit@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/rework-visit/download/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" - integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= - -rework@1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/rework/download/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" - integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= - dependencies: - convert-source-map "^0.3.3" - css "^2.0.0" - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/rgb-regex/download/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/rgba-regex/download/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.npmmirror.com/rimraf/download/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha1-stEE/g2Psnz54KHNqCYt04M8bKs= - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: - version "2.7.1" - resolved "https://registry.npmmirror.com/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw= - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.npmmirror.com/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ= - -run-async@^2.2.0, run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.npmmirror.com/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmmirror.com/run-parallel/download/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.5.3, rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.npmmirror.com/rxjs/download/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmmirror.com/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.npmmirror.com/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0= - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -sanitize.css@^10.0.0: - version "10.0.0" - resolved "https://registry.npmmirror.com/sanitize.css/download/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" - integrity sha1-tcslR+lthimmCUdURmUkOx3DZXo= - -sass-loader@8.0.2: - version "8.0.2" - resolved "https://registry.npmmirror.com/sass-loader/download/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== - dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" - -sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.npmmirror.com/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= - -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.npmmirror.com/saxes/download/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs= - dependencies: - xmlchars "^2.1.1" - -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.npmmirror.com/scheduler/download/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha1-Tz4u0sGn1laB9MhU+oxaHMtA8ZY= - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5: - version "2.7.1" - resolved "https://registry.npmmirror.com/schema-utils/download/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc= - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - -scroll-into-view-if-needed@^2.2.25: - version "2.2.28" - resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/download/scroll-into-view-if-needed-2.2.28.tgz#5a15b2f58a52642c88c8eca584644e01703d645a" - integrity sha1-WhWy9YpSZCyIyOylhGROAXA9ZFo= - dependencies: - compute-scroll-into-view "^1.0.17" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.7: - version "1.10.14" - resolved "https://registry.npmmirror.com/selfsigned/download/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" - integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA== - dependencies: - node-forge "^0.10.0" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.npmmirror.com/serialize-javascript/download/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha1-7OxTsOAxe9yV73arcHS3OEeF+mE= - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao= - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.npmmirror.com/serve-index/download/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1631437838608&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4, setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.npmmirror.com/sha.js/download/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.npmmirror.com/shallow-clone/download/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA= - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/shallow-clone/download/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha1-jymBrZJTH1UDWwH7IwdppA4C76M= - dependencies: - kind-of "^6.0.2" - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/shallowequal/download/shallowequal-1.1.0.tgz?cache=0&sync_timestamp=1624608058307&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshallowequal%2Fdownload%2Fshallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha1-GI1SHelbkIdAT9TctosT3wrk5/g= - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1628896660639&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896660639&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= - -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.npmmirror.com/shell-quote/download/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I= - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.npmmirror.com/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha1-1rkYHBpI05cyTISHHvvPxz/AZUs= - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.6" - resolved "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmmirror.com/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/slash/download/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q= - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY= - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/slice-ansi/download/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms= - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.npmmirror.com/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.npmmirror.com/sockjs-client/download/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U= - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.npmmirror.com/sockjs/download/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== - dependencies: - faye-websocket "^0.10.0" - uuid "^3.0.1" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.npmmirror.com/sort-keys/download/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.npmmirror.com/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.npmmirror.com/source-map-url/download/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY= - -source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.npmmirror.com/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/spdx-correct/download/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha1-3s6BrJweZxPl99G28X1Gj6U9iak= - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0= - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha1-z3D1BILu/cmOPOCmgz5KU87rpnk= - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.npmmirror.com/spdx-license-ids/download/spdx-license-ids-3.0.11.tgz?cache=0&sync_timestamp=1636978442514&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/spdy-transport/download/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha1-ANSGOmQArXXfkzYaFghgXl3NzzE= - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.1: - version "4.0.2" - resolved "https://registry.npmmirror.com/spdy/download/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha1-t09GYgOj7aRSwCSSuR+56EonZ3s= - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/specificity/download/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - integrity sha1-qrXmRQEtsIuhguFRFlc40AiHsBk= - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.npmmirror.com/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmmirror.com/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.npmmirror.com/sshpk/download/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.npmmirror.com/ssri/download/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha1-FXk5E08gRk5zAd26PpD/qPdyisU= - dependencies: - figgy-pudding "^3.5.1" - -ssri@^7.0.0: - version "7.1.1" - resolved "https://registry.npmmirror.com/ssri/download/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" - integrity sha1-M+RPiWqWcVjjxjRo5H7EZhO5W18= - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.npmmirror.com/stable/download/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88= - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.npmmirror.com/stack-utils/download/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha1-oZsLAZR+ACnI5FHV1hpJj1uxRxs= - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.npmmirror.com/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmmirror.com/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs= - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.npmmirror.com/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.npmmirror.com/stream-http/download/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw= - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/stream-shift/download/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0= - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-convert@^0.2.0: - version "0.2.1" - resolved "https://registry.npmmirror.com/string-convert/download/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" - integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/string-length/download/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/string-length/download/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha1-EH74wjRW4Yeoq9SmEWL/SsbiWDc= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA= - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.2: - version "4.0.6" - resolved "https://registry.npmmirror.com/string.prototype.matchall/download/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" - integrity sha1-Wrtdq8lMew6iOA9lumELOlRLFfo= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha1-51rpDClCxjUEaGwYsoe0oLGkX4A= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.npmmirror.com/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0= - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= - dependencies: - safe-buffer "~5.1.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.npmmirror.com/stringify-object/download/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha1-cDBlrvyhkwDTzoivT1s5VtdVZik= - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk= - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/strip-bom/download/strip-bom-3.0.0.tgz?cache=0&sync_timestamp=1624608094529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-bom%2Fdownload%2Fstrip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-comments@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/strip-comments/download/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" - integrity sha1-grnEXn8FhzvuU/NxaK+TCqNoZ50= - dependencies: - babel-extract-comments "^1.0.0" - babel-plugin-transform-object-rest-spread "^6.26.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/strip-indent/download/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha1-wy4c7pQLazQyx3G8LFS8znPNMAE= - dependencies: - min-indent "^1.0.0" - -strip-json-comments@^3.0.1: - version "3.1.1" - resolved "https://registry.npmmirror.com/strip-json-comments/download/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= - -style-loader@0.23.1: - version "0.23.1" - resolved "https://registry.npmmirror.com/style-loader/download/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" - integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== - dependencies: - loader-utils "^1.1.0" - schema-utils "^1.0.0" - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/style-search/download/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= - -style-value-types@^3.1.9: - version "3.2.0" - resolved "https://registry.npmmirror.com/style-value-types/download/style-value-types-3.2.0.tgz#eb89cab1340823fa7876f3e289d29d99c92111bb" - integrity sha1-64nKsTQII/p4dvPiidKdmckhEbs= - dependencies: - hey-listen "^1.0.8" - tslib "^1.10.0" - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.npmmirror.com/stylehacks/download/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU= - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylelint-config-recommended@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/stylelint-config-recommended/download/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657" - integrity sha1-4OVHQ0AWxVOf4mUK/VgEmi/R1lc= - -stylelint-config-standard@^20.0.0: - version "20.0.0" - resolved "https://registry.npmmirror.com/stylelint-config-standard/download/stylelint-config-standard-20.0.0.tgz?cache=0&sync_timestamp=1636911768470&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstylelint-config-standard%2Fdownload%2Fstylelint-config-standard-20.0.0.tgz#06135090c9e064befee3d594289f50e295b5e20d" - integrity sha1-BhNQkMngZL7+49WUKJ9Q4pW14g0= - dependencies: - stylelint-config-recommended "^3.0.0" - -stylelint@^13.6.1: - version "13.13.1" - resolved "https://registry.npmmirror.com/stylelint/download/stylelint-13.13.1.tgz#fca9c9f5de7990ab26a00f167b8978f083a18f3c" - integrity sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ== - dependencies: - "@stylelint/postcss-css-in-js" "^0.37.2" - "@stylelint/postcss-markdown" "^0.36.2" - autoprefixer "^9.8.6" - balanced-match "^2.0.0" - chalk "^4.1.1" - cosmiconfig "^7.0.0" - debug "^4.3.1" - execall "^2.0.0" - fast-glob "^3.2.5" - fastest-levenshtein "^1.0.12" - file-entry-cache "^6.0.1" - get-stdin "^8.0.0" - global-modules "^2.0.0" - globby "^11.0.3" - globjoin "^0.1.4" - html-tags "^3.1.0" - ignore "^5.1.8" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - known-css-properties "^0.21.0" - lodash "^4.17.21" - log-symbols "^4.1.0" - mathml-tag-names "^2.1.3" - meow "^9.0.0" - micromatch "^4.0.4" - normalize-selector "^0.2.0" - postcss "^7.0.35" - postcss-html "^0.36.0" - postcss-less "^3.1.4" - postcss-media-query-parser "^0.2.3" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.2" - postcss-sass "^0.4.4" - postcss-scss "^2.1.1" - postcss-selector-parser "^6.0.5" - postcss-syntax "^0.36.2" - postcss-value-parser "^4.1.0" - resolve-from "^5.0.0" - slash "^3.0.0" - specificity "^0.4.1" - string-width "^4.2.2" - strip-ansi "^6.0.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^6.6.0" - v8-compile-cache "^2.3.0" - write-file-atomic "^3.0.3" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/sugarss/download/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - integrity sha1-3dduASSyl9QL88yjHIsi7LQ7xh0= - dependencies: - postcss "^7.0.2" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.npmmirror.com/supports-color/download/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-parser@^2.0.0: - version "2.0.4" - resolved "https://registry.npmmirror.com/svg-parser/download/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha1-/cLinhOVFzYUC3bLEiyO5mMOtrU= - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/svg-tags/download/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -svgo@^1.0.0, svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.npmmirror.com/svgo/download/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.npmmirror.com/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I= - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.npmmirror.com/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54= - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -table@^6.6.0: - version "6.8.0" - resolved "https://registry.npmmirror.com/table/download/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.npmmirror.com/tapable/download/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -terser-webpack-plugin@2.3.5: - version "2.3.5" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/download/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" - integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.2.0" - jest-worker "^25.1.0" - p-limit "^2.2.2" - schema-utils "^2.6.4" - serialize-javascript "^2.1.2" - source-map "^0.6.1" - terser "^4.4.3" - webpack-sources "^1.4.3" - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.npmmirror.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2, terser@^4.4.3, terser@^4.6.3: - version "4.8.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" - integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.npmmirror.com/test-exclude/download/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha1-w9Ph4xHrfuQF4JLawQrv0JCR6sA= - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - -text-table@0.2.0, text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmmirror.com/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.npmmirror.com/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.npmmirror.com/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.npmmirror.com/thunky/download/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30= - -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.npmmirror.com/timers-browserify/download/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4= - dependencies: - setimmediate "^1.0.4" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/timsort/download/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmmirror.com/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/tmpl/download/tmpl-1.0.5.tgz?cache=0&sync_timestamp=1630997304688&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftmpl%2Fdownload%2Ftmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha1-hoPguQK7nCDE9ybjwLafNlGMB8w= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toggle-selection@^1.0.6: - version "1.0.6" - resolved "https://registry.npmmirror.com/toggle-selection/download/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.npmmirror.com/tough-cookie/download/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/trim-newlines/download/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ= - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.npmmirror.com/trough/download/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha1-uLY5zvrX0LsqvTfUM/+Ck++l9AY= - -ts-pnp@1.1.6: - version "1.1.6" - resolved "https://registry.npmmirror.com/ts-pnp/download/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a" - integrity sha1-OJokOW1CWg0xYultK0Y4kA/cKJo= - -ts-pnp@^1.1.6: - version "1.2.0" - resolved "https://registry.npmmirror.com/ts-pnp/download/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha1-pQCtCEsHmPHDBxrzkeZZEshrypI= - -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.npmmirror.com/tslib/download/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3: - version "2.3.1" - resolved "https://registry.npmmirror.com/tslib/download/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tsutils@^3.17.1: - version "3.21.0" - resolved "https://registry.npmmirror.com/tsutils/download/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM= - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.npmmirror.com/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.npmmirror.com/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1624607953624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmmirror.com/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha1-20vBUaSiz07r+a3V23VQjbbMhB8= - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc= - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.npmmirror.com/type/download/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.5.0" - resolved "https://registry.npmmirror.com/type/download/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" - integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.npmmirror.com/typed-styles/download/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha1-kzkqAIeUxFlRGf9i3eaAnbxAo9k= - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmmirror.com/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA= - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmmirror.com/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^3.9.6: - version "3.9.10" - resolved "https://registry.npmmirror.com/typescript/download/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" - integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== - -ua-parser-js@^0.7.30: - version "0.7.33" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" - integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/unbox-primitive/download/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha1-CF4hViXsMWJXTciFmr7nilmxRHE= - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631615391251&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-canonical-property-names-ecmascript%2Fdownload%2Funicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw= - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631618607567&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-match-property-ecmascript%2Fdownload%2Funicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM= - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631618158421&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha1-GgGqVyR8FMVouJd1pUk4eIGJpxQ= - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g= - -unified@^9.1.0: - version "9.2.2" - resolved "https://registry.npmmirror.com/unified/download/unified-9.2.2.tgz?cache=0&sync_timestamp=1637256363650&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Funified%2Fdownload%2Funified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" - integrity sha1-Z2SaGr/Dq4XSlpUCkCd16wMUaXU= - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/uniq/download/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/uniqs/download/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.npmmirror.com/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= - dependencies: - imurmurhash "^0.1.4" - -unist-util-find-all-after@^3.0.2: - version "3.0.2" - resolved "https://registry.npmmirror.com/unist-util-find-all-after/download/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6" - integrity sha1-/f7NFMW3rqXp7zjV4NX3dO61YfY= - dependencies: - unist-util-is "^4.0.0" - -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.npmmirror.com/unist-util-is/download/unist-util-is-4.1.0.tgz?cache=0&sync_timestamp=1626875281214&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-is%2Fdownload%2Funist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" - integrity sha1-l25fRip6Xec9lLcGusG5BnG1d5c= - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.npmmirror.com/unist-util-stringify-position/download/unist-util-stringify-position-2.0.3.tgz?cache=0&sync_timestamp=1624607967709&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-stringify-position%2Fdownload%2Funist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha1-zOO/oc34W6c3XR1bF73Eytqb2do= - dependencies: - "@types/unist" "^2.0.2" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmmirror.com/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/unquote/download/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.npmmirror.com/upath/download/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ= - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmmirror.com/uri-js/download/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34= - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmmirror.com/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/url-loader/download/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs= - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - -url-parse@^1.4.3: - version "1.5.4" - resolved "https://registry.npmmirror.com/url-parse/download/url-parse-1.5.4.tgz#e4f645a7e2a0852cc8a66b14b292a3e9a11a97fd" - integrity sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.npmmirror.com/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use-composed-ref@^1.0.0: - version "1.2.1" - resolved "https://registry.npmmirror.com/use-composed-ref/download/use-composed-ref-1.2.1.tgz#9bdcb5ccd894289105da2325e1210079f56bf849" - integrity sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw== - -use-isomorphic-layout-effect@^1.0.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/use-isomorphic-layout-effect/download/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" - integrity sha1-e7ZYkXDNKYehUgQvkIT57/t1wiU= - -use-latest@^1.0.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/use-latest/download/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" - integrity sha1-pE9lcrgojgly7EEb3QhAraNm8jI= - dependencies: - use-isomorphic-layout-effect "^1.0.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.npmmirror.com/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/util-deprecate/download/util-deprecate-1.0.2.tgz?cache=0&sync_timestamp=1624607944834&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil-deprecate%2Fdownload%2Futil-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/util.promisify/download/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA= - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/util.promisify/download/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha1-d4MvV87SyUeBdBScrpuW6ZGM1Us= - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/util.promisify/download/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha1-a693dLgO6w91INi4HQeYKlmruu4= - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.npmmirror.com/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.npmmirror.com/util/download/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.npmmirror.com/utila/download/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^3.0.1, uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.npmmirror.com/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.1: - version "8.3.2" - resolved "https://registry.npmmirror.com/uuid/download/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4= - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmmirror.com/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validator@^13.1.1: - version "13.7.0" - resolved "https://registry.npmmirror.com/validator/download/validator-13.7.0.tgz?cache=0&sync_timestamp=1635822643143&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvalidator%2Fdownload%2Fvalidator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" - integrity sha1-T5ZYuhO6jz2C7ogdNRZInqhcCFc= - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.npmmirror.com/vendors/download/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha1-4rgApT56Kbk1BsPPQRANFsTErY4= - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.npmmirror.com/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.npmmirror.com/vfile-message/download/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" - integrity sha1-W0O4gXHUCerlhHfRPyPdQdUsNxo= - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.npmmirror.com/vfile/download/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" - integrity sha1-A/Hc4o/GJcYlvGUUNQ+9sA+p5iQ= - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - -vis-network@7.3.5: - version "7.3.5" - resolved "https://registry.npmmirror.com/vis-network/download/vis-network-7.3.5.tgz#367f3a1c19ba1b677dc3dec495f7e0d235e1fd59" - integrity sha1-Nn86HBm6G2d9w97Elffg0jXh/Vk= - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.npmmirror.com/vm-browserify/download/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA= - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/void-elements/download/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= - -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha1-ConN9cwVgi35w2BUNnaWPgzDCM0= - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q= - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.8" - resolved "https://registry.npmmirror.com/walker/download/walker-1.0.8.tgz?cache=0&sync_timestamp=1635238315480&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwalker%2Fdownload%2Fwalker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha1-vUmNtHev5XPcBBhfAR06uKjXZT8= - dependencies: - makeerror "1.0.12" - -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/warning/download/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha1-Fungd+uKhtavfWSqHgX9hbRnjKM= - dependencies: - loose-envify "^1.0.0" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc= - dependencies: - chokidar "^2.1.8" - -watchpack@^1.6.0: - version "1.7.5" - resolved "https://registry.npmmirror.com/watchpack/download/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM= - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.npmmirror.com/wbuf/download/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha1-wdjRSTFtPqhShIiVy2oL/oh7h98= - dependencies: - minimalistic-assert "^1.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmmirror.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.npmmirror.com/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha1-qFWYCx8LazWbodXZ+zmulB+qY60= - -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.npmmirror.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU= - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@3.10.3: - version "3.10.3" - resolved "https://registry.npmmirror.com/webpack-dev-server/download/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" - integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.2.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.6" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.25" - schema-utils "^1.0.0" - selfsigned "^1.10.7" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "0.3.19" - sockjs-client "1.4.0" - spdy "^4.0.1" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "12.0.5" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/webpack-log/download/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8= - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-manifest-plugin@2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/webpack-manifest-plugin/download/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" - integrity sha1-GcpptDWwuux+KfvpD7QBXeLeTxY= - dependencies: - fs-extra "^7.0.0" - lodash ">=3.5 <5" - object.entries "^1.1.0" - tapable "^1.0.0" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha1-7t2OwLko+/HL/plOItLYkPMwqTM= - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@4.42.0: - version "4.42.0" - resolved "https://registry.npmmirror.com/webpack/download/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" - integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== - dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.1" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmmirror.com/websocket-driver/download/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A= - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmmirror.com/websocket-extensions/download/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI= - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmmirror.com/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA= - dependencies: - iconv-lite "0.4.24" - -whatwg-fetch@^3.0.0: - version "3.6.2" - resolved "https://registry.npmmirror.com/whatwg-fetch/download/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha1-3O0k838mJO0CgXJdUdDi4/5nf4w= - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78= - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag= - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY= - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY= - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.9, which@^1.3.0, which@^1.3.1: - version "1.3.1" - resolved "https://registry.npmmirror.com/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmmirror.com/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= - dependencies: - isexe "^2.0.0" - -word-wrap@~1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" - integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== - -workbox-background-sync@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-background-sync/download/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950" - integrity sha1-JoIbm/Funjf9HWQCie3dwIr9GVA= - dependencies: - workbox-core "^4.3.1" - -workbox-broadcast-update@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-broadcast-update/download/workbox-broadcast-update-4.3.1.tgz#e2c0280b149e3a504983b757606ad041f332c35b" - integrity sha1-4sAoCxSeOlBJg7dXYGrQQfMyw1s= - dependencies: - workbox-core "^4.3.1" - -workbox-build@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-build/download/workbox-build-4.3.1.tgz#414f70fb4d6de47f6538608b80ec52412d233e64" - integrity sha1-QU9w+01t5H9lOGCLgOxSQS0jPmQ= - dependencies: - "@babel/runtime" "^7.3.4" - "@hapi/joi" "^15.0.0" - common-tags "^1.8.0" - fs-extra "^4.0.2" - glob "^7.1.3" - lodash.template "^4.4.0" - pretty-bytes "^5.1.0" - stringify-object "^3.3.0" - strip-comments "^1.0.2" - workbox-background-sync "^4.3.1" - workbox-broadcast-update "^4.3.1" - workbox-cacheable-response "^4.3.1" - workbox-core "^4.3.1" - workbox-expiration "^4.3.1" - workbox-google-analytics "^4.3.1" - workbox-navigation-preload "^4.3.1" - workbox-precaching "^4.3.1" - workbox-range-requests "^4.3.1" - workbox-routing "^4.3.1" - workbox-strategies "^4.3.1" - workbox-streams "^4.3.1" - workbox-sw "^4.3.1" - workbox-window "^4.3.1" - -workbox-cacheable-response@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-cacheable-response/download/workbox-cacheable-response-4.3.1.tgz#f53e079179c095a3f19e5313b284975c91428c91" - integrity sha1-9T4HkXnAlaPxnlMTsoSXXJFCjJE= - dependencies: - workbox-core "^4.3.1" - -workbox-core@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-core/download/workbox-core-4.3.1.tgz#005d2c6a06a171437afd6ca2904a5727ecd73be6" - integrity sha1-AF0sagahcUN6/WyikEpXJ+zXO+Y= - -workbox-expiration@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-expiration/download/workbox-expiration-4.3.1.tgz#d790433562029e56837f341d7f553c4a78ebe921" - integrity sha1-15BDNWICnlaDfzQdf1U8Snjr6SE= - dependencies: - workbox-core "^4.3.1" - -workbox-google-analytics@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-google-analytics/download/workbox-google-analytics-4.3.1.tgz#9eda0183b103890b5c256e6f4ea15a1f1548519a" - integrity sha1-ntoBg7EDiQtcJW5vTqFaHxVIUZo= - dependencies: - workbox-background-sync "^4.3.1" - workbox-core "^4.3.1" - workbox-routing "^4.3.1" - workbox-strategies "^4.3.1" - -workbox-navigation-preload@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-navigation-preload/download/workbox-navigation-preload-4.3.1.tgz#29c8e4db5843803b34cd96dc155f9ebd9afa453d" - integrity sha1-Kcjk21hDgDs0zZbcFV+evZr6RT0= - dependencies: - workbox-core "^4.3.1" - -workbox-precaching@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-precaching/download/workbox-precaching-4.3.1.tgz#9fc45ed122d94bbe1f0ea9584ff5940960771cba" - integrity sha1-n8Re0SLZS74fDqlYT/WUCWB3HLo= - dependencies: - workbox-core "^4.3.1" - -workbox-range-requests@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-range-requests/download/workbox-range-requests-4.3.1.tgz#f8a470188922145cbf0c09a9a2d5e35645244e74" - integrity sha1-+KRwGIkiFFy/DAmpotXjVkUkTnQ= - dependencies: - workbox-core "^4.3.1" - -workbox-routing@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-routing/download/workbox-routing-4.3.1.tgz#a675841af623e0bb0c67ce4ed8e724ac0bed0cda" - integrity sha1-pnWEGvYj4LsMZ85O2OckrAvtDNo= - dependencies: - workbox-core "^4.3.1" - -workbox-strategies@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-strategies/download/workbox-strategies-4.3.1.tgz#d2be03c4ef214c115e1ab29c9c759c9fe3e9e646" - integrity sha1-0r4DxO8hTBFeGrKcnHWcn+Pp5kY= - dependencies: - workbox-core "^4.3.1" - -workbox-streams@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-streams/download/workbox-streams-4.3.1.tgz#0b57da70e982572de09c8742dd0cb40a6b7c2cc3" - integrity sha1-C1facOmCVy3gnIdC3Qy0Cmt8LMM= - dependencies: - workbox-core "^4.3.1" - -workbox-sw@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-sw/download/workbox-sw-4.3.1.tgz#df69e395c479ef4d14499372bcd84c0f5e246164" - integrity sha1-32njlcR5700USZNyvNhMD14kYWQ= - -workbox-webpack-plugin@4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-webpack-plugin/download/workbox-webpack-plugin-4.3.1.tgz#47ff5ea1cc074b6c40fb5a86108863a24120d4bd" - integrity sha1-R/9eocwHS2xA+1qGEIhjokEg1L0= - dependencies: - "@babel/runtime" "^7.0.0" - json-stable-stringify "^1.0.1" - workbox-build "^4.3.1" - -workbox-window@^4.3.1: - version "4.3.1" - resolved "https://registry.npmmirror.com/workbox-window/download/workbox-window-4.3.1.tgz#ee6051bf10f06afa5483c9b8dfa0531994ede0f3" - integrity sha1-7mBRvxDwavpUg8m436BTGZTt4PM= - dependencies: - workbox-core "^4.3.1" - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.npmmirror.com/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= - dependencies: - errno "~0.1.7" - -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.npmmirror.com/worker-rpc/download/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha1-y1Zb1tcHGo8WZgaGBR6WmtMvVNU= - dependencies: - microevent.ts "~0.1.1" - -wouter@^2.5.1: - version "2.7.5" - resolved "https://registry.npmmirror.com/wouter/download/wouter-2.7.5.tgz#c7466a2630bed3a4ec010aea0cda42a5bae69e5d" - integrity sha1-x0ZqJjC+06TsAQrqDNpCpbrmnl0= - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmmirror.com/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.npmmirror.com/write-file-atomic/download/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha1-0LBUY8GIroBDlv1asqNwBir4dSk= - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.npmmirror.com/write-file-atomic/download/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug= - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.npmmirror.com/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM= - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.3" - resolved "https://registry.npmmirror.com/ws/download/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" - integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== - dependencies: - async-limiter "~1.0.0" - -ws@^6.1.2, ws@^6.2.1: - version "6.2.2" - resolved "https://registry.npmmirror.com/ws/download/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== - dependencies: - async-limiter "~1.0.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo= - -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.npmmirror.com/xmlchars/download/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs= - -xregexp@^4.3.0: - version "4.4.1" - resolved "https://registry.npmmirror.com/xregexp/download/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65" - integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag== - dependencies: - "@babel/runtime-corejs3" "^7.12.1" - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.npmmirror.com/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= - -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmmirror.com/y18n/download/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmmirror.com/yallist/download/yallist-3.1.1.tgz?cache=0&sync_timestamp=1624607893982&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1624607893982&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= - -yaml@^1.10.0, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.npmmirror.com/yaml/download/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ= - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha1-LrfcOwKJcY/ClfNidThFxBoMlO4= - -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.npmmirror.com/yargs/download/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM= - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.npmmirror.com/yargs/download/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.npmmirror.com/zwitch/download/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" - integrity sha1-0R1zgf/tFrdC9q97PyI9XNn+mSA= From cac690d71ea802b036514663b6d3a0de647c598f Mon Sep 17 00:00:00 2001 From: FrostyHec <112929809+FrostyHec@users.noreply.github.com> Date: Fri, 13 Sep 2024 17:20:42 +0800 Subject: [PATCH 02/21] update i18n configuration --- .../hubble-fe-new/package-lock.json | 67 +++++ hugegraph-hubble/hubble-fe-new/package.json | 3 + .../src/components/Topbar/index.ant.js | 39 ++- .../src/components/Topbar/index.module.scss | 14 +- .../hubble-fe-new/src/i18n/index.js | 37 +++ .../i18n/resources/en-US/components/bar.json | 6 + .../resources/en-US/components/common.json | 8 + .../i18n/resources/en-US/components/index.js | 7 + .../src/i18n/resources/en-US/index.js | 13 + .../hubble-fe-new/src/i18n/resources/index.js | 4 + .../i18n/resources/zh-CN/components/bar.json | 6 + .../resources/zh-CN/components/common.json | 8 + .../i18n/resources/zh-CN/components/index.js | 7 + .../src/i18n/resources/zh-CN/index.js | 13 + hugegraph-hubble/hubble-fe-new/src/index.js | 7 +- .../src/pages/Account/EditLayer.js | 277 ------------------ .../hubble-fe-new/src/pages/Account/index.js | 5 +- 17 files changed, 228 insertions(+), 293 deletions(-) create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js create mode 100644 hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js diff --git a/hugegraph-hubble/hubble-fe-new/package-lock.json b/hugegraph-hubble/hubble-fe-new/package-lock.json index 4ae5e7fcb..44239bac5 100644 --- a/hugegraph-hubble/hubble-fe-new/package-lock.json +++ b/hugegraph-hubble/hubble-fe-new/package-lock.json @@ -20,6 +20,7 @@ "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^13.5.0", + "@types/lodash-es": "^4.17.3", "3d-force-graph": "^1.71.2", "ajv": "8.17.1", "antd": "^4.23.1", @@ -29,6 +30,7 @@ "date-fns": "^2.29.3", "echarts": "^5.4.1", "http-proxy-middleware": "^2.0.6", + "i18next": "^19.5.3", "install": "^0.13.0", "json-bigint": "^1.0.0", "lodash": "^4.17.21", @@ -40,6 +42,7 @@ "react-color": "^2.19.3", "react-dom": "^18.2.0", "react-highlight-words": "^0.18.0", + "react-i18next": "^11.7.3", "react-json-view": "^1.21.3", "react-router-dom": "^6.3.0", "react-scripts": "5.0.1", @@ -5121,6 +5124,21 @@ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, + "node_modules/@types/lodash": { + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.7.tgz", + "integrity": "sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -10892,6 +10910,15 @@ "node": ">=12" } }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "license": "MIT", + "dependencies": { + "void-elements": "3.1.0" + } + }, "node_modules/html-webpack-plugin": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", @@ -11048,6 +11075,15 @@ "ms": "^2.0.0" } }, + "node_modules/i18next": { + "version": "19.9.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-19.9.2.tgz", + "integrity": "sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -20714,6 +20750,28 @@ "react": "^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0" } }, + "node_modules/react-i18next": { + "version": "11.18.6", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.18.6.tgz", + "integrity": "sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.5", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 19.0.0", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -23870,6 +23928,15 @@ "vis-util": "^5.0.1" } }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", diff --git a/hugegraph-hubble/hubble-fe-new/package.json b/hugegraph-hubble/hubble-fe-new/package.json index 042016539..a7a3877ff 100644 --- a/hugegraph-hubble/hubble-fe-new/package.json +++ b/hugegraph-hubble/hubble-fe-new/package.json @@ -3,6 +3,9 @@ "version": "0.1.0", "private": true, "dependencies": { + "i18next": "^19.5.3", + "react-i18next": "^11.7.3", + "@types/lodash-es": "^4.17.3", "@ant-design/icons": "^4.7.0", "@antv/g6": "^4.6.15", "@antv/graphin": "^2.7.12", diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js index 68d9ae884..06b55f532 100644 --- a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js +++ b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js @@ -5,17 +5,29 @@ import Logo from '../../assets/logo.png'; import {useNavigate, useLocation} from 'react-router-dom'; import * as api from '../../api/index'; import * as user from '../../utils/user'; +import {useState} from 'react'; +import {Select} from 'antd'; +import {useTranslation} from 'react-i18next'; +const {Option} = Select; const Topbar = () => { const userInfo = user.getUser(); const navigate = useNavigate(); const location = useLocation(); + const {t} = useTranslation(); + const [languageType, setLanguageType] = useState(localStorage.getItem('languageType') || 'zh-CN'); if (!userInfo || !userInfo.id) { sessionStorage.setItem('redirect', `${location.pathname}${location.search}`); window.location.href = '/login'; } + const i18Change = e => { + localStorage.setItem('languageType', e); + setLanguageType(e); + window.location.reload(); + }; + const logout = () => { api.auth.logout().then(res => { @@ -31,8 +43,8 @@ const Topbar = () => { const confirm = () => { Modal.confirm({ title: '确定退出吗?', - okText: '确定', - cancelText: '取消', + okText: t('common.verify.ok'), + cancelText: t('common.verify.cancel'), onOk: logout, }); }; @@ -40,12 +52,23 @@ const Topbar = () => { return (
- 退出登录}]} />}> - - } /> - {userInfo?.user_nickname ?? ''} - - +
+ + 退出登录}]} />}> + + } /> + {userInfo?.user_nickname ?? ''} + + +
); }; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss index f7baa8914..71b53cf7d 100644 --- a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss +++ b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.module.scss @@ -19,9 +19,15 @@ div.nav { height: 31px; } +.rightContainer { + display: flex; + align-items: center; + float: right; + color: #fff; + cursor: pointer; +} + .right { - display: flex; - float: right; - color: #fff; - cursor: pointer; + margin-left: 10px; } + diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/index.js new file mode 100644 index 000000000..6cee20087 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/index.js @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import i18n from 'i18next'; +import {initReactI18next} from 'react-i18next'; + +import {zhCNResources, enUSResources} from './resources'; + +i18n.use(initReactI18next).init({ + lng: localStorage.getItem('languageType') || 'zh-CN', + fallbackLng: 'zh-CN', + + resources: { + 'zh-CN': zhCNResources, + 'en-US': enUSResources, + }, + + interpolation: { + escapeValue: false, // not needed for react as it escapes by default + }, +}); + +export default i18n; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json new file mode 100644 index 000000000..fbc26d67d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json @@ -0,0 +1,6 @@ +{ + "bar": { + "Topbar": { + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json new file mode 100644 index 000000000..4ae8bcd8c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json @@ -0,0 +1,8 @@ +{ + "common" : { + "verify" : { + "ok": "ok", + "cancel": "cancel" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js new file mode 100644 index 000000000..deb1b62aa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js @@ -0,0 +1,7 @@ +import Common from './common.json'; +import Bar from './bar.json'; + +export { + Common, + Bar, +}; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/index.js new file mode 100644 index 000000000..088586354 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/index.js @@ -0,0 +1,13 @@ +import {merge} from 'lodash-es'; +import { + Bar, + Common, +} from './components'; +const translation = { + translation: merge( + Bar, + Common + ), +}; + +export default translation; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/index.js new file mode 100644 index 000000000..48a75bee5 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/index.js @@ -0,0 +1,4 @@ +import zhCNResources from './zh-CN'; +import enUSResources from './en-US'; + +export {zhCNResources, enUSResources}; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json new file mode 100644 index 000000000..fbc26d67d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json @@ -0,0 +1,6 @@ +{ + "bar": { + "Topbar": { + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json new file mode 100644 index 000000000..14fc71d98 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json @@ -0,0 +1,8 @@ +{ + "common" : { + "verify" : { + "ok": "确定", + "cancel": "取消" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js new file mode 100644 index 000000000..deb1b62aa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js @@ -0,0 +1,7 @@ +import Common from './common.json'; +import Bar from './bar.json'; + +export { + Common, + Bar, +}; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js new file mode 100644 index 000000000..088586354 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js @@ -0,0 +1,13 @@ +import {merge} from 'lodash-es'; +import { + Bar, + Common, +} from './components'; +const translation = { + translation: merge( + Bar, + Common + ), +}; + +export default translation; diff --git a/hugegraph-hubble/hubble-fe-new/src/index.js b/hugegraph-hubble/hubble-fe-new/src/index.js index fe912af55..e27fcb160 100644 --- a/hugegraph-hubble/hubble-fe-new/src/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/index.js @@ -3,16 +3,19 @@ import ReactDOM from 'react-dom/client'; import {BrowserRouter} from 'react-router-dom'; import {ConfigProvider} from 'antd'; import 'moment/locale/zh-cn'; -import locale from 'antd/lib/locale/zh_CN'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; +import zhCN from 'antd/lib/locale/zh_CN'; +import enUS from 'antd/lib/locale/en_US'; +import './i18n'; +const languageType = localStorage.getItem('languageType') === 'en-US' ? enUS : zhCN; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - + diff --git a/hugegraph-hubble/hubble-fe-new/src/pages/Account/EditLayer.js b/hugegraph-hubble/hubble-fe-new/src/pages/Account/EditLayer.js index c4bc75e1d..5d512eb9a 100644 --- a/hugegraph-hubble/hubble-fe-new/src/pages/Account/EditLayer.js +++ b/hugegraph-hubble/hubble-fe-new/src/pages/Account/EditLayer.js @@ -1,280 +1,3 @@ -// import {Modal, Input, Form, Select, message, Spin, Switch} from 'antd'; -// import {useCallback, useEffect, useState} from 'react'; -// import * as api from '../../api'; -// import * as rules from '../../utils/rules'; -// import SelectUser from '../../components/SelectUser'; -// import style from './index.module.scss'; -// -// const EditLayer = ({visible, onCancel, data, op, refresh}) => { -// const [form] = Form.useForm(); -// const [graphspaceList, setGraphspaceList] = useState([]); -// const [detail, setDetail] = useState({}); -// const [loading, setLoading] = useState(false); -// -// const title = { -// 'detail': '查看账号', -// 'edit': '编辑账号', -// 'auth': '分配权限', -// 'create': '创建账号', -// }; -// -// const createUser = useCallback(values => { -// api.auth.addUser(values).then(res => { -// if (res.status === 200) { -// message.success('创建成功'); -// onCancel(); -// refresh(); -// -// return; -// } -// -// message.error(res.message); -// }); -// }, [onCancel, refresh]); -// -// const updateUser = useCallback(values => { -// api.auth.updateUser(data.id, values).then(res => { -// if (res.status === 200) { -// message.success('编辑成功'); -// onCancel(); -// refresh(); -// -// return; -// } -// -// message.error(res.message); -// }); -// }, [onCancel, refresh, data.id]); -// -// const updateUserAuth = useCallback(values => { -// api.auth.updateAdminspace(data.id, values.adminSpaces).then(res => { -// if (res.status === 200) { -// message.success('编辑成功'); -// onCancel(); -// refresh(); -// -// return; -// } -// -// message.error(res.message); -// }); -// }, [data.id, onCancel, refresh]); -// -// const onFinish = useCallback(() => { -// form.validateFields().then(values => { -// if (op === 'create') { -// values.user_password = values.user_password ?? '123456'; -// createUser(values); -// } -// -// if (op === 'edit') { -// updateUser(values); -// } -// -// if (op === 'auth') { -// updateUserAuth(values); -// } -// }); -// }, [createUser, form, op, updateUser, updateUserAuth]); -// -// useEffect(() => { -// if (!visible) { -// return; -// } -// -// form.resetFields(); -// -// api.manage.getGraphSpaceList().then(res => { -// if (res.status === 200) { -// setGraphspaceList(res.data.records.map(item => ({label: item.nickname, value: item.name}))); -// -// return; -// } -// -// message.error(res.message); -// }); -// -// if (data.id) { -// setLoading(true); -// api.auth.getUserInfo(data.id).then(res => { -// setLoading(false); -// if (res.status === 200) { -// form.setFieldsValue(res.data); -// setDetail(res.data); -// return; -// } -// -// message.error(res.message); -// }); -// } -// }, [visible, data.id, form, op]); -// -// return ( -// op === 'detail' -// ? ( -// -// -// -// {detail.user_name} -// {detail.user_nickname} -// -// {detail.is_superadmin ? '是' : '否'} -// -// {detail.user_description} -// -// {detail.adminSpaces -// ? detail.adminSpaces.map(i => graphspaceList.find(_i => _i.value === i).label -// ).join(',') -// : ''} -// -// {detail.user_create} -// -// -// -// ) -// : ( -// -// -//
-// {(op === 'create' || op === 'edit') && ( -// <> -// -// -// -// -// -// -// -// -// -// -// -// -// )} -// -//
-//
-// ) -// ); -// }; -// -// const AddLayer = ({visible, onCancel, refresh}) => { -// const [form] = Form.useForm(); -// const [graphspaceList, setGraphspaceList] = useState([]); -// -// const onFinish = useCallback(() => { -// form.validateFields().then(values => { -// // createUser(values); -// const usernames = values.user_name.map(item => item.split('##')[0]).join(','); -// const nicknames = values.user_name.map(item => item.split('##')[1]).join(','); -// -// api.auth.addUuapUser({ -// usernames: usernames, -// nicknames: nicknames, -// description: values.description, -// adminSpaces: values.adminSpaces?.join(','), -// }).then(res => { -// if (res.status === 200) { -// message.success('添加成功'); -// onCancel(); -// refresh(); -// return; -// } -// -// message.error(res.message); -// }); -// }); -// }, [form, onCancel, refresh]); -// -// useEffect(() => { -// if (!visible) { -// return; -// } -// -// form.resetFields(); -// -// api.manage.getGraphSpaceList().then(res => { -// if (res.status === 200) { -// setGraphspaceList(res.data.records.map(item => ({label: item.nickname, value: item.name}))); -// -// return; -// } -// -// message.error(res.message); -// }); -// }, [form, visible]); -// -// return ( -// -//
-// -// -// -// -// -// -// -// ({label: item.name, value: item.name, info: item}))} onChange={setVertex} @@ -38,7 +40,7 @@ const EditVertexLayer = ({open, onCancle, onChange}) => { const EditEdgeLayer = ({open, onCancle, onChange}) => { const [form] = Form.useForm(); - + const {t} = useTranslation(); const setEdge = useCallback((_, item) => { form.setFieldValue('edge', item.info); }, [form]); @@ -50,13 +52,13 @@ const EditEdgeLayer = ({open, onCancle, onChange}) => { return ( - + } /> diff --git a/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js b/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js index 4a39e86f9..05f99502f 100644 --- a/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/components/SelectUser/index.js @@ -1,123 +1,54 @@ -import {useState, useCallback, useEffect} from 'react'; -import {Select, List, Avatar} from 'antd'; -import * as api from '../../api'; -import {debounce} from 'lodash'; - -const UserAvatar = ({name, type, ...props}) => { - - return ( - - ); -}; - -const SelectUser = props => { - const [userList, setUserList] = useState([]); - - const handleAdmins = useCallback(val => { - if (val === '') { - setUserList([]); - return; - } - - api.auth.getUUapList({username: val}).then(res => { - if (res.status === 200) { - setUserList(res.data); - } - else { - setUserList([]); - } - }); - }, []); - - // const handleChange = useCallback(list => { - // console.log(list); - // props?.onChange(list.map(item => { - // console.log(item); - // const arr = item.split('##'); - - // return {name: arr[0], nickname: arr[1]}; - // })); - // }, [props]); - - return ( - - ); -}; - -const SelectStaffUser = props => { - const [userList, setUserList] = useState([]); - - const handleAdmins = useCallback(debounce(val => { - // _.debounce(fetchUserList.bind(val, val), 30); - if (val === '') { - setUserList([]); - return; - } - - api.auth.getUUapList({username: val}).then(res => { - if (res.status === 200) { - setUserList(res.data); - } - else { - setUserList([]); - } - }); - }, 200), []); - - return ( - - ); -}; - -export {UserAvatar, SelectStaffUser}; -export default SelectUser; +// import {useState, useCallback} from 'react'; +// import {Select, List, Avatar} from 'antd'; +// import * as api from '../../api'; +// TODO REMOVE IT +// const SelectUser = props => { +// const [userList, setUserList] = useState([]); +// +// const handleAdmins = useCallback(val => { +// if (val === '') { +// setUserList([]); +// return; +// } +// +// api.auth.getUUapList({username: val}).then(res => { +// if (res.status === 200) { +// setUserList(res.data); +// } +// else { +// setUserList([]); +// } +// }); +// }, []); +// +// +// return ( +// +// ); +// }; +// +// export default SelectUser; diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js b/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js index df16d1319..98eb3884c 100644 --- a/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js +++ b/hugegraph-hubble/hubble-fe-new/src/components/Sidebar/index.ant.js @@ -10,13 +10,14 @@ import { } from '@ant-design/icons'; import {Link, useLocation} from 'react-router-dom'; import * as user from '../../utils/user'; +import {useTranslation} from 'react-i18next'; -const items = () => { +const items = t => { const userInfo = user.getUser(); - const MY = {label: 个人中心, key: 'my'}; - const ACCOUNT = {label: 账号管理, key: 'account'}; - const RESOURCE = {label: 资源管理, key: 'resource'}; - const ROLE = {label: 角色管理, key: 'role'}; + const MY = {label: {t('home.my')}, key: 'my'}; + const ACCOUNT = {label: {t('home.account')}, key: 'account'}; + const RESOURCE = {label: {t('home.resource')}, key: 'resource'}; + const ROLE = {label: {t('home.role')}, key: 'role'}; let systemList = [MY]; if (userInfo.is_superadmin) { @@ -28,58 +29,45 @@ const items = () => { const menu = [ { - label: 导航, + label: {t('navigation.name')}, key: 'navigation', icon: , }, { - label: '数据管理', + label: t('manage.name'), key: 'manage', icon: , children: [ - {label: 图管理, key: 'graphspace'}, - {label: 数据源管理, key: 'source'}, // TODO X fix import - {label: 数据导入, key: 'task'}, + {label: {t('manage.graphspace')}, key: 'graphspace'}, + {label: {t('manage.source')}, key: 'source'}, // TODO X fix import + {label: {t('manage.task')}, key: 'task'}, ], }, { - label: '业务分析', + label: t('analysis.name'), key: 'analysis', icon: , children: [ - {label: 图语言分析, key: 'gremlin'}, - {label: 图算法, key: 'algorithms'}, - {label: 任务管理, key: 'asyncTasks'}, + {label: {t('analysis.query.name')}, key: 'gremlin'}, + {label: {t('analysis.algorithm.name')}, key: 'algorithms'}, + {label: {t('analysis.async_task.name')}, key: 'asyncTasks'}, ], }, { - label: '系统管理', + label: t('home.name'), key: 'system', icon: , children: [...systemList], }, ]; - // if (userInfo.is_superadmin) { - // menu.push({ - // label: '系统管理', - // key: 'system', - // icon: , - // children: [ - // {label: 超管管理, key: 'super'}, - // {label: 账号管理, key: 'account'}, - // {label: 资源管理, key: 'resource'}, - // {label: 角色管理, key: 'role'}, - // ], - // }); - // } - return menu; }; const Sidebar = () => { const [collapsed, setCollapsed] = useState(false); const href = useLocation(); + const {t} = useTranslation(); const menuKey = href.pathname.split('/')[1] || 'navigation'; return ( @@ -96,7 +84,7 @@ const Sidebar = () => { defaultSelectedKeys={['graphspace']} defaultOpenKeys={['manage', 'analysis', 'system']} mode="inline" - items={items()} + items={items(t)} selectedKeys={[menuKey]} /> diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js b/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js index 340b9f9a9..7d7f0f6bd 100644 --- a/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/components/Status/index.js @@ -1,16 +1,18 @@ import {useCallback} from 'react'; import style from './index.module.scss'; +import {useTranslation} from 'react-i18next'; const StatusField = ({status}) => { + const {t} = useTranslation(); const lower = status ? status.toLowerCase() : 'undefined'; const config = { - new: '新建', - running: '执行中', - success: '完成', - cancelling: '停止', - cancelled: '停止', - failed: '失败', - undefined: '未知', + new: t('common.status.new'), + running: t('common.status.running'), + success: t('common.status.success'), + cancelling: t('common.status.cancelling'), + cancelled: t('common.status.cancelled'), + failed: t('common.status.failed'), + undefined: t('common.status.undefined'), }; return ( diff --git a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js index 06b55f532..596ff9904 100644 --- a/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js +++ b/hugegraph-hubble/hubble-fe-new/src/components/Topbar/index.ant.js @@ -1,4 +1,4 @@ -import {Layout, Space, Avatar, Dropdown, Menu, message, Modal} from 'antd'; +import {Layout, Space, Avatar, Dropdown, Menu, message, Modal, Select} from 'antd'; import {UserOutlined} from '@ant-design/icons'; import style from './index.module.scss'; import Logo from '../../assets/logo.png'; @@ -6,8 +6,8 @@ import {useNavigate, useLocation} from 'react-router-dom'; import * as api from '../../api/index'; import * as user from '../../utils/user'; import {useState} from 'react'; -import {Select} from 'antd'; import {useTranslation} from 'react-i18next'; + const {Option} = Select; const Topbar = () => { @@ -34,7 +34,7 @@ const Topbar = () => { if (res.status === 200) { sessionStorage.removeItem('redirect'); user.clearUser(); - message.success('退出成功'); + message.success(t('Topbar.exit.success')); navigate('/login'); } }); @@ -42,7 +42,7 @@ const Topbar = () => { const confirm = () => { Modal.confirm({ - title: '确定退出吗?', + title: t('Topbar.exit.confirm'), okText: t('common.verify.ok'), cancelText: t('common.verify.cancel'), onOk: logout, @@ -62,7 +62,10 @@ const Topbar = () => { - 退出登录}]} />}> + {t('Topbar.exit.name')}}]} + />} + > } /> {userInfo?.user_nickname ?? ''} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json deleted file mode 100644 index fbc26d67d..000000000 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/bar.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "bar": { - "Topbar": { - } - } -} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/board.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/board.json new file mode 100644 index 000000000..8bb7930d9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/board.json @@ -0,0 +1,9 @@ +{ + "Topbar": { + "exit":{ + "name": "logout", + "confirm":"confirm logout?", + "success":"logout success" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json index 4ae8bcd8c..14fc71d98 100644 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/common.json @@ -1,8 +1,8 @@ { "common" : { "verify" : { - "ok": "ok", - "cancel": "cancel" + "ok": "确定", + "cancel": "取消" } } } diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js index deb1b62aa..edd72d2f3 100644 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/en-US/components/index.js @@ -1,5 +1,5 @@ import Common from './common.json'; -import Bar from './bar.json'; +import Bar from './board.json'; export { Common, diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/ERView.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/ERView.json new file mode 100644 index 000000000..80e98df8c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/ERView.json @@ -0,0 +1,30 @@ +{ + "ERView": { + "edge": { + "name": "边", + "type": "边类型", + "start": "起点ID", + "end": "终点ID", + "create": "新增边", + "e1name": "边1", + "e2name": "边2", + "out": "出边", + "in": "入边", + "both": "双边" + }, + "vertex": { + "name": "顶点", + "type": "顶点类型", + "create": "新增顶点", + "v1name": "顶点1", + "v2name": "顶点2" + }, + "control": { + "zoom_in": "放大", + "zoom_out": "缩小", + "undo": "撤销", + "redo": "重做", + "auto_map": "自动映射" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json deleted file mode 100644 index fbc26d67d..000000000 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/bar.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "bar": { - "Topbar": { - } - } -} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/board.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/board.json new file mode 100644 index 000000000..fd84c8a7f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/board.json @@ -0,0 +1,15 @@ +{ + "Topbar": { + "exit":{ + "name": "退出登录", + "confirm":"确定退出吗?", + "success":"退出成功" + } + }, + "selector": { + "placeholder": "请选择" + }, + "navigation": { + "name": "导航" + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json index 14fc71d98..c39c9151e 100644 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/common.json @@ -2,7 +2,18 @@ "common" : { "verify" : { "ok": "确定", - "cancel": "取消" + "cancel": "取消", + "yes": "是", + "no": "否" + }, + "status": { + "new": "新建", + "running": "执行中", + "success": "完成", + "cancelling": "停止", + "cancelled": "停止", + "failed": "失败", + "undefined": "未知" } } } diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js index deb1b62aa..02bbb164a 100644 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/components/index.js @@ -1,7 +1,8 @@ import Common from './common.json'; -import Bar from './bar.json'; - +import Board from './board.json'; +import ERView from './ERView.json'; export { Common, - Bar, + Board, + ERView, }; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js index 088586354..8e46097fd 100644 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/index.js @@ -1,12 +1,23 @@ import {merge} from 'lodash-es'; import { - Bar, + Board, Common, + ERView, } from './components'; +import { + Algorithm, + Home, + Manage, +} from './modules'; + const translation = { translation: merge( - Bar, - Common + Board, + Common, + Algorithm, + Home, + Manage, + ERView ), }; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/algorithm.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/algorithm.json new file mode 100644 index 000000000..e69de29bb diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json new file mode 100644 index 000000000..eea18eab9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json @@ -0,0 +1,41 @@ +{ + "analysis": { + "name": "业务分析", + "query": { + "name": "图语言分析", + "placeholder": "请输入查询语句" + }, + "algorithm": { + "name": "图算法", + "placeholder": "算法查询", + "capacity_item": { + "tooltip": "遍历过程中最大的访问的顶点数目" + }, + "direction_item": { + "tooltip": "顶点向外发散的方向" + }, + "label_item": { + "tooltip": "边的类型(默认代表所有edge label)" + }, + "max_degree_item": { + "tooltip": "查询过程中,单个顶点遍历的最大邻接边数目" + }, + "max_depth_item": { + "tooltip": "步数" + }, + "nearest_item": { + "tooltip": "nearest为true时,代表起始顶点到达结果顶点的最短路径长度为depth,不存在更短的路径;near\n est为false时,代表起始顶点到结果顶点有一条长度为depth的路径(未必最短且可以有环)", + "placeholder": "最短路径长度" + }, + "olap": { + + }, + "oltp": { + + } + }, + "async_task":{ + "name": "任务管理" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/home.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/home.json new file mode 100644 index 000000000..e698fc4fb --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/home.json @@ -0,0 +1,9 @@ +{ + "home": { + "name":"系统管理" , + "my": "个人中心", + "account": "账号管理", + "resource": "资源管理", + "role": "角色管理" + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/index.js b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/index.js new file mode 100644 index 000000000..50bc3f6b7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/index.js @@ -0,0 +1,8 @@ +import Algorithm from './algorithm.json'; +import Home from './home.json'; +import Manage from './manage.json'; +export { + Home, + Algorithm, + Manage, +}; diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/manage.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/manage.json new file mode 100644 index 000000000..9ec249de0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/manage.json @@ -0,0 +1,8 @@ +{ + "manage": { + "name": "数据管理", + "graphspace": "图管理", + "source": "数据源管理", + "task": "数据导入" + } +} diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js index 1a4a89d62..5f2524e83 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/AlgorithmSearch/index.js @@ -7,12 +7,13 @@ import React, {useMemo} from 'react'; import {Input} from 'antd'; import _ from 'lodash'; import c from './index.module.scss'; +import {useTranslation} from 'react-i18next'; const AlgorithmSearch = props => { - + const {t} = useTranslation(); const {onSearch} = props; - const deboucedOnChange = useMemo( + const debounceOnChange = useMemo( () => { return _.debounce(e => { const {value} = e.target; @@ -25,8 +26,8 @@ const AlgorithmSearch = props => { return (
diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/BoolSelectItem/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/BoolSelectItem/index.js index ef1498cfa..1c6d53a26 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/BoolSelectItem/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/BoolSelectItem/index.js @@ -1,13 +1,14 @@ import React from 'react'; import {Form, Select} from 'antd'; - -const boolOptions = [ - {label: '是', value: true}, - {label: '否', value: false}, -]; +import {useTranslation} from 'react-i18next'; const BoolSelectItem = props => { + const {t} = useTranslation(); + const boolOptions = [ + {label: t('common.verify.yes'), value: true}, + {label: t('common.verify.no'), value: false}, + ]; const { name, initialValue = false, @@ -28,4 +29,4 @@ const BoolSelectItem = props => { ); }; -export default BoolSelectItem; \ No newline at end of file +export default BoolSelectItem; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/CapacityItem/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/CapacityItem/index.js index cf86b4bdc..51998bdf2 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/CapacityItem/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/CapacityItem/index.js @@ -6,18 +6,20 @@ import React from 'react'; import {Form, InputNumber} from 'antd'; import {integerValidator} from '../utils'; +import {useTranslation} from 'react-i18next'; const CapacityItem = props => { + const {t} = useTranslation(); return ( ); }; -export default CapacityItem; \ No newline at end of file +export default CapacityItem; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/DirectionItem/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/DirectionItem/index.js index 7ee4371ee..2b2ec9d7f 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/DirectionItem/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/DirectionItem/index.js @@ -5,16 +5,16 @@ import React from 'react'; import {Form, Select} from 'antd'; - -const directionOptions = [ - {label: '出边', value: 'OUT'}, - {label: '入边', value: 'IN'}, - {label: '双边', value: 'BOTH'}, -]; +import {useTranslation} from 'react-i18next'; const DirectionItem = props => { - + const {t} = useTranslation(); const {desc} = props; + const directionOptions = [ + {label: t('ERView.edge.out'), value: 'OUT'}, + {label: t('ERView.edge.in'), value: 'IN'}, + {label: t('ERView.edge.both'), value: 'BOTH'}, + ]; return ( { tooltip={desc} > ); }; -export default LabelItem; \ No newline at end of file +export default LabelItem; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDegreeItem/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDegreeItem/index.js index d08a4e2c4..8fbfb9419 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDegreeItem/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDegreeItem/index.js @@ -5,9 +5,10 @@ import React from 'react'; import {Form, InputNumber} from 'antd'; +import {useTranslation} from 'react-i18next'; const MaxDegreeItem = props => { - + const {t} = useTranslation(); const {isRequired, initialValue, validator} = props; return ( @@ -16,11 +17,11 @@ const MaxDegreeItem = props => { name='max_degree' initialValue={initialValue} rules={[{required: isRequired}, {validator: validator}]} - tooltip={'查询过程中,单个顶点遍历的最大邻接边数目'} + tooltip={t('analysis.algorithm.max_degree_item.tooltip')} >
); }; -export default MaxDegreeItem; \ No newline at end of file +export default MaxDegreeItem; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDepthItem/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDepthItem/index.js index 4d6d1535a..46726c831 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDepthItem/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/MaxDepthItem/index.js @@ -5,9 +5,10 @@ import React from 'react'; import {Form, InputNumber} from 'antd'; +import {useTranslation} from 'react-i18next'; const MaxDepthItem = props => { - + const {t} = useTranslation(); const {validator} = props; return ( @@ -15,11 +16,11 @@ const MaxDepthItem = props => { label='max_depth' name='max_depth' rules={[{required: true}, {validator: validator}]} - tooltip="步数" + tooltip={t('analysis.algorithm.max_depth_item.tooltip')} >
); }; -export default MaxDepthItem; \ No newline at end of file +export default MaxDepthItem; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/NearestItem/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/NearestItem/index.js index 74a9b9e77..150eded49 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/NearestItem/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/NearestItem/index.js @@ -5,24 +5,24 @@ import React from 'react'; import {Form, Select} from 'antd'; - -const boolOptions = [ - {label: '是', value: true}, - {label: '否', value: false}, -]; +import {useTranslation} from 'react-i18next'; const NearestItem = props => { + const {t} = useTranslation(); + const boolOptions = [ + {label: t('common.verify.yes'), value: true}, + {label: t('common.verify.no'), value: false}, + ]; return ( - ); }; -export default NearestItem; \ No newline at end of file +export default NearestItem; diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js index 375b9a8e3..e03316614 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js @@ -17,6 +17,7 @@ import { alphaValidator, greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator, } from '../../utils'; +import {useTranslation} from 'react-i18next'; const {BETWEENNESS_CENTRALITY} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; @@ -35,7 +36,7 @@ const BetweennessCentrality = props => { currentAlgorithm, updateCurrentAlgorithm, } = props; - + const {t} = useTranslation(); const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); diff --git a/hugegraph-hubble/hubble-fe-new/src/pages/Bill/index.js b/hugegraph-hubble/hubble-fe-new/src/pages/Bill/index.js deleted file mode 100644 index 3f5e0f57c..000000000 --- a/hugegraph-hubble/hubble-fe-new/src/pages/Bill/index.js +++ /dev/null @@ -1,135 +0,0 @@ -// import {PageHeader, Button, Space, Table, message, Tooltip, Modal, Input, Row, Col} from 'antd'; -// import {useCallback, useEffect, useState} from 'react'; -// import TableHeader from '../../components/TableHeader'; -// import * as api from '../../api'; -// TODO REMOVED -// const Bill = () => { -// const [data, setData] = useState([]); -// const [refresh, setRefresh] = useState(false); -// const [search, setSearch] = useState(''); -// const [pagination, setPagination] = useState({toatal: 0, current: 1, pageSize: 10}); -// -// const handleSearch = useCallback(value => { -// setRefresh(!refresh); -// setSearch(value); -// }, [refresh]); -// -// -// const handleTable = useCallback(page => { -// setPagination({...pagination, ...page}); -// }, [pagination]); -// -// const columns = [ -// { -// title: '出账时间', -// width: 180, -// render: (_, record) => { -// return ( -// <> -//
{record.properties.create_time}
-// -// ); -// }, -// }, -// { -// title: '账单时间', -// width: 100, -// render: (_, record) => { -// return ( -// <> -//
{record.properties.bill_date}
-// -// ); -// }, -// }, -// { -// title: '订单ID', -// width: 200, -// render: (_, record) => record.properties.order_id, -// }, -// { -// title: '业务名称', -// width: 100, -// render: (_, record) => record.properties.name, -// }, -// { -// title: '结算账号', -// align: 'center', -// width: 320, -// render: (_, record) => { -// return ( -// <> -//
{record.properties.account_name}
-//
({record.properties.account_id})
-// -// ); -// }, -// }, -// { -// title: '订单内容', -// ellipsis: {showTitle: false}, -// render: (_, record) => { -// const goods = JSON.parse(record.properties.goods); -// const val = goods.map(item => -// `${item.name} - ${item.custom > 0 ? item.custom : item.total} -// - ${item.discount > 0 ? item.discount : 0} -// - ${item.reduce > 0 ? item.reduce : 0}`).join(';'); -// return ( -// -// {val} -// -// ); -// }, -// }, -// ]; -// -// const rowKey = useCallback(item => item.user_name, []); -// -// useEffect(() => { -// api.cloud.getBillList({s: search}).then(res => { -// if (res.status === 200) { -// setData(res.data); -// // setPagination({...pagination, total: res.data.total}); -// return; -// } -// -// message.error(res.message); -// }); -// setData([]); -// }, [refresh, search]); -// -// return ( -// <> -// -// -//
-// -// -//
-// -// -// -// -// -//
-// -// -// -// ); -// }; -// -// export default Bill; diff --git a/hugegraph-hubble/hubble-fe-new/src/pages/Order/EditLayer.js b/hugegraph-hubble/hubble-fe-new/src/pages/Order/EditLayer.js deleted file mode 100644 index bee62fc8a..000000000 --- a/hugegraph-hubble/hubble-fe-new/src/pages/Order/EditLayer.js +++ /dev/null @@ -1,265 +0,0 @@ -import {Modal, Input, Form, Select, message, TreeSelect, Space, Checkbox, Spin, InputNumber, Alert} from 'antd'; -import {useCallback, useEffect, useState} from 'react'; -import * as api from '../../api'; -import * as rules from '../../utils/rules'; -import {SelectStaffUser} from '../../components/SelectUser'; - -const goodsList = [ - {name: '标准图数据库SaaS服务', id: 'HugeGraphNormal', unit: '亿'}, - {name: '高级图计算SaaS服务', id: 'HugeGraphAdvanced', unit: '亿'}, - {name: '定制OLTP算法', id: 'HugeGraphOLTPCustomized', unit: '次'}, - {name: '定制OLAP算法', id: 'HugeGraphOLAPCustomized', unit: '次'}, - {name: '定制图学习算法', id: 'HugeGraphGLCustomized', unit: '次'}, - {name: '定制接口', id: 'HugeGraphAPICustomized', unit: '次'}, - {name: '定制业务服务', id: 'HugeGraphCustomized', unit: '次'}, -].map(item => ({...item, total: 0, custom: 0, discount: '', reduce: '', checked: false})); - -const loopsTreeData = (list, parent) => { - return (list || []).map(({children, name, accountId}) => { - const node = { - parent, - name, - accountId, - path: [...parent, name].join(' > '), - selectable: children.length === 0, - }; - - node.children = loopsTreeData(children, [...parent, name]); - return node; - }); -}; - -const AddLayer = ({visible, onCancel, refresh, id}) => { - const [form] = Form.useForm(); - const [accountList, setAccountList] = useState([]); - const [accountName, setAccountName] = useState(''); - const [graphspaceList, setGraphspaceList] = useState([]); - const [loading, setLoading] = useState(false); - const [spinning, setSpinning] = useState(false); - const [errorMsg, setErrorMsg] = useState(''); - - const onFinish = useCallback(() => { - form.validateFields().then(values => { - const subGoodsList = values.goods.filter(item => item.checked); - if (subGoodsList.length === 0) { - setErrorMsg('请至少选择一个商品'); - return; - } - setErrorMsg(''); - - values.goods = JSON.stringify(subGoodsList); - values.graphspaces = values.graphspaces.join(','); - values.account_name = accountName; - setLoading(true); - - if (id) { - api.cloud.updateOrder(id, values).then(res => { - setLoading(false); - if (res.status === 200) { - refresh(); - onCancel(); - return; - } - message.error(res.message); - }); - return; - } - - api.cloud.createOrder(values).then(res => { - setLoading(false); - if (res.status === 200) { - refresh(); - onCancel(); - return; - } - message.error(res.message); - }); - }); - }, [form, accountName, refresh, onCancel, id]); - - const handleAccount = useCallback((_, account) => { - setAccountName(account.name); - }, []); - - const handleChange = useCallback(val => { - api.auth.getAccountsList(val).then(res => { - if (res.status === 200) { - setAccountList(loopsTreeData(res.data, [])); - } - }); - }, []); - - useEffect(() => { - if (!visible) { - return; - } - - form.resetFields(); - form.setFieldValue('goods', goodsList); - - api.manage.getGraphSpaceList().then(res => { - if (res.status === 200) { - setGraphspaceList(res.data.records.map(item => ({label: item.nickname, value: item.name}))); - - return; - } - - message.error(res.message); - }); - - if (id) { - setSpinning(true); - api.cloud.getOrder(id).then(res => { - if (res.status === 200) { - const {properties} = res.data; - api.auth.getAccountsList(properties.user_name).then(res => { - setSpinning(false); - if (res.status === 200) { - setAccountList(loopsTreeData(res.data, [])); - } - form.setFieldsValue({ - ...properties, - // graphspaces: JSON.parse(properties.graphspaces), - graphspaces: properties.graphspaces.split(','), - goods: JSON.parse(properties.goods), - }); - }); - } - }); - } - }, [form, visible, id]); - - return ( - - - {errorMsg && } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ); -}; - -export {AddLayer}; diff --git a/hugegraph-hubble/hubble-fe-new/src/pages/Order/index.js b/hugegraph-hubble/hubble-fe-new/src/pages/Order/index.js deleted file mode 100644 index b35c26d5d..000000000 --- a/hugegraph-hubble/hubble-fe-new/src/pages/Order/index.js +++ /dev/null @@ -1,223 +0,0 @@ -import {PageHeader, Button, Space, Table, message, Row, Col, Modal, Select} from 'antd'; -import {useCallback, useEffect, useState} from 'react'; -import TableHeader from '../../components/TableHeader'; -import {AddLayer} from './EditLayer'; -import * as api from '../../api'; - -const statusOptions = [ - {label: '结算中', value: 1}, - {label: '暂停结算', value: 2}, - {label: '已完结', value: 3}, -]; - -const Order = () => { - const [addLayerVisible, setAddLayerVisible] = useState(false); - const [loading, setLoading] = useState(false); - const [data, setData] = useState([]); - const [refresh, setRefresh] = useState(false); - const [id, setId] = useState(''); - const [status, setStatus] = useState(''); - const [pagination, setPagination] = useState({total: 0, current: 1, pageSize: 10}); - - const handleEdit = useCallback(row => { - setId(row.id); - setAddLayerVisible(true); - }, []); - - const handleAdd = useCallback(row => { - setId(''); - setAddLayerVisible(true); - }, []); - - const handleRefresh = useCallback(() => { - setRefresh(!refresh); - }, [refresh]); - - const handleHideAddLayer = useCallback(() => { - setAddLayerVisible(false); - }, []); - - const handleTable = useCallback(page => { - setPagination({...pagination, ...page}); - }, [pagination]); - - const handleStatus = useCallback((record, status) => { - const text = {1: '重新开启', 2: '暂停', 3: '终止'}; - - Modal.confirm({ - title: `确定${text[status]}吗?`, - content: `确定${text[status]}订单${record.properties.order_id}吗?`, - onOk: () => { - api.cloud.updateOrderStatus(record.id, status).then(res => { - if (res.status === 200) { - message.success('操作成功'); - setRefresh(!refresh); - return; - } - - message.error(res.message); - }); - }, - }); - }, [refresh]); - - const handleFilter = useCallback(value => { - setStatus(value); - setRefresh(!refresh); - }, [refresh]); - - const columns = [ - { - title: '订单id', - width: 200, - align: 'center', - render: (_, record) => ( -
- {record.properties.order_id} -
- ), - }, - { - title: '业务名称', - width: 120, - align: 'center', - render: (_, record) => record.properties.name, - }, - { - title: '结算账户', - align: 'center', - width: 340, - render: (_, record) => { - return ( - <> -
{record.properties.account_name}
-
- ({record.properties.account_id}) -
- - ); - }, - }, - { - title: '状态', - align: 'center', - width: 120, - render: (_, record) => { - return record.properties.status - ? statusOptions.find(item => item.value === Number(record.properties.status)).label : ''; - }, - }, - { - title: '添加时间', - dataIndex: 'd', - align: 'center', - width: 120, - render: (_, record) => record.properties.create_time, - }, - { - title: '本期结算', - align: 'center', - // width: 300, - render: (_, record) => { - const goodsList = JSON.parse(record.properties.goods); - return ( - - {goodsList.map(goods => ( - - {goods.name} - - {goods.custom > 0 ? goods.custom : goods.total} - - {goods.discount > 0 ? goods.discount : 0} - - {goods.reduce > 0 ? goods.reduce : 0} - - ))} - - ); - }, - }, - { - title: '操作', - width: 160, - align: 'center', - render: record => ( - - {record.properties.status !== '3' && handleEdit(record)}>编辑} - {record.properties.status === '1' && handleStatus(record, 2)}>暂停} - {record.properties.status === '2' && handleStatus(record, 1)}>重新开启} - {record.properties.status !== '3' && handleStatus(record, 3)}>终止} - - ), - }, - ]; - - const rowKey = useCallback(item => item.user_name, []); - - useEffect(() => { - setLoading(true); - api.cloud.getOrderList({ - status: status, - // query: search, - // page_no: pagination.current, - // page_size: pagination.pageSize, - }).then(res => { - setLoading(false); - if (res.status === 200) { - setData(res.data); - setPagination({...pagination, total: res.data.total}); - return; - } - - message.error(res.message); - }); - setData([]); - }, [refresh, status]); - - return ( - <> - - -
- - -
- - 筛选: -
- - - - - ); -}; - -export default Order; diff --git a/hugegraph-hubble/hubble-fe-new/src/pages/Super/EditLayer.js b/hugegraph-hubble/hubble-fe-new/src/pages/Super/EditLayer.js index e785fdb20..a75c0b4aa 100644 --- a/hugegraph-hubble/hubble-fe-new/src/pages/Super/EditLayer.js +++ b/hugegraph-hubble/hubble-fe-new/src/pages/Super/EditLayer.js @@ -1,66 +1,66 @@ -import {Modal, Input, Form, message} from 'antd'; -import {useCallback, useEffect} from 'react'; -import * as api from '../../api'; -import * as rules from '../../utils/rules'; -import SelectUser from '../../components/SelectUser'; - -const EditLayer = ({visible, onCancel, refresh}) => { - const [form] = Form.useForm(); - - const onFinish = useCallback(() => { - form.validateFields().then(values => { - // createUser(values); - const usernames = values.user_name.map(item => item.split('##')[0]).join(','); - const nicknames = values.user_name.map(item => item.split('##')[1]).join(','); - - api.auth.addSuperUser({ - usernames: usernames, - nicknames: nicknames, - description: values.user_description, - }).then(res => { - if (res.status === 200) { - message.success('超级管理员添加成功'); - onCancel(); - refresh(); - return; - } - - message.error(`超级管理员添加失败。失败原因:${res.data.message}`); - }); - }); - }, [form, onCancel, refresh]); - - useEffect(() => { - form.resetFields(); - }, [form, visible]); - - return ( - -
- - - - - - - -
- ); -}; - -export default EditLayer; +// import {Modal, Input, Form, message} from 'antd'; +// import {useCallback, useEffect} from 'react'; +// import * as api from '../../api'; +// import * as rules from '../../utils/rules'; +// import SelectUser from '../../components/SelectUser'; +// TODO REMOVE SUPER +// const EditLayer = ({visible, onCancel, refresh}) => { +// const [form] = Form.useForm(); +// +// const onFinish = useCallback(() => { +// form.validateFields().then(values => { +// // createUser(values); +// const usernames = values.user_name.map(item => item.split('##')[0]).join(','); +// const nicknames = values.user_name.map(item => item.split('##')[1]).join(','); +// +// api.auth.addSuperUser({ +// usernames: usernames, +// nicknames: nicknames, +// description: values.user_description, +// }).then(res => { +// if (res.status === 200) { +// message.success('超级管理员添加成功'); +// onCancel(); +// refresh(); +// return; +// } +// +// message.error(`超级管理员添加失败。失败原因:${res.data.message}`); +// }); +// }); +// }, [form, onCancel, refresh]); +// +// useEffect(() => { +// form.resetFields(); +// }, [form, visible]); +// +// return ( +// +//
+// +// +// +// +// +// +// +//
+// ); +// }; +// +// export default EditLayer; diff --git a/hugegraph-hubble/hubble-fe-new/src/pages/Super/index.js b/hugegraph-hubble/hubble-fe-new/src/pages/Super/index.js index b9768024e..aeec35b96 100644 --- a/hugegraph-hubble/hubble-fe-new/src/pages/Super/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/pages/Super/index.js @@ -1,141 +1,141 @@ -import {PageHeader, Button, Space, Table, message, Popconfirm, Tooltip} from 'antd'; -import {useCallback, useEffect, useState} from 'react'; -import {PlusOutlined} from '@ant-design/icons'; -import TableHeader from '../../components/TableHeader'; -import EditLayer from './EditLayer'; -import * as api from '../../api'; -import {getUser} from '../../utils/user'; - -const Super = () => { - const [editLayerVisible, setEditLayerVisible] = useState(false); - const [op, setOp] = useState('detail'); - const [detail, setDetail] = useState({}); - const [data, setData] = useState([]); - const [refresh, setRefresh] = useState(false); - const [pagination, setPagination] = useState({toatal: 0, current: 1, pageSize: 10}); - - const showAdd = useCallback(() => { - setDetail({}); - setOp('create'); - setEditLayerVisible(true); - }, []); - - const handleRefresh = useCallback(() => { - setRefresh(!refresh); - }, [refresh]); - - const handleHideLayer = useCallback(() => { - setEditLayerVisible(false); - }, []); - - const handleTable = useCallback(page => { - setPagination({...pagination, ...page}); - }, [pagination]); - - const RemoveSuper = ({data}) => { - const handleDelete = useCallback(() => { - api.auth.removeSuperUser(data.id).then(res => { - if (res.status === 200) { - message.success('超级管理员移除成功'); - setRefresh(!refresh); - return; - } - - message.error(`超级管理员移除失败。失败原因:${res.message}`); - }); - }, [data.id]); - - return data.user_name === getUser().id - ? '-' - : ( - - 移除超管 - - ); - }; - - const columns = [ - { - title: '账号ID', - dataIndex: 'user_name', - }, - { - title: '账号名', - dataIndex: 'user_nickname', - }, - { - title: '备注', - dataIndex: 'user_description', - ellipsis: {showTitle: false}, - render: val => {val}, - }, - { - title: '添加时间', - dataIndex: 'user_create', - align: 'center', - width: 200, - }, - { - title: '操作', - width: 300, - align: 'center', - render: row => , - }, - ]; - - const rowKey = useCallback(item => item.user_name, []); - - useEffect(() => { - api.auth.getSuperUser({ - page_no: pagination.current, - page_size: pagination.pageSize, - }).then(res => { - if (res.status === 200) { - setData(res.data.records); - setPagination({...pagination, total: res.data.total}); - return; - } - - message.error(res.message); - }); - }, [refresh, pagination.current, pagination.pageSize]); - - return ( - <> - - -
- - - - - - -
- - - - - ); -}; - -export default Super; +// import {PageHeader, Button, Space, Table, message, Popconfirm, Tooltip} from 'antd'; +// import {useCallback, useEffect, useState} from 'react'; +// import {PlusOutlined} from '@ant-design/icons'; +// import TableHeader from '../../components/TableHeader'; +// import EditLayer from './EditLayer'; +// import * as api from '../../api'; +// import {getUser} from '../../utils/user'; +// TODO REMOVE SUPER +// const Super = () => { +// const [editLayerVisible, setEditLayerVisible] = useState(false); +// const [op, setOp] = useState('detail'); +// const [detail, setDetail] = useState({}); +// const [data, setData] = useState([]); +// const [refresh, setRefresh] = useState(false); +// const [pagination, setPagination] = useState({toatal: 0, current: 1, pageSize: 10}); +// +// const showAdd = useCallback(() => { +// setDetail({}); +// setOp('create'); +// setEditLayerVisible(true); +// }, []); +// +// const handleRefresh = useCallback(() => { +// setRefresh(!refresh); +// }, [refresh]); +// +// const handleHideLayer = useCallback(() => { +// setEditLayerVisible(false); +// }, []); +// +// const handleTable = useCallback(page => { +// setPagination({...pagination, ...page}); +// }, [pagination]); +// +// const RemoveSuper = ({data}) => { +// const handleDelete = useCallback(() => { +// api.auth.removeSuperUser(data.id).then(res => { +// if (res.status === 200) { +// message.success('超级管理员移除成功'); +// setRefresh(!refresh); +// return; +// } +// +// message.error(`超级管理员移除失败。失败原因:${res.message}`); +// }); +// }, [data.id]); +// +// return data.user_name === getUser().id +// ? '-' +// : ( +// +// 移除超管 +// +// ); +// }; +// +// const columns = [ +// { +// title: '账号ID', +// dataIndex: 'user_name', +// }, +// { +// title: '账号名', +// dataIndex: 'user_nickname', +// }, +// { +// title: '备注', +// dataIndex: 'user_description', +// ellipsis: {showTitle: false}, +// render: val => {val}, +// }, +// { +// title: '添加时间', +// dataIndex: 'user_create', +// align: 'center', +// width: 200, +// }, +// { +// title: '操作', +// width: 300, +// align: 'center', +// render: row => , +// }, +// ]; +// +// const rowKey = useCallback(item => item.user_name, []); +// +// useEffect(() => { +// api.auth.getSuperUser({ +// page_no: pagination.current, +// page_size: pagination.pageSize, +// }).then(res => { +// if (res.status === 200) { +// setData(res.data.records); +// setPagination({...pagination, total: res.data.total}); +// return; +// } +// +// message.error(res.message); +// }); +// }, [refresh, pagination.current, pagination.pageSize]); +// +// return ( +// <> +// +// +//
+// +// +// +// +// +// +//
+// +// +// +// +// ); +// }; +// +// export default Super; diff --git a/hugegraph-hubble/hubble-fe-new/src/routes/index.js b/hugegraph-hubble/hubble-fe-new/src/routes/index.js index cb478d3ad..c7c45e85f 100644 --- a/hugegraph-hubble/hubble-fe-new/src/routes/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/routes/index.js @@ -18,8 +18,6 @@ import Resource from '../pages/Resource'; import Navigation from '../pages/Navigation'; import Error404 from '../pages/Error404'; import Test from '../pages/Test'; -import Bill from '../pages/Bill'; -import Order from '../pages/Order'; // 图分析的路由 import GraphAnalysis from '../pages/GraphAnalysis'; @@ -64,9 +62,6 @@ const RouteList = ({element}) => { } /> } /> - - } /> - } /> } /> @@ -76,4 +71,4 @@ const RouteList = ({element}) => { ); }; -export default RouteList; \ No newline at end of file +export default RouteList; From 96e7f70ee8462424967c3b4b7f18226e0162377d Mon Sep 17 00:00:00 2001 From: FrostyHec <112929809+FrostyHec@users.noreply.github.com> Date: Wed, 18 Sep 2024 22:54:46 +0800 Subject: [PATCH 04/21] supporting i18n on olap components --- .../resources/zh-CN/modules/analysis.json | 144 +++++++++- .../Olap/BetweennessCentrality/index.js | 20 +- .../BetweennessCentralityVermeer/index.js | 30 +-- .../Olap/ClosenessCentrality/index.js | 29 +- .../Olap/ClosenessCentralityVermeer/index.js | 39 +-- .../Olap/ClusterCoefficient/index.js | 21 +- .../Olap/DegreeCentrality/index.js | 26 +- .../Olap/DegreeCentralityVermeer/index.js | 32 ++- .../Olap/FilterSubGraphMatching/index.js | 21 +- .../Olap/FilteredRingsDetection/index.js | 29 +- .../algorithmsForm/Olap/KCore/index.js | 21 +- .../algorithmsForm/Olap/KCoreVermeer/index.js | 20 +- .../Olap/LabelPropagationAlgorithm/index.js | 20 +- .../LabelPropagationAlgorithmVermeer/index.js | 21 +- .../algorithmsForm/Olap/Links/index.js | 24 +- .../algorithmsForm/Olap/Louvain/index.js | 25 +- .../Olap/OlapComputerItem/index.js | 24 +- .../algorithmsForm/Olap/OlapItem/index.js | 42 +-- .../algorithmsForm/Olap/PageRank/index.js | 26 +- .../Olap/PageRankVermeer/index.js | 26 +- .../Olap/PersonalPageRank/index.js | 30 ++- .../Olap/RingsDetection/index.js | 20 +- .../algorithmsForm/Olap/SSSPVermeer/index.js | 20 +- .../Olap/TriangleCount/index.js | 24 +- .../Olap/TriangleCountVermeer/index.js | 18 +- .../Olap/WeaklyConnectedComponent/index.js | 21 +- .../WeaklyConnectedComponentVermeer/index.js | 20 +- .../hubble-fe-new/src/utils/constants.js | 251 ++++++++++-------- 28 files changed, 626 insertions(+), 418 deletions(-) diff --git a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json index eea18eab9..62355a5f5 100644 --- a/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json +++ b/hugegraph-hubble/hubble-fe-new/src/i18n/resources/zh-CN/modules/analysis.json @@ -8,6 +8,21 @@ "algorithm": { "name": "图算法", "placeholder": "算法查询", + "common": { + "instance_num": "实例数", + "input_limit_edges_per_vertex": "最大出边限制", + "max_iter_step": "最大迭代次数", + "worker_num": "worker计算线程数", + "sample_rate": "边的采样率,由于此算法是指数型增长的算法,算力要求非常高,需要根据业务需求设置合理的采样率,得到一个近似结果", + "weight_property": "权重属性名", + "property_filter": "点边属性过滤条件", + "min_ring_length": "输出环路的最小长度", + "max_ring_length": "输出环路的最大长度", + "max_step": "最大迭代步数", + "request_memory": "计算节点最小内存需求", + "JVM_memory": "jvm环境内存大小,默认为32g", + "source": "起始点ID" + }, "capacity_item": { "tooltip": "遍历过程中最大的访问的顶点数目" }, @@ -28,13 +43,136 @@ "placeholder": "最短路径长度" }, "olap": { - + "betweenness_centrality": { + "desc": "中介中心性算法(Betweenness Centrality)判断一个节点具有\"桥梁\"节点的值, 值越大说明它作为图中两点间必经路径的可能性越大, 典型的例子包括社交网络中的共同关注的人", + "sample_rate": "边的采样率", + "sample_rate_long": "边的采样率,由于此算法是指数型增长的算法,算力要求非常高,需要根据业务需求设置合理的采样率,得到一个近似结果", + "use_endpoint": "是否计算最后一个点" + }, + "closeness_centrality": { + "desc": "计算一个节点到所有其他可达节点的最短距离的倒数,进行累积后归一化的值。用于计算图中每个节点的度中心性值,支持无向图和有向图。", + "weight_property": "权重属性名", + "TODO": "TODO weight_property,sample_rate需要移动 ", + "sample_rate": "边的采样率", + "wf_improved": "是否使用 Wasserman and Faust 紧密中心性公式" + }, + "cluster_coefficient": { + "desc": "聚集系数,计算每个点局部的聚集系数, 暂时未提供全局聚集系数。", + "minimum_edges_use_superedge_cache": "利用内存减少消息量,如果内存不够,可以从100改成1000,但聚集系数可能计算不完" + }, + "degree_centrality": { + "desc": "用于计算图中每个节点的度中心性值,支持无向图和有向图。", + "direction": "方向,in/out/both 入边/出边/双边" + }, + "filtered_rings_detection": { + "desc": "带过滤条件的环路检测算法(Filtered Rings Detection)用于检测图中的环路,\n 环路的路径由环路中最小id的顶点来记录。可通过指定点、边属性过滤规则让算法选择性的做路径传播。" + }, + "filter_subgraph_matching": { + "desc": "带属性过滤的子图匹配算法。用户可以传入一个带属性过滤的查询图结构,算法会在图中匹配所有与该查询图同构的子图。", + "query_graph_config": "查询图配置,json数组字符串" + }, + "k_core": { + "desc": "K-Core算法,标记所有度数为K的顶点。", + "k": "K-Core算法的k值,非必需,有默认值", + "degree_k": "最小度数阈值" + }, + "label_propagation_algorithm": { + "desc": "标签传递算法,是一种图聚类算法,常用在社交网络中。" + }, + "links": { + "desc": "链路追踪算法,通过指定的一批开始顶点,按照指定的传播规则进行传播,到指定的结束条件后停止并记录下路径。", + "analyze_config": "链路传播条件配置" + }, + "louvain": { + "desc": "Louvain 算法是基于模块度的社区发现算法。由于Louvain算法的特殊性,只用一个worker instance运行。" + }, + "computer_item": { + "computer_cpu": "master最大CPU", + "worker_cpu": "worker最大CPU", + "master_request_memory": "master最小内存,不满足最小内存则分配不成功", + "worker_request_memory": "worker最小内存,不满足最小内存则分配不成功", + "master_memory": "master最大内存,超过最大内存则会被k8s中止", + "worker_memory": "worker最大内存,超过最大内存则会被k8s中止" + }, + "item": { + "PAGE_RANK": "PageRank", + "WEAKLY_CONNECTED_COMPONENT": "Weakly Connected Component", + "DEGREE_CENTRALIT": "Degree Centrality", + "CLOSENESS_CENTRALITY": "Closeness Centrality", + "TRIANGLE_COUNT": "Triangle Count", + "K_NEIGHBOR": "K-neighbor(GET,基础版)", + "K_OUT": "K-out API(GET,基础版)", + "SAME_NEIGHBORS": "Same Neighbors", + "RINGS": "Rings", + "SHORTEST_PATH": "Shortest Path", + "ALLPATHS": "查找所有路径(POST,高级版)", + "JACCARD_SIMILARITY": "Jaccard Similarity(GET)", + "CROSSPOINTS": "Crosspoints", + "RINGS_DETECTION": "Rings Detection", + "FILTERED_RINGS_DETECTION": "Filtered Rings Detection", + "LINKS": "Links", + "CLUSTER_COEFFICIENT": "Cluster Coefficient", + "BETWEENNESS_CENTRALITY": "Betweenness Centrality", + "LABEL_PROPAGATION_ALGORITHM": "Label Propagation Algorithm", + "LOUVAIN": "Louvain", + "FILTER_SUBGRAPH_MATCHING": "Filter SubGraph Matching", + "K_CORE": "K-Core", + "PERSONAL_PAGE_RANK": "PersonalPageRank", + "KOUT_POST": "K-out API(POST, 高级版)", + "KNEIGHBOR_POST": "K-neighbor API(POST,高级版)", + "JACCARD_SIMILARITY_POST": "Jaccard Similarity(POST)", + "RANK_API": "rank API", + "NEIGHBOR_RANK_API": "Neighbor Rank API", + "FINDSHORTESTPATH": "查找最短路径", + "FINDSHORTESTPATHWITHWEIGHT": "查找带权重的最短路径", + "SINGLESOURCESHORTESTPATH": "(从一个顶点出发)查找最短路径", + "MULTINODESSHORTESTPATH": "(指定顶点集)查找最短路径", + "CUSTOMIZEDPATHS": "自定义路径查询", + "TEMPLATEPATHS": "模版路径查询", + "CUSTOMIZED_CROSSPOINTS": "Customized Crosspoints", + "RAYS": "Rays", + "PATHS": "查找所有路径(GET,基础版)", + "FUSIFORM_SIMILARITY": "Fusiform Similarity", + "ADAMIC_ADAR": "Adamic Adar", + "RESOURCE_ALLOCATION": "Resource Allocation", + "SAME_NEIGHBORS_BATCH": "Same Neighbors Batch", + "EGONET": "Egonet", + "SSSP": "SSSP(单元最短路径)" + }, + "page_rank": { + "desc": "PageRank算法又称网页排名算法,是一种由搜索引擎根据网页(节点)之间相互的超链接进行计算的技术,用来体现网页(节点)的相关性和重要性。", + "alpha": "权重系数(又称阻尼系数)", + "l1": "收敛精度,为每次迭代各个点相较于上次迭代变化的绝对值累加和上限,当小于这个值时认为计算收敛,算法停止。", + "damping": "阻尼系数,传导到下个点的百分比", + "diff": "收敛精度,为每次迭代各个点相较于上次迭代变化的绝对值累加和上限,当小于这个值时认为计算收敛,算法停止。" + }, + "personal_page_bank": { + "desc": "PersonalPageRank 算法又称个性化推荐算法,是一种由搜索引擎根据网页(节点)之间相互的超链接进行计算的技术,用来体现网页(节点)的相关性和重要性", + "source": "起始顶点", + "alpha": "权重系数(又称阻尼系数)", + "l1": "收敛精度", + "use_id_fixlength": "true时,系统采用自增id运算", + "use_id_fixlength_query": "是否采用自增id运算" + }, + "ring_detection": { + "desc": "环路检测算法(Rings Detection),用于检测图中的环路,环路的路径由环路中最小id的顶点来记录。" + }, + "SSSPVermeer": { + "desc": "单元最短路径算法,求一个点到其他所有点的最短距离" + }, + "triangle_count": { + "desc": "三角形计数算法,用于计算通过每个顶点的三角形个数。", + "limit_edges_in_one_vertex": "最大出边限制", + "minimum_edges_use_superedge_cache": "利用内存减少消息量,如果内存不够,可以从100改成1000,但三角计数可能计算不完" + }, + "weakly_connected_component": { + "desc":"弱连通分量,计算无向图中所有联通的子图,输出各顶点所属的弱联通子图id" + } }, "oltp": { - } }, - "async_task":{ + "async_task": { "name": "任务管理" } } diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js index e03316614..481b39177 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentrality/index.js @@ -22,13 +22,6 @@ import {useTranslation} from 'react-i18next'; const {BETWEENNESS_CENTRALITY} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; -const info = { - name: 'Betweenness Centrality', - desc: `中介中心性算法(Betweeness Centrality)判断一个节点具有"桥梁"节点的值, - 值越大说明它作为图中两点间必经路径的可能性越大, 典型的例子包括社交网络中的共同关注的人`, - icon: , -}; - const BetweennessCentrality = props => { const { handleFormSubmit, @@ -37,6 +30,11 @@ const BetweennessCentrality = props => { updateCurrentAlgorithm, } = props; const {t} = useTranslation(); + const info = { + name: 'Betweenness Centrality', + desc: t('analysis.algorithm.olap.betweenness_centrality.desc'), + icon: , + }; const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); @@ -122,7 +120,7 @@ const BetweennessCentrality = props => { label='worker' name='worker' rules={[{required: true}]} - tooltip='实例数' + tooltip={t('analysis.algorithm.common.instance_num')} > @@ -130,7 +128,7 @@ const BetweennessCentrality = props => { label='input.limit_edges_in_one_vertex' name='input.limit_edges_in_one_vertex' initialValue={-1} - tooltip='最大出边限制' + tooltip={t('analysis.algorithm.common.input_limit_edges_per_vertex')} > @@ -138,7 +136,7 @@ const BetweennessCentrality = props => { label='betweenness_centrality.sample_rate' name='betweenness_centrality.sample_rate' initialValue={1.0} - tooltip='边的采样率' + tooltip={t('analysis.algorithm.olap.betweenness_centrality.sample_rate')} rules={[{validator: alphaValidator}]} > @@ -147,7 +145,7 @@ const BetweennessCentrality = props => { label='bsp.max_super_step' name='bsp.max_super_step' initialValue={10} - tooltip='最大迭代次数' + tooltip={t('analysis.algorithm.common.max_iter_step')} rules={[{validator: greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentralityVermeer/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentralityVermeer/index.js index 98b479f1b..5b0612fd9 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentralityVermeer/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/BetweennessCentralityVermeer/index.js @@ -13,23 +13,12 @@ import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS} from '../../../../../utils/constants'; import {positiveIntegerValidator, greaterThanZeroAndLowerThanOneContainsValidator} from '../../utils'; +import {useTranslation} from 'react-i18next'; const {BETWEENNESS_CENTRALITY} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; const {LOADED} = GRAPH_LOAD_STATUS; -const info = { - name: 'Betweenness Centrality', - desc: `中介中心性算法(Betweeness Centrality)判断一个节点具有"桥梁"节点的值, - 值越大说明它作为图中两点间必经路径的可能性越大, 典型的例子包括社交网络中的共同关注的人`, - icon: , -}; - -const boolOptions = [ - {label: '是', value: 1}, - {label: '否', value: 0}, -]; - const BetweennessCentralityVermeer = props => { const { handleFormSubmit, @@ -37,7 +26,16 @@ const BetweennessCentralityVermeer = props => { currentAlgorithm, updateCurrentAlgorithm, } = props; - + const {t} = useTranslation(); + const info = { + name: 'Betweenness Centrality', + desc: t('analysis.algorithm.olap.betweenness_centrality.desc'), + icon: , + }; + const boolOptions = [ + {label: t('common.verify.yes'), value: 1}, + {label: t('common.verify.no'), value: 0}, + ]; const {graphSpace, graph, graphStatus} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(true); const [isRequiring, setRequiring] = useState(false); @@ -127,7 +125,7 @@ const BetweennessCentralityVermeer = props => { label='compute.parallel' name='compute.parallel' initialValue={1} - tooltip='worker计算线程数' + tooltip={t('analysis.algorithm.common.worker_num')} rules={[{validator: positiveIntegerValidator}]} > @@ -136,7 +134,7 @@ const BetweennessCentralityVermeer = props => { label='betweenness_centrality.sample_rate' name='betweenness_centrality.sample_rate' initialValue={1} - tooltip='边的采样率,由于此算法是指数型增长的算法,算力要求非常高,需要根据业务需求设置合理的采样率,得到一个近似结果' + tooltip={t('analysis.algorithm.olap.betweenness_centrality.sample_rate_long')} rules={[{validator: greaterThanZeroAndLowerThanOneContainsValidator}]} > @@ -145,7 +143,7 @@ const BetweennessCentralityVermeer = props => { label='betweenness_centrality.use_endpoint' name='betweenness_centrality.use_endpoint' initialValue={0} - tooltip={'是否计算最后一个点'} + tooltip={t('analysis.algorithm.olap.betweenness_centrality.use_endpoint')} > @@ -132,7 +133,7 @@ const ClosenessCentrality = props => { label='closeness_centrality.sample_rate' name='closeness_centrality.sample_rate' initialValue={1.0} - tooltip='边的采样率' + tooltip={t(OWNED_TEXT_PATH + '.sample_rate')} rules={[{validator: alphaValidator}]} > @@ -141,7 +142,7 @@ const ClosenessCentrality = props => { label='input.limit_edges_in_one_vertex' name='input.limit_edges_in_one_vertex' initialValue={-1} - tooltip='最大出边限制' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.input_limit_edges_per_vertex')} > @@ -149,7 +150,7 @@ const ClosenessCentrality = props => { label='bsp.max_super_step' name='bsp.max_super_step' initialValue={10} - tooltip='最大迭代次数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.max_iter_step')} rules={[{validator: greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClosenessCentralityVermeer/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClosenessCentralityVermeer/index.js index 38ae35b80..2ed02e0ca 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClosenessCentralityVermeer/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/ClosenessCentralityVermeer/index.js @@ -11,32 +11,35 @@ import AlgorithmNameHeader from '../../AlgorithmNameHeader'; import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; -import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS} from '../../../../../utils/constants'; +import { + GRAPH_STATUS, + ALGORITHM_NAME, + GRAPH_LOAD_STATUS, + TEXT_PATH, + useTranslatedConstants, +} from '../../../../../utils/constants'; import {positiveIntegerValidator, greaterThanZeroAndLowerThanOneContainsValidator} from '../../utils'; +import {useTranslation} from 'react-i18next'; const {CLOSENESS_CENTRALITY} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; const {LOADED} = GRAPH_LOAD_STATUS; - -const boolOptions = [ - {label: '是', value: 1}, - {label: '否', value: 0}, -]; - -const info = { - name: 'Closeness Centrality', - desc: '计算一个节点到所有其他可达节点的最短距离的倒数,进行累积后归一化的值。用于计算图中每个节点的度中心性值,支持无向图和有向图。', - icon: , -}; +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.closeness_centrality'; const ClosenessCentralityVermeer = props => { + const { handleFormSubmit, searchValue, currentAlgorithm, updateCurrentAlgorithm, } = props; - + const info = { + name: 'Closeness Centrality', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; + const {boolOptions} = useTranslatedConstants(); const {graphSpace, graph, graphStatus} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(true); @@ -64,9 +67,9 @@ const ClosenessCentralityVermeer = props => { setRequiring(true); updateCurrentAlgorithm(CLOSENESS_CENTRALITY); handleFormSubmit(LOADING); - const formParams = {'compute.algorithm': 'closeness_centrality', ...algorithmParams}; + const formParams = {'compute.algorithm': 'closeness_centrality', ...algorithmParams}; const filteredParams = removeNilKeys(formParams); - const response = await api.analysis.runOlapVermeer(graphSpace, graph, filteredParams); + const response = await api.analysis.runOlapVermeer(graphSpace, graph, filteredParams); const {data, status, message} = response || {}; if (status !== 200) { handleFormSubmit(FAILED, '', message); @@ -127,7 +130,7 @@ const ClosenessCentralityVermeer = props => { label='compute.parallel' name='compute.parallel' initialValue={1} - tooltip='worker计算线程数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + './worker_num')} rules={[{validator: positiveIntegerValidator}]} > @@ -136,7 +139,7 @@ const ClosenessCentralityVermeer = props => { label='closeness_centrality.sample_rate' name='closeness_centrality.sample_rate' initialValue={1.0} - tooltip='边的采样率,由于此算法是指数型增长的算法,算力要求非常高,需要根据业务需求设置合理的采样率,得到一个近似结果' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + './sample_rate')} rules={[{validator: greaterThanZeroAndLowerThanOneContainsValidator}]} > @@ -145,7 +148,7 @@ const ClosenessCentralityVermeer = props => { label='closeness_centrality.wf_improved' name='closeness_centrality.wf_improved' initialValue={1} - tooltip={'是否使用 Wasserman and Faust 紧密中心性公式'} + tooltip={t(OWNED_TEXT_PATH + './wf_improved')} > @@ -133,7 +133,7 @@ const DegreeCentrality = props => { label='degree_centrality.direction' name='degree_centrality.direction' initialValue='' - tooltip='方向,in/out/both 入边/出边/双边' + tooltip={t(OWNED_TEXT_PATH + '.direction')} > @@ -141,7 +141,7 @@ const DegreeCentrality = props => { label='bsp.max_super_step' name='bsp.max_super_step' initialValue={10} - tooltip='最大迭代次数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.max_iter_step')} rules={[{validator: greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/DegreeCentralityVermeer/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/DegreeCentralityVermeer/index.js index 24d827515..a62068a56 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/DegreeCentralityVermeer/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/DegreeCentralityVermeer/index.js @@ -12,24 +12,22 @@ import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; import {positiveIntegerValidator} from '../../utils'; -import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS} from '../../../../../utils/constants'; +import { + GRAPH_STATUS, + ALGORITHM_NAME, + GRAPH_LOAD_STATUS, + TEXT_PATH, + useTranslatedConstants, +} from '../../../../../utils/constants'; +import {useTranslation} from 'react-i18next'; + -const directionOptions = [ - {label: '出边', value: 'out'}, - {label: '入边', value: 'in'}, - {label: '双边', value: 'both'}, -]; const {DEGREE_CENTRALIT} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; const {LOADED} = GRAPH_LOAD_STATUS; -const info = { - name: 'Degree Centrality', - desc: '用于计算图中每个节点的度中心性值,支持无向图和有向图。', - icon: , -}; - +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.degree_centrality'; const DegreeCentralityVermeer = props => { const { handleFormSubmit, @@ -37,7 +35,13 @@ const DegreeCentralityVermeer = props => { currentAlgorithm, updateCurrentAlgorithm, } = props; - + const {t} = useTranslation(); + const {directionOptions} = useTranslatedConstants(); + const info = { + name: 'Degree Centrality', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph, graphStatus} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(true); @@ -128,7 +132,7 @@ const DegreeCentralityVermeer = props => { label='compute.parallel' name='compute.parallel' initialValue={1} - tooltip='worker计算线程数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.worker_num')} rules={[{validator: positiveIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilterSubGraphMatching/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilterSubGraphMatching/index.js index 3e70e1fe0..44baaf6a5 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilterSubGraphMatching/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilterSubGraphMatching/index.js @@ -12,29 +12,32 @@ import OlapComputerItem from '../OlapComputerItem'; import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; -import {GRAPH_STATUS, ALGORITHM_NAME} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, TEXT_PATH} from '../../../../../utils/constants'; +import {useTranslation} from 'react-i18next'; const {TextArea} = Input; const {FILTER_SUBGRAPH_MATCHING} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; -const info = { - name: 'Filter SubGraph Matching', - desc: '带属性过滤的子图匹配算法。用户可以传入一个带属性过滤的查询图结构,算法会在图中匹配所有与该查询图同构的子图。', - icon: , -}; +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.filter_subgraph_matching'; + // eslint-disable-next-line const placeholder = '[{"id":"A","label":"person",},{"id":"B","label":"person","property_filter":"$element.x > 3"},{"id":"C","label":"person","edges":[{"targetId":"A","label":"knows","property_filter":"$element.x > 3"}]},{"id":"D","label":"person","property_filter":"$element.x > 3","edges":[{"targetId":"B","label":"knows",},{"targetId":"F","label":"knows","property_filter":"$element.x > 3"},{"targetId":"C","label":"knows",},{"targetId":"E","label":"knows",}]},{"id":"E","label":"person",},{"id":"F","label":"person","property_filter":"$element.x > 3","edges":[{"targetId":"B","label":"knows","property_filter":"$element.x > 3"},{"targetId":"C","label":"knows","property_filter":"$element.x > 3"}]}]'; const FilterSubGraphMatching = props => { + const {t} = useTranslation(); const { handleFormSubmit, searchValue, currentAlgorithm, updateCurrentAlgorithm, } = props; - + const info = { + name: 'Filter SubGraph Matching', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); @@ -120,14 +123,14 @@ const FilterSubGraphMatching = props => { label='worker' name='worker' rules={[{required: true}]} - tooltip='实例数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.instance_num')} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilteredRingsDetection/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilteredRingsDetection/index.js index 3aedffad9..699d78197 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilteredRingsDetection/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/FilteredRingsDetection/index.js @@ -12,31 +12,32 @@ import OlapComputerItem from '../OlapComputerItem'; import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; -import {GRAPH_STATUS, ALGORITHM_NAME} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, TEXT_PATH} from '../../../../../utils/constants'; import { integerValidator, greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator, } from '../../utils'; +import {useTranslation} from 'react-i18next'; const {FILTERED_RINGS_DETECTION} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; -const info = { - name: 'Filtered Rings Detection', - desc: `带过滤条件的环路检测算法(Filtered Rings Detection)用于检测图中的环路, - 环路的路径由环路中最小id的顶点来记录。可通过指定点、边属性过滤规则让算法选择性的做路径传播。`, - icon: , -}; -const placeholder = '{"vertex_filter":[{"label":"user","property_filter":"$element.weight==1"}]}'; +const placeholder = '{"vertex_filter":[{"label":"user","property_filter":"$element.weight==1"}]}'; +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.filtered_rings_detection'; const FilteredRingsDetection = props => { + const {t} = useTranslation(); const { handleFormSubmit, searchValue, currentAlgorithm, updateCurrentAlgorithm, } = props; - + const info = { + name: 'Filtered Rings Detection', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); @@ -122,7 +123,7 @@ const FilteredRingsDetection = props => { label='worker' name='worker' rules={[{required: true}]} - tooltip='实例数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.instance_num')} > @@ -130,7 +131,7 @@ const FilteredRingsDetection = props => { label='rings.property_filter' name='rings.property_filter' initialValue={placeholder} - tooltip='点边属性过滤条件' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.property_filter')} > { label='rings.min_ring_length' name='rings.min_ring_length' initialValue={0} - tooltip='输出环路的最小长度' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.min_ring_length')} rules={[{validator: integerValidator}]} > @@ -150,7 +151,7 @@ const FilteredRingsDetection = props => { label='rings.max_ring_length' name='rings.max_ring_length' initialValue={Number.MAX_SAFE_INTEGER} - tooltip='输出环路的最大长度' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.max_ring_length')} rules={[{validator: integerValidator}]} > @@ -159,7 +160,7 @@ const FilteredRingsDetection = props => { label='bsp.max_super_step' name='bsp.max_super_step' initialValue={10} - tooltip='最大迭代次数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.max_iter_step')} rules={[{validator: greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCore/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCore/index.js index 30e5e4038..bc549818a 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCore/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCore/index.js @@ -9,28 +9,31 @@ import {TagsOutlined} from '@ant-design/icons'; import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; -import {GRAPH_STATUS, ALGORITHM_NAME} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, TEXT_PATH} from '../../../../../utils/constants'; import GraphAnalysisContext from '../../../../Context'; import AlgorithmNameHeader from '../../AlgorithmNameHeader'; import OlapComputerItem from '../OlapComputerItem'; +import {useTranslation} from 'react-i18next'; const {K_CORE} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; -const info = { - name: 'K-Core', - desc: 'K-Core算法,标记所有度数为K的顶点。', - icon: , -}; +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.k_core'; + const KCore = props => { + const {t} = useTranslation(); const { handleFormSubmit, searchValue, currentAlgorithm, updateCurrentAlgorithm, } = props; - + const info = { + name: 'K-Core', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); @@ -116,7 +119,7 @@ const KCore = props => { label='worker' name='worker' rules={[{required: true}]} - tooltip='实例数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.instance_num')} > @@ -124,7 +127,7 @@ const KCore = props => { initialValue={3} label='kcore.k' name='kcore.k' - tooltip='K-Core算法的k值,非必需,有默认值' + tooltip={t(OWNED_TEXT_PATH + '.k')} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCoreVermeer/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCoreVermeer/index.js index c48d3306c..493a5f908 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCoreVermeer/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/KCoreVermeer/index.js @@ -10,28 +10,30 @@ import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; import {positiveIntegerValidator} from '../../utils'; -import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS, TEXT_PATH} from '../../../../../utils/constants'; import GraphAnalysisContext from '../../../../Context'; import AlgorithmNameHeader from '../../AlgorithmNameHeader'; +import {useTranslation} from 'react-i18next'; const {K_CORE} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; const {LOADED} = GRAPH_LOAD_STATUS; -const info = { - name: 'K-Core', - desc: 'K-Core算法,标记所有度数为K的顶点。', - icon: , -}; +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.k_core'; const KCoreVermeer = props => { + const {t} = useTranslation(); const { handleFormSubmit, searchValue, currentAlgorithm, updateCurrentAlgorithm, } = props; - + const info = { + name: 'K-Core', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph, graphStatus} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(true); @@ -122,7 +124,7 @@ const KCoreVermeer = props => { label='compute.parallel' name='compute.parallel' initialValue={1} - tooltip='worker计算线程数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.worker_num')} rules={[{validator: positiveIntegerValidator}]} > @@ -131,7 +133,7 @@ const KCoreVermeer = props => { label='kcore.degree_k' name='kcore.degree_k' initialValue={3} - tooltip='最小度数阈值' + tooltip={t(OWNED_TEXT_PATH + '.degree_k')} rules={[{validator: positiveIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithm/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithm/index.js index 44298d300..221d3ea17 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithm/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithm/index.js @@ -12,17 +12,12 @@ import OlapComputerItem from '../OlapComputerItem'; import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; -import {GRAPH_STATUS, ALGORITHM_NAME} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, TEXT_PATH} from '../../../../../utils/constants'; +import {useTranslation} from 'react-i18next'; const {LABEL_PROPAGATION_ALGORITHM} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; - -const info = { - name: 'Label Propagation Algorithm', - desc: '标签传递算法,是一种图聚类算法,常用在社交网络中。', - icon: , -}; - +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.label_propagation_algorithm'; const LabelPropagationAlgorithm = props => { const { handleFormSubmit, @@ -30,7 +25,12 @@ const LabelPropagationAlgorithm = props => { currentAlgorithm, updateCurrentAlgorithm, } = props; - + const {t} = useTranslation(); + const info = { + name: 'Label Propagation Algorithm', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); @@ -116,7 +116,7 @@ const LabelPropagationAlgorithm = props => { label='worker' name='worker' rules={[{required: true}]} - tooltip='实例数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.instance_num')} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithmVermeer/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithmVermeer/index.js index 49452b3cc..dbaac9e70 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithmVermeer/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/LabelPropagationAlgorithmVermeer/index.js @@ -12,17 +12,15 @@ import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; import {positiveIntegerValidator} from '../../utils/index'; -import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, GRAPH_LOAD_STATUS, TEXT_PATH} from '../../../../../utils/constants'; +import {useTranslation} from 'react-i18next'; const {LABEL_PROPAGATION_ALGORITHM} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; const {LOADED} = GRAPH_LOAD_STATUS; -const info = { - name: 'Label Propagation Algorithm', - desc: '标签传递算法,是一种图聚类算法,常用在社交网络中。', - icon: , -}; +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.label_propagation_algorithm'; + const LabelPropagationAlgorithmVermeer = props => { const { @@ -31,7 +29,12 @@ const LabelPropagationAlgorithmVermeer = props => { currentAlgorithm, updateCurrentAlgorithm, } = props; - + const {t} = useTranslation(); + const info = { + name: 'Label Propagation Algorithm', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph, graphStatus} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(true); @@ -122,7 +125,7 @@ const LabelPropagationAlgorithmVermeer = props => { label='compute.parallel' name='compute.parallel' initialValue={1} - tooltip='worker计算线程数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.worker_num')} rules={[{validator: positiveIntegerValidator}]} > @@ -131,7 +134,7 @@ const LabelPropagationAlgorithmVermeer = props => { label='compute.max_step' name='compute.max_step' initialValue={10} - tooltip='最大迭代步数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.max_step')} rules={[{validator: positiveIntegerValidator}]} > diff --git a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/Links/index.js b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/Links/index.js index d97b0bcb1..e5a0b7536 100644 --- a/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/Links/index.js +++ b/hugegraph-hubble/hubble-fe-new/src/modules/algorithm/algorithmsForm/Olap/Links/index.js @@ -12,22 +12,17 @@ import OlapComputerItem from '../OlapComputerItem'; import _ from 'lodash'; import * as api from '../../../../../api'; import removeNilKeys from '../../../../../utils/removeNilKeys'; -import {GRAPH_STATUS, ALGORITHM_NAME} from '../../../../../utils/constants'; +import {GRAPH_STATUS, ALGORITHM_NAME, TEXT_PATH} from '../../../../../utils/constants'; import {greaterThanZeroAndLowerThanTwoThousandAndOneIntegerValidator} from '../../utils'; +import {useTranslation} from 'react-i18next'; const {TextArea} = Input; const {LINKS} = ALGORITHM_NAME; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; - -const info = { - name: 'Links', - desc: '链路追踪算法,通过指定的一批开始顶点,按照指定的传播规则进行传播,到指定的结束条件后停止并记录下路径。', - icon: , -}; // eslint-disable-next-line const placeholder='{"start_vertexes":["A","B","C","D","E"],"vertex_end_condition":{"label":"user","property_filter":"$element.age <= 90"},"edge_end_condition":{"label":"pay","property_filter":"double($out.money) >= 4"},"edge_compare_condition":{"label":"pay","property_filter":"$out.money > $in.money"}}'; - +const OWNED_TEXT_PATH = TEXT_PATH.OLAP + '.links'; const Links = props => { const { handleFormSubmit, @@ -35,7 +30,12 @@ const Links = props => { currentAlgorithm, updateCurrentAlgorithm, } = props; - + const {t} = useTranslation(); + const info = { + name: 'Links', + desc: t(OWNED_TEXT_PATH + '.desc'), + icon: , + }; const {graphSpace, graph} = useContext(GraphAnalysisContext); const [isEnableRun, setEnableRun] = useState(false); const [isRequiring, setRequiring] = useState(false); @@ -120,7 +120,7 @@ const Links = props => { label='worker' name='worker' rules={[{required: true}]} - tooltip='实例数' + tooltip={t(TEXT_PATH.ALGORITHM_COMMON + '.instance_num')} > @@ -128,7 +128,7 @@ const Links = props => { label='links.analyze_config' name='links.analyze_config' initialValue={placeholder} - tooltip='链路传播条件配置' + tooltip={t(OWNED_TEXT_PATH + '.analyze_config')} rules={[{required: true}]} > + + + + {isCodeExpand ? ( +
+ {t('addition.operate.expand')} + {t('addition.operate.collapse')} +
+ ) : ( +
+
+ {t('addition.operate.collapse')} + {t('addition.operate.expand')} +
+
+ )} + + + {isCodeExpand && + dataAnalyzeStore.requestStatus.fetchGraphs === 'failed' && + dataAnalyzeStore.errorInfo.fetchGraphs.code === 460 && ( + + )} + + {isCodeExpand && ( +
+ + { + dataAnalyzeStore.setQueryMode(e.key); + }} + overlayClassName="improve-zindex" + onClickButton={handleQueryExecution} + size="small" + type="primary" + disabled={ + dataAnalyzeStore.codeEditorText.length === 0 || + !codeRegexp.test(dataAnalyzeStore.codeEditorText) || + dataAnalyzeStore.requestStatus.fetchGraphs === 'pending' + } + /> + + +
+ tips +
+
+ {dataAnalyzeStore.codeEditorText.length !== 0 ? ( + } + childrenWrapperElement="div" + > + + + ) : ( + + + + )} + +
+ )} + + ); +}); + +export const AlgorithmQuery: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + const { algorithmAnalyzerStore } = dataAnalyzeStore; + const { t } = useTranslation(); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateShortestPathParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.shortestPathAlgorithmParams.source !== '' && + algorithmAnalyzerStore.shortestPathAlgorithmParams.target !== '' && + algorithmAnalyzerStore.shortestPathAlgorithmParams.max_depth !== ''; + + const handleChangeAlgorithm = (algorithm: string) => () => { + algorithmAnalyzerStore.changeCurrentAlgorithm(algorithm); + }; + + const handleExpandClick = () => { + algorithmAnalyzerStore.switchCollapse(!algorithmAnalyzerStore.isCollapse); + }; + + const renderForms = () => { + switch (algorithmAnalyzerStore.currentAlgorithm) { + case Algorithm.loopDetection: + return ; + case Algorithm.focusDetection: + return ; + case Algorithm.shortestPath: + return ; + case Algorithm.shortestPathAll: + return ; + case Algorithm.allPath: + return ; + case Algorithm.modelSimilarity: + return ; + case Algorithm.neighborRank: + return ; + case Algorithm.kStepNeighbor: + return ; + case Algorithm.kHop: + return ; + case Algorithm.customPath: + return ; + case Algorithm.radiographicInspection: + return ; + case Algorithm.sameNeighbor: + return ; + case Algorithm.weightedShortestPath: + return ; + case Algorithm.singleSourceWeightedShortestPath: + return ; + case Algorithm.jaccard: + return ; + case Algorithm.personalRankRecommendation: + return ; + } + }; + + useEffect(() => { + return () => { + algorithmAnalyzerStore.dispose(); + }; + }, []); + + return ( +
+
+ {algorithmAnalyzerStore.currentAlgorithm === '' ? ( + {t('data-analyze.algorithm-list.title')} + ) : ( +
+ go-back { + algorithmAnalyzerStore.switchCollapse(false); + algorithmAnalyzerStore.changeCurrentAlgorithm(''); + }} + /> + + {t( + `data-analyze.algorithm-list.${algorithmAnalyzerStore.currentAlgorithm}` + )} + +
+ )} +
+ expand-collpase +
+ {algorithmAnalyzerStore.isCollapse ? null : algorithmAnalyzerStore.currentAlgorithm === + '' ? ( + <> +
+ {[ + Algorithm.loopDetection, + Algorithm.focusDetection, + Algorithm.shortestPath, + Algorithm.shortestPathAll, + Algorithm.allPath + ].map((algorithm) => ( + + {t(`data-analyze.algorithm-list.${algorithm}`)} + + ))} +
+
+ {[ + Algorithm.modelSimilarity, + Algorithm.neighborRank, + Algorithm.kStepNeighbor, + Algorithm.kHop, + Algorithm.customPath + ].map((algorithm) => ( + + {t(`data-analyze.algorithm-list.${algorithm}`)} + + ))} +
+
+ {[ + Algorithm.radiographicInspection, + Algorithm.sameNeighbor, + Algorithm.weightedShortestPath, + Algorithm.singleSourceWeightedShortestPath, + Algorithm.jaccard + ].map((algorithm) => ( + + {t(`data-analyze.algorithm-list.${algorithm}`)} + + ))} +
+
+ {[Algorithm.personalRankRecommendation].map((algorithm) => ( + + {t(`data-analyze.algorithm-list.${algorithm}`)} + + ))} +
+ + ) : ( + renderForms() + )} +
+ ); +}); + +export default QueryAndAlgorithmLibrary; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/AllPath.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/AllPath.tsx new file mode 100644 index 000000000..8695bb8cf --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/AllPath.tsx @@ -0,0 +1,407 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { GraphManagementStoreContext } from '../../../../stores'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; + +const AllPath = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateAllPathParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.allPathParams.source !== '' && + algorithmAnalyzerStore.allPathParams.target !== '' && + algorithmAnalyzerStore.allPathParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.all-path.options.source')} + +
+ { + algorithmAnalyzerStore.mutateAllPathParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateAllPathParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateAllPathParams('source'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.all-path.options.label')} + +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.all-path.options.target')} + +
+ { + algorithmAnalyzerStore.mutateAllPathParams( + 'target', + e.value as string + ); + + algorithmAnalyzerStore.validateAllPathParams('target'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateAllPathParams('target'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.all-path.options.max_degree')} + + +
+ { + algorithmAnalyzerStore.mutateAllPathParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateAllPathParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateAllPathParams('max_degree'); + } + }} + /> +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.all-path.options.direction')} + +
+ ) => { + algorithmAnalyzerStore.mutateAllPathParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t('data-analyze.algorithm-forms.all-path.options.capacity')} + +
+ { + algorithmAnalyzerStore.mutateAllPathParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateAllPathParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateAllPathParams('capacity'); + } + }} + /> +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.all-path.options.max_depth')} + + +
+ { + algorithmAnalyzerStore.mutateAllPathParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateAllPathParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateAllPathParams('max_depth'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.all-path.options.limit')} + +
+ { + algorithmAnalyzerStore.mutateAllPathParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateAllPathParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateAllPathParams('limit'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default AllPath; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx new file mode 100644 index 000000000..e57b2ed59 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/CustomPath.tsx @@ -0,0 +1,1115 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { + size, + flatten, + flattenDeep, + uniq, + isEmpty, + cloneDeep, + fromPairs +} from 'lodash-es'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { isDataTypeNumeric, calcAlgorithmFormWidth } from '../../../../utils'; + +const CustomPath = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { t } = useTranslation(); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 390 + ); + + const formWidthInStep = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 310, + 380 + ); + + const formSmallWidthInStep = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 150, + 160 + ); + + const sourceType = algorithmAnalyzerStore.customPathParams.method; + + const allowAddNewProperty = !flatten( + algorithmAnalyzerStore.customPathParams.vertexProperty + ).some((value) => value === ''); + + const addNewPropertyClassName = + allowAddNewProperty && + dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' + ? 'query-tab-content-internal-expand-manipulation-enable' + : 'query-tab-content-internal-expand-manipulation-disabled'; + + const allowAddNewRuleProperty = !flattenDeep( + algorithmAnalyzerStore.customPathParams.steps.map( + ({ properties }) => properties + ) + ).some((value) => value === ''); + + const addNewRulePropertyClassName = + allowAddNewRuleProperty && + dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' + ? 'query-tab-content-internal-expand-manipulation-enable' + : 'query-tab-content-internal-expand-manipulation-disabled'; + + const isValidSourceId = + algorithmAnalyzerStore.customPathParams.method === 'id' && + algorithmAnalyzerStore.customPathParams.source !== ''; + + const isValidProperty = + algorithmAnalyzerStore.customPathParams.method === 'property' && + !( + isEmpty(algorithmAnalyzerStore.customPathParams.vertexType) && + flatten( + algorithmAnalyzerStore.customPathParams.vertexProperty + ).every((value) => isEmpty(value)) + ) && + algorithmAnalyzerStore.customPathParams.vertexProperty.every( + ([key, value]) => (!isEmpty(key) ? !isEmpty(value) : true) + ); + + const isValidateRuleProperties = algorithmAnalyzerStore.customPathParams.steps.every( + ({ properties }) => { + if (size(properties) === 1) { + return ( + (isEmpty(properties[0][0]) && isEmpty(properties[0][1])) || + (!isEmpty(properties[0][0]) && !isEmpty(properties[0][1])) + ); + } else { + return properties.every(([, value]) => !isEmpty(value)); + } + } + ); + + const isValidRuleWeight = algorithmAnalyzerStore.customPathParams.steps.every( + ({ weight_by, default_weight }) => + algorithmAnalyzerStore.customPathParams.sort_by === 'NONE' || + (weight_by === '__CUSTOM_WEIGHT__' && default_weight !== '') || + (weight_by !== '__CUSTOM_WEIGHT__' && !isEmpty(weight_by)) + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateCustomPathParmasErrorMessage + ).every((value) => Array.isArray(value) || value === '') && + algorithmAnalyzerStore.validateCustomPathParmasErrorMessage.steps.every( + (step) => Object.values(step).every((value) => value === '') + ) && + (algorithmAnalyzerStore.customPathParams.method === 'id' + ? algorithmAnalyzerStore.customPathParams.source !== '' + : true) && + (isValidSourceId || isValidProperty) && + isValidateRuleProperties && + isValidRuleWeight; + + const isValidAddRule = algorithmAnalyzerStore.validateCustomPathParmasErrorMessage.steps.every( + (step) => Object.values(step).every((value) => value === '') + ); + + return ( +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.custom-path.options.method')} + +
+ ) => { + algorithmAnalyzerStore.switchCustomPathMethod(e.target.value); + }} + > + + {t( + 'data-analyze.algorithm-forms.custom-path.radio-value.specific-id' + )} + + + {t( + 'data-analyze.algorithm-forms.custom-path.radio-value.filtered-type-property' + )} + + +
+
+ + {sourceType === 'id' && ( +
+
+
+ * + + {t('data-analyze.algorithm-forms.custom-path.options.source')} + +
+ + { + algorithmAnalyzerStore.mutateCustomPathParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateCustomPathParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathParams('source'); + } + }} + /> +
+
+ )} + + {sourceType !== 'id' && ( + <> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.custom-path.options.vertex-type' + )} + +
+ +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.custom-path.options.vertex-property' + )} + +
+ +
+ {algorithmAnalyzerStore.customPathParams.vertexProperty.map( + ([key, value], propertyIndex) => { + const currentVertexType = dataAnalyzeStore.vertexTypes.find( + ({ name }) => + name === + algorithmAnalyzerStore.customPathParams.vertexType + ); + + return ( +
+ +
+ { + const vertexProperty = cloneDeep( + algorithmAnalyzerStore.customPathParams + .vertexProperty + ); + + vertexProperty[propertyIndex][1] = e.value; + + algorithmAnalyzerStore.mutateCustomPathParams( + 'vertexProperty', + vertexProperty + ); + + algorithmAnalyzerStore.validateCustomPathParams( + 'vertexProperty' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathParams( + 'vertexProperty' + ); + } + }} + /> +
+ {size( + algorithmAnalyzerStore.customPathParams + .vertexProperty + ) > 1 && ( +
{ + algorithmAnalyzerStore.removeCustomPathVertexProperty( + propertyIndex + ); + }} + > + {t( + 'data-analyze.algorithm-forms.custom-path.delete' + )} +
+ )} +
+ ); + } + )} +
+
+
+ {algorithmAnalyzerStore.customPathParams.vertexType === '' && + !allowAddNewProperty && + size(algorithmAnalyzerStore.customPathParams.vertexProperty) === + 1 ? ( +
+ + {t( + 'data-analyze.algorithm-forms.custom-path.hint.vertex_type_or_property' + )} + +
+ ) : ( +
+ { + if ( + allowAddNewProperty && + dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' + ) { + algorithmAnalyzerStore.addCustomPathVertexProperty(); + } + }} + > + {t('data-analyze.algorithm-forms.custom-path.add')} + +
+ )} + + )} + +
+
+
+ * + + {t('data-analyze.algorithm-forms.custom-path.options.sort_by')} + +
+ ) => { + algorithmAnalyzerStore.mutateCustomPathParams( + 'sort_by', + e.target.value + ); + + if (e.target.value === 'NONE') { + algorithmAnalyzerStore.customPathParams.steps.forEach( + (_, ruleIndex) => { + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'weight_by', + '', + ruleIndex + ); + + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'default_weight', + '', + ruleIndex + ); + } + ); + } + }} + > + + {t('data-analyze.algorithm-forms.custom-path.radio-value.none')} + + + {t( + 'data-analyze.algorithm-forms.custom-path.radio-value.ascend' + )} + + + {t( + 'data-analyze.algorithm-forms.custom-path.radio-value.descend' + )} + + +
+
+
+
+
+ + {t('data-analyze.algorithm-forms.custom-path.options.capacity')} + +
+ { + algorithmAnalyzerStore.mutateCustomPathParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateCustomPathParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathParams('capacity'); + } + }} + /> +
+
+
+
+
+ + {t('data-analyze.algorithm-forms.custom-path.options.limit')} + +
+ { + algorithmAnalyzerStore.mutateCustomPathParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateCustomPathParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathParams('limit'); + } + }} + /> +
+
+
+ + +
+
+ +
+ {algorithmAnalyzerStore.customPathParams.steps.map( + ( + { + uuid, + direction, + labels, + degree, + sample, + properties, + weight_by, + default_weight + }, + ruleIndex + ) => { + return ( +
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.custom-path.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'direction', + e.target.value, + ruleIndex + ); + }} + > + both + out + in + + {size(algorithmAnalyzerStore.customPathParams.steps) > 1 && ( +
{ + algorithmAnalyzerStore.removeCustomPathRule(ruleIndex); + }} + > + 删除 +
+ )} +
+
+
+ + {t( + 'data-analyze.algorithm-forms.custom-path.options.labels' + )} + +
+ +
+ +
+
+ + {t( + 'data-analyze.algorithm-forms.custom-path.options.properties' + )} + +
+
+ <> + {properties.map(([key, value], propertyIndex) => { + return ( +
+
+ +
+ +
+ { + const clonedRuleProperties = cloneDeep( + properties + ); + + clonedRuleProperties[propertyIndex][1] = + e.value; + + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'properties', + clonedRuleProperties, + ruleIndex + ); + }} + /> +
+ + {size(properties) > 1 && ( +
{ + algorithmAnalyzerStore.removeCustomPathRuleProperty( + ruleIndex, + propertyIndex + ); + }} + > + {t( + 'data-analyze.algorithm-forms.custom-path.delete' + )} +
+ )} +
+ ); + })} + +
+ { + if ( + allowAddNewRuleProperty && + dataAnalyzeStore.requestStatus.fetchGraphs !== + 'pending' + ) { + algorithmAnalyzerStore.addCustomPathRuleProperty( + ruleIndex + ); + } + }} + > + {t('data-analyze.algorithm-forms.custom-path.add')} + +
+ +
+
+ + {algorithmAnalyzerStore.customPathParams.sort_by !== 'NONE' && ( +
+
+ * + + {t( + 'data-analyze.algorithm-forms.custom-path.options.weight_by' + )} + +
+ +
+ )} + {algorithmAnalyzerStore.customPathParams.steps[ruleIndex] + .weight_by === '__CUSTOM_WEIGHT__' && ( +
+
+ +
+ { + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'default_weight', + e.value as string, + ruleIndex + ); + + algorithmAnalyzerStore.validateCustomPathRules( + 'default_weight', + ruleIndex + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathRules( + 'default_weight', + ruleIndex + ); + } + }} + /> +
+ )} +
+
+ + {t( + 'data-analyze.algorithm-forms.custom-path.options.degree' + )} + +
+ { + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'degree', + e.value as string, + ruleIndex + ); + + algorithmAnalyzerStore.validateCustomPathRules( + 'degree', + ruleIndex + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathRules( + 'degree', + ruleIndex + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.custom-path.options.sample' + )} + +
+ { + algorithmAnalyzerStore.mutateCustomPathRuleParams( + 'sample', + e.value as string, + ruleIndex + ); + + algorithmAnalyzerStore.validateCustomPathRules( + 'sample', + ruleIndex + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateCustomPathRules( + 'sample', + ruleIndex + ); + } + }} + /> +
+
+ ); + } + )} +
+ { + if (isValidAddRule) { + algorithmAnalyzerStore.addCustomPathRule(); + } + }} + > + {t('data-analyze.algorithm-forms.custom-path.add-new-rule')} + +
+
+
+ ); +}); + +export default CustomPath; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx new file mode 100644 index 000000000..58a37782c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/FocusDetection.tsx @@ -0,0 +1,423 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, createContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { GraphManagementStoreContext } from '../../../../stores'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +const FocusDetection = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateFocusDetectionParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.focusDetectionParams.source !== '' && + algorithmAnalyzerStore.focusDetectionParams.target !== '' && + algorithmAnalyzerStore.focusDetectionParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.focus-detection.options.source')} + +
+ { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateFocusDetectionParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateFocusDetectionParams('source'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.focus-detection.options.label')} + +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.focus-detection.options.target')} + +
+ { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'target', + e.value as string + ); + + algorithmAnalyzerStore.validateFocusDetectionParams('target'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateFocusDetectionParams('target'); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.focus-detection.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateFocusDetectionParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateFocusDetectionParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.focus-detection.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.focus-detection.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateFocusDetectionParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateFocusDetectionParams('capacity'); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.focus-detection.options.max_depth' + )} + + +
+ { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateFocusDetectionParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateFocusDetectionParams( + 'max_depth' + ); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.focus-detection.options.limit')} + +
+ { + algorithmAnalyzerStore.mutateFocusDetectionParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateFocusDetectionParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateFocusDetectionParams('limit'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default FocusDetection; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx new file mode 100644 index 000000000..8dcb148f4 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/Jaccard.tsx @@ -0,0 +1,278 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const Jaccard = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { t } = useTranslation(); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateJaccardParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.jaccardParams.vertex !== '' && + algorithmAnalyzerStore.jaccardParams.other !== ''; + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.jaccard.options.vertex')} + +
+ { + algorithmAnalyzerStore.mutateJaccardParams( + 'vertex', + e.value as string + ); + + algorithmAnalyzerStore.validateJaccardParams('vertex'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateJaccardParams('vertex'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.jaccard.options.label')} + +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.jaccard.options.other')} + +
+ { + algorithmAnalyzerStore.mutateJaccardParams( + 'other', + e.value as string + ); + + algorithmAnalyzerStore.validateJaccardParams('other'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateJaccardParams('other'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.jaccard.options.max_degree')} + + +
+ { + algorithmAnalyzerStore.mutateJaccardParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateJaccardParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateJaccardParams('max_degree'); + } + }} + /> +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.jaccard.options.direction')} + +
+ ) => { + algorithmAnalyzerStore.mutateJaccardParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + +
+
+ ); +}); + +export default Jaccard; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/KHop.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/KHop.tsx new file mode 100644 index 000000000..bd12e6f83 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/KHop.tsx @@ -0,0 +1,408 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; +import { styles } from '../QueryAndAlgorithmLibrary'; + +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const KHop = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values(algorithmAnalyzerStore.validateKHopParamsErrorMessage).every( + (value) => value === '' + ) && + algorithmAnalyzerStore.kHopParams.source !== '' && + algorithmAnalyzerStore.kHopParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.k-hop.options.source')} + +
+ { + algorithmAnalyzerStore.mutateKHopParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateKHopParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKHopParams('source'); + } + }} + /> +
+
+
+ {t('data-analyze.algorithm-forms.k-hop.options.label')} +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.k-hop.options.direction')} + +
+ ) => { + algorithmAnalyzerStore.mutateKHopParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t('data-analyze.algorithm-forms.k-hop.options.max_degree')} + + +
+ { + algorithmAnalyzerStore.mutateKHopParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateKHopParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKHopParams('max_degree'); + } + }} + /> +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.k-hop.options.max_depth')} + + +
+ { + algorithmAnalyzerStore.mutateKHopParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateKHopParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKHopParams('max_depth'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.k-hop.options.capacity')} + +
+ { + algorithmAnalyzerStore.mutateKHopParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateKHopParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKHopParams('capacity'); + } + }} + /> +
+
+
+
+
+ + {t('data-analyze.algorithm-forms.k-hop.options.nearest')} + + +
+ { + algorithmAnalyzerStore.mutateKHopParams('nearest', checked); + }} + /> +
+
+
+ {t('data-analyze.algorithm-forms.k-hop.options.limit')} +
+ { + algorithmAnalyzerStore.mutateKHopParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateKHopParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKHopParams('limit'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default KHop; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx new file mode 100644 index 000000000..6b46cd94a --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/KStepNeighbor.tsx @@ -0,0 +1,348 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const KStepNeighbor = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateKStepNeighborParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.kStepNeighborParams.source !== '' && + algorithmAnalyzerStore.kStepNeighborParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.k-step-neighbor.options.source')} + +
+ { + algorithmAnalyzerStore.mutateKStepNeighborParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateKStepNeighborParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKStepNeighborParams('source'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.k-step-neighbor.options.label')} + +
+ +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.k-step-neighbor.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateKStepNeighborParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.k-step-neighbor.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateKStepNeighborParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateKStepNeighborParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKStepNeighborParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.k-step-neighbor.options.max_depth' + )} + + +
+ { + algorithmAnalyzerStore.mutateKStepNeighborParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateKStepNeighborParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKStepNeighborParams('max_depth'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.k-step-neighbor.options.limit')} + +
+ { + algorithmAnalyzerStore.mutateKStepNeighborParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateKStepNeighborParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateKStepNeighborParams('limit'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default KStepNeighbor; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx new file mode 100644 index 000000000..49b134db7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/LoopDetection.tsx @@ -0,0 +1,407 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { GraphManagementStoreContext } from '../../../../stores'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const LoopDetection = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateLoopDetectionParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.loopDetectionParams.source !== '' && + algorithmAnalyzerStore.loopDetectionParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.loop-detection.options.source')} + +
+ { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateLoopDetectionParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateLoopDetectionParams('source'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.loop-detection.options.label')} + +
+ +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.loop-detection.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.loop-detection.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateLoopDetectionParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateLoopDetectionParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.loop-detection.options.max_depth' + )} + + +
+ { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateLoopDetectionParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateLoopDetectionParams('max_depth'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.loop-detection.options.limit')} + +
+ { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateLoopDetectionParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateLoopDetectionParams('limit'); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.loop-detection.options.source_in_ring' + )} + +
+ { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'source_in_ring', + checked + ); + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.loop-detection.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateLoopDetectionParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateLoopDetectionParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateLoopDetectionParams('capacity'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default LoopDetection; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx new file mode 100644 index 000000000..4ad2ed7ab --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ModelSimilarity.tsx @@ -0,0 +1,1166 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { flatten, cloneDeep, size, isEmpty } from 'lodash-es'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; + +const ModelSimilarity = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 390 + ); + + const sourceType = algorithmAnalyzerStore.modelSimilarityParams.method; + + const allowAddNewProperty = !flatten( + algorithmAnalyzerStore.modelSimilarityParams.vertexProperty + ).some((value) => value === ''); + + const addNewPropertyClassName = + allowAddNewProperty && + dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' + ? 'query-tab-content-internal-expand-manipulation-enable' + : 'query-tab-content-internal-expand-manipulation-disabled'; + + const isValidSourceId = + algorithmAnalyzerStore.modelSimilarityParams.method === 'id' && + algorithmAnalyzerStore.modelSimilarityParams.source !== ''; + + const isValidProperty = + algorithmAnalyzerStore.modelSimilarityParams.method === 'property' && + !( + isEmpty(algorithmAnalyzerStore.modelSimilarityParams.vertexType) && + flatten( + algorithmAnalyzerStore.modelSimilarityParams.vertexProperty + ).every((value) => isEmpty(value)) + ) && + algorithmAnalyzerStore.modelSimilarityParams.vertexProperty.every( + ([key, value]) => (!isEmpty(key) ? !isEmpty(value) : true) + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateModelSimilartiyParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.modelSimilarityParams.least_neighbor !== '' && + algorithmAnalyzerStore.modelSimilarityParams.similarity !== '' && + (!isEmpty(algorithmAnalyzerStore.modelSimilarityParams.property_filter) + ? algorithmAnalyzerStore.modelSimilarityParams.least_property_number !== + '' + : true) && + (isValidSourceId || isValidProperty); + + return ( +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.model-similarity.options.method' + )} + +
+ ) => { + algorithmAnalyzerStore.switchModelSimilarityMethod( + e.target.value + ); + }} + > + + {t( + 'data-analyze.algorithm-forms.model-similarity.radio-value.specific-id' + )} + + + {t( + 'data-analyze.algorithm-forms.model-similarity.radio-value.filtered-type-property' + )} + + +
+
+ + {sourceType === 'id' && ( +
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.model-similarity.options.source' + )} + +
+ + { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'source' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'source' + ); + } + }} + /> +
+
+ )} + + {sourceType !== 'id' && ( + <> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.vertex-type' + )} + +
+ +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.vertex-property' + )} + +
+ +
+ {algorithmAnalyzerStore.modelSimilarityParams.vertexProperty.map( + ([key, value], propertyIndex) => { + const currentVertexType = dataAnalyzeStore.vertexTypes.find( + ({ name }) => + name === + algorithmAnalyzerStore.modelSimilarityParams + .vertexType + ); + + return ( +
+ +
+ { + const vertexProperty = cloneDeep( + algorithmAnalyzerStore.modelSimilarityParams + .vertexProperty + ); + + vertexProperty[propertyIndex][1] = e.value; + + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'vertexProperty', + vertexProperty + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'vertexProperty' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'vertexProperty' + ); + } + }} + /> +
+ {size( + algorithmAnalyzerStore.modelSimilarityParams + .vertexProperty + ) > 1 && ( +
{ + algorithmAnalyzerStore.removeModelSimilarityVertexProperty( + propertyIndex + ); + }} + > + {t( + 'data-analyze.algorithm-forms.model-similarity.delete' + )} +
+ )} +
+ ); + } + )} +
+
+
+ {algorithmAnalyzerStore.modelSimilarityParams.vertexType === '' && + !allowAddNewProperty && + size( + algorithmAnalyzerStore.modelSimilarityParams.vertexProperty + ) === 1 ? ( +
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.hint.vertex_type_or_property' + )} + +
+ ) : ( +
+ { + if ( + allowAddNewProperty && + dataAnalyzeStore.requestStatus.fetchGraphs !== 'pending' + ) { + algorithmAnalyzerStore.addModelSimilarityVertexProperty(); + } + }} + > + {t('data-analyze.algorithm-forms.model-similarity.add')} + +
+ )} + + )} + +
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.model-similarity.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+ +
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.model-similarity.options.least_neighbor' + )} + + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'least_neighbor', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'least_neighbor' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'least_neighbor' + ); + } + }} + /> +
+
+ +
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.model-similarity.options.similarity' + )} + + +
+ + { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'similarity', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'similarity' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'similarity' + ); + } + }} + /> +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.label' + )} + +
+ +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.max_similar' + )} + + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'max_similar', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'max_similar' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'max_similar' + ); + } + }} + /> +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.least_similar' + )} + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'least_similar', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'least_similar' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'least_similar' + ); + } + }} + /> +
+
+ +
+ + +
+
+ +
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.property_filter' + )} + +
+ +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.least_property_number' + )} + + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'least_property_number', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'least_property_number' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'least_property_number' + ); + } + }} + /> +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'max_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'max_degree' + ); + } + }} + /> +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams( + 'capacity' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams( + 'capacity' + ); + } + }} + /> +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.limit' + )} + +
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateModelSimilarityParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateModelSimilarityParams('limit'); + } + }} + /> +
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.return_common_connection' + )} + + +
+
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'return_common_connection', + checked + ); + }} + /> +
+
+
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.model-similarity.options.return_complete_info' + )} + +
+
+ { + algorithmAnalyzerStore.mutateModelSimilarityParams( + 'return_complete_info', + checked + ); + }} + /> +
+
+
+
+
+ ); +}); + +export default ModelSimilarity; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx new file mode 100644 index 000000000..845fd268f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/NeighborRank.tsx @@ -0,0 +1,500 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { size } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Button, Radio, Input, Select } from 'hubble-ui'; + +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; + +const NeighborRank = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const formWidthInStep = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 310, + 380 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateNeighborRankParamsParamsErrorMessage + ).every((value) => Array.isArray(value) || value === '') && + algorithmAnalyzerStore.validateNeighborRankParamsParamsErrorMessage.steps.every( + (step) => Object.values(step).every((value) => value === '') + ) && + algorithmAnalyzerStore.neighborRankParams.source !== '' && + algorithmAnalyzerStore.neighborRankParams.alpha !== ''; + + const isValidAddRule = algorithmAnalyzerStore.validateNeighborRankParamsParamsErrorMessage.steps.every( + (step) => Object.values(step).every((value) => value === '') + ); + + return ( +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.neighbor-rank.options.source')} + +
+ { + algorithmAnalyzerStore.mutateNeighborRankParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateNeighborRankParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateNeighborRankParams('source'); + } + }} + /> +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.neighbor-rank.options.alpha')} + +
+ { + algorithmAnalyzerStore.mutateNeighborRankParams( + 'alpha', + e.value as string + ); + + algorithmAnalyzerStore.validateNeighborRankParams('alpha'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateNeighborRankParams('alpha'); + } + }} + /> +
+
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.neighbor-rank.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateNeighborRankParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateNeighborRankParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateNeighborRankParams('capacity'); + } + }} + /> +
+
+
+ + +
+
+ +
+ {algorithmAnalyzerStore.neighborRankParams.steps.map( + ({ uuid, direction, labels, degree, top }, ruleIndex) => { + return ( +
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.neighbor-rank.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateNeighborRankRuleParams( + 'direction', + e.target.value, + ruleIndex + ); + }} + > + both + out + in + + {size(algorithmAnalyzerStore.neighborRankParams.steps) > + 1 && ( +
{ + algorithmAnalyzerStore.removeNeighborRankRule( + ruleIndex + ); + }} + > + {t('addition.common.del')} +
+ )} +
+
+
+ + {t( + 'data-analyze.algorithm-forms.neighbor-rank.options.label' + )} + +
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.neighbor-rank.options.degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateNeighborRankRuleParams( + 'degree', + e.value as string, + ruleIndex + ); + + algorithmAnalyzerStore.validateNeighborRankRules( + 'degree', + ruleIndex + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateNeighborRankRules( + 'degree', + ruleIndex + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.neighbor-rank.options.top' + )} + + +
+ { + algorithmAnalyzerStore.mutateNeighborRankRuleParams( + 'top', + e.value as string, + ruleIndex + ); + + algorithmAnalyzerStore.validateNeighborRankRules( + 'top', + ruleIndex + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateNeighborRankRules( + 'top', + ruleIndex + ); + } + }} + /> +
+
+ ); + } + )} +
+ { + if (isValidAddRule) { + algorithmAnalyzerStore.addNeighborRankRule(); + } + }} + > + {t('data-analyze.algorithm-forms.neighbor-rank.add-new-rule')} + +
+
+
+ ); +}); + +export default NeighborRank; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx new file mode 100644 index 000000000..866b8dbfd --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/PersonalRank.tsx @@ -0,0 +1,451 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const PersonalRank = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validatePersonalRankErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.personalRankParams.source !== '' && + algorithmAnalyzerStore.personalRankParams.alpha !== '' && + algorithmAnalyzerStore.personalRankParams.label !== '' && + algorithmAnalyzerStore.personalRankParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.personal-rank.options.source')} + +
+ { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validatePersonalRankParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validatePersonalRankParams('source'); + } + }} + /> +
+
+
+ * + + {t('data-analyze.algorithm-forms.personal-rank.options.label')} + +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.personal-rank.options.alpha')} + +
+ { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'alpha', + e.value as string + ); + + algorithmAnalyzerStore.validatePersonalRankParams('alpha'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validatePersonalRankParams('alpha'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.personal-rank.options.degree')} + + +
+ { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'degree', + e.value as string + ); + + algorithmAnalyzerStore.validatePersonalRankParams('degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validatePersonalRankParams('degree'); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.personal-rank.options.max_depth' + )} + +
+ { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validatePersonalRankParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validatePersonalRankParams('max_depth'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.personal-rank.options.limit')} + +
+ { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validatePersonalRankParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validatePersonalRankParams('limit'); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.personal-rank.options.with_label' + )} + + +
+ ) => { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'with_label', + e.target.value + ); + }} + > + + {t( + 'data-analyze.algorithm-forms.personal-rank.with-label-radio-value.same_label' + )} + + + {t( + 'data-analyze.algorithm-forms.personal-rank.with-label-radio-value.other_label' + )} + + + {t( + 'data-analyze.algorithm-forms.personal-rank.with-label-radio-value.both_label' + )} + + +
+
+
+ + {t('data-analyze.algorithm-forms.personal-rank.options.sorted')} + + +
+
+ { + algorithmAnalyzerStore.mutatePersonalRankParams( + 'sorted', + checked + ); + }} + /> +
+
+
+
+ + +
+
+ ); +}); + +export default PersonalRank; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx new file mode 100644 index 000000000..682424fd3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/RadiographicInspection.tsx @@ -0,0 +1,422 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const RadiographicInspection = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateRadiographicInspectionParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.radiographicInspectionParams.source !== '' && + algorithmAnalyzerStore.radiographicInspectionParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.source' + )} + +
+ { + algorithmAnalyzerStore.mutateRadiographicInspectionParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'source' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'source' + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.label' + )} + +
+ +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateRadiographicInspectionParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateRadiographicInspectionParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'max_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.max_depth' + )} + + +
+ { + algorithmAnalyzerStore.mutateRadiographicInspectionParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'max_depth' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'max_depth' + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateRadiographicInspectionParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'capacity' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'capacity' + ); + } + }} + /> +
+
+
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.radiographic-inspection.options.limit' + )} + +
+ { + algorithmAnalyzerStore.mutateRadiographicInspectionParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'limit' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateRadiographicInspectionParams( + 'limit' + ); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default RadiographicInspection; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx new file mode 100644 index 000000000..84496448d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/SameNeighbor.tsx @@ -0,0 +1,318 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const SameNeighbor = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateSameNeighborParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.sameNeighborParams.vertex !== '' && + algorithmAnalyzerStore.sameNeighborParams.other !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.same-neighbor.options.vertex')} + +
+ { + algorithmAnalyzerStore.mutateSameNeighborParams( + 'vertex', + e.value as string + ); + + algorithmAnalyzerStore.validateSameNeighborParams('vertex'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSameNeighborParams('vertex'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.same-neighbor.options.label')} + +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.same-neighbor.options.other')} + +
+ { + algorithmAnalyzerStore.mutateSameNeighborParams( + 'other', + e.value as string + ); + + algorithmAnalyzerStore.validateSameNeighborParams('other'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSameNeighborParams('other'); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.same-neighbor.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateSameNeighborParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateSameNeighborParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSameNeighborParams('max_degree'); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.same-neighbor.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateSameNeighborParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t('data-analyze.algorithm-forms.same-neighbor.options.limit')} + +
+ { + algorithmAnalyzerStore.mutateSameNeighborParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateSameNeighborParams('limit'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSameNeighborParams('limit'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default SameNeighbor; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx new file mode 100644 index 000000000..1df1a02ce --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ShortestPath.tsx @@ -0,0 +1,454 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; + +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +const ShortestPath = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateShortestPathParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.shortestPathAlgorithmParams.source !== '' && + algorithmAnalyzerStore.shortestPathAlgorithmParams.target !== '' && + algorithmAnalyzerStore.shortestPathAlgorithmParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t('data-analyze.algorithm-forms.shortest-path.options.source')} + +
+ { + algorithmAnalyzerStore.mutateShortestPathParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathParams('source'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.shortest-path.options.label')} + +
+ +
+
+
+
+
+ * + + {t('data-analyze.algorithm-forms.shortest-path.options.target')} + +
+ { + algorithmAnalyzerStore.mutateShortestPathParams( + 'target', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathParams('target'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathParams('target'); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.shortest-path.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateShortestPathParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathParams('max_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathParams('max_degree'); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.shortest-path.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateShortestPathParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.shortest-path.options.skip_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateShortestPathParams( + 'skip_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathParams('skip_degree'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathParams( + 'skip_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.shortest-path.options.max_depth' + )} + + +
+ { + algorithmAnalyzerStore.mutateShortestPathParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathParams('max_depth'); + } + }} + /> +
+
+
+ + {t('data-analyze.algorithm-forms.shortest-path.options.capacity')} + +
+ { + algorithmAnalyzerStore.mutateShortestPathParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathParams('capacity'); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default ShortestPath; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx new file mode 100644 index 000000000..aa206b120 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/ShortestPathAll.tsx @@ -0,0 +1,469 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, createContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; + +const ShortestPathAll = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 400 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateShortestPathAllParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.shortestPathAllParams.source !== '' && + algorithmAnalyzerStore.shortestPathAllParams.target !== '' && + algorithmAnalyzerStore.shortestPathAllParams.max_depth !== ''; + + return ( +
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.source' + )} + +
+ { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathAllParams('source'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathAllParams('source'); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.label' + )} + +
+ +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.target' + )} + +
+ { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'target', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathAllParams('target'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathAllParams('target'); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathAllParams( + 'max_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathAllParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathAllParams('capacity'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathAllParams( + 'capacity' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.max_depth' + )} + + +
+ { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'max_depth', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathAllParams('max_depth'); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathAllParams( + 'max_depth' + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.shortest-path-all.options.skip_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateShortestPathAllParams( + 'skip_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateShortestPathAllParams( + 'skip_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateShortestPathAllParams( + 'skip_degree' + ); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default ShortestPathAll; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx new file mode 100644 index 000000000..3a84bf16b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/SingleSourceWeightedShortestPath.tsx @@ -0,0 +1,522 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; + +import { GraphManagementStoreContext } from '../../../../stores'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { isDataTypeNumeric, calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const SingleSourceWeightedShortestPath = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 340, + 380 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.singleSourceWeightedShortestPathParams.source !== ''; + + return ( +
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.source' + )} + +
+ { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'source' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'source' + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.label' + )} + +
+ +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'max_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.weight' + )} + +
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.skip_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'skip_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'skip_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'skip_degree' + ); + } + }} + /> +
+
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.with_vertex' + )} + +
+ { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'with_vertex', + checked + ); + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'capacity' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'capacity' + ); + } + }} + /> +
+
+
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.options.limit' + )} + +
+ { + algorithmAnalyzerStore.mutateSingleSourceWeightedShortestPathParams( + 'limit', + e.value as string + ); + + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'limit' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateSingleSourceWeightedShortestPathParams( + 'limit' + ); + } + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default SingleSourceWeightedShortestPath; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx new file mode 100644 index 000000000..26098f650 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/algorithm/WeightedShortestPath.tsx @@ -0,0 +1,500 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Radio, Input, Select, Switch } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; +import { styles } from '../QueryAndAlgorithmLibrary'; +import { Tooltip as CustomTooltip } from '../../../common'; + +import { GraphManagementStoreContext } from '../../../../stores'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import { isDataTypeNumeric, calcAlgorithmFormWidth } from '../../../../utils'; + +import QuestionMarkIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const WeightedShortestPath = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const algorithmAnalyzerStore = dataAnalyzeStore.algorithmAnalyzerStore; + const { t } = useTranslation(); + + const formWidth = calcAlgorithmFormWidth( + graphManagementStore.isExpanded, + 320, + 390 + ); + + const isValidExec = + Object.values( + algorithmAnalyzerStore.validateWeightedShortestPathParamsErrorMessage + ).every((value) => value === '') && + algorithmAnalyzerStore.weightedShortestPathParams.source !== '' && + algorithmAnalyzerStore.weightedShortestPathParams.target !== '' && + algorithmAnalyzerStore.weightedShortestPathParams.weight !== ''; + + return ( +
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.source' + )} + +
+ { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'source', + e.value as string + ); + + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'source' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'source' + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.label' + )} + +
+ +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.target' + )} + +
+ { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'target', + e.value as string + ); + + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'target' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'target' + ); + } + }} + /> +
+
+
+ + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.max_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'max_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'max_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'max_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.direction' + )} + +
+ ) => { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'direction', + e.target.value + ); + }} + > + both + out + in + +
+
+
+ + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.skip_degree' + )} + + +
+ { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'skip_degree', + e.value as string + ); + + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'skip_degree' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'skip_degree' + ); + } + }} + /> +
+
+
+
+
+ * + + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.weight' + )} + +
+ +
+
+
+ + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.capacity' + )} + +
+ { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'capacity', + e.value as string + ); + + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'capacity' + ); + }} + originInputProps={{ + onBlur() { + algorithmAnalyzerStore.validateWeightedShortestPathParams( + 'capacity' + ); + } + }} + /> +
+
+
+
+
+ + {t( + 'data-analyze.algorithm-forms.weighted-shortest-path.options.with_vertex' + )} + +
+ { + algorithmAnalyzerStore.mutateWeightedShortestPathParams( + 'with_vertex', + checked + ); + }} + /> +
+
+
+ + +
+
+ ); +}); + +export default WeightedShortestPath; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/common/Favorite.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/common/Favorite.tsx new file mode 100644 index 000000000..11ea43224 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/common/Favorite.tsx @@ -0,0 +1,170 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useContext, useCallback } from 'react'; +import { observer } from 'mobx-react'; +import { Button, Input, Message } from 'hubble-ui'; + +import { DataAnalyzeStoreContext } from '../../../../stores'; +import { useTranslation } from 'react-i18next'; + +export interface FavoriteProps { + handlePop: (flag: boolean) => void; + queryStatement?: string; + isEdit?: boolean; + id?: number; + name?: string; +} + +const styles = { + primaryButton: { + width: 72, + marginRight: 12 + }, + alert: { + width: 320, + fontSize: 12, + marginTop: 4, + color: '#f5535b' + } +}; + +const Favorite: React.FC = observer( + ({ handlePop, queryStatement = '', isEdit = false, id, name = '' }) => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + const { t } = useTranslation(); + const initialText = isEdit ? name : ''; + const [inputValue, setInputValue] = useState(initialText); + + const handleChange = useCallback(({ value }) => { + setInputValue(value); + }, []); + + const handleAddQueryCollection = useCallback(async () => { + await dataAnalyzeStore.addQueryCollection(inputValue, queryStatement); + + if (dataAnalyzeStore.requestStatus.addQueryCollection === 'success') { + dataAnalyzeStore.setFavoritePopUp(''); + handlePop(false); + setInputValue(''); + + Message.success({ + content: isEdit + ? t('addition.operate.modify-success') + : t('addition.operate.favorite-success'), + size: 'medium', + showCloseIcon: false + }); + + dataAnalyzeStore.fetchFavoriteQueries(); + } + }, [dataAnalyzeStore, handlePop, inputValue, isEdit, queryStatement]); + + const handleEditQueryCollection = useCallback(async () => { + await dataAnalyzeStore.editQueryCollection( + id as number, + inputValue, + queryStatement + ); + + if (dataAnalyzeStore.requestStatus.editQueryCollection === 'success') { + dataAnalyzeStore.setFavoritePopUp(''); + handlePop(false); + setInputValue(''); + + Message.success({ + content: t('addition.operate.modify-success'), + size: 'medium', + showCloseIcon: false + }); + + dataAnalyzeStore.fetchFavoriteQueries(); + } + }, [dataAnalyzeStore, handlePop, id, inputValue, queryStatement]); + + const handleCancel = useCallback( + (type: 'add' | 'edit') => () => { + handlePop(false); + dataAnalyzeStore.setFavoritePopUp(''); + setInputValue(initialText); + dataAnalyzeStore.resetFavoriteRequestStatus(type); + }, + [dataAnalyzeStore, handlePop, initialText] + ); + + return ( +
+
+ + {isEdit + ? t('addition.operate.modify-name') + : t('addition.operate.favorite-statement')} + + + {dataAnalyzeStore.requestStatus.addQueryCollection === 'failed' && + isEdit === false && ( +
+ {dataAnalyzeStore.errorInfo.addQueryCollection.message} +
+ )} + {dataAnalyzeStore.requestStatus.editQueryCollection === 'failed' && + isEdit === true && ( +
+ {dataAnalyzeStore.errorInfo.editQueryCollection.message} +
+ )} +
+ + +
+
+
+ ); + } +); + +export default Favorite; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/index.ts new file mode 100644 index 000000000..dffd5e2e7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import DataAnalyze from './DataAnalyze'; + +export { DataAnalyze }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx new file mode 100644 index 000000000..26be682e4 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/GraphPopOver.tsx @@ -0,0 +1,231 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useEffect, useRef, useCallback } from 'react'; +import { observer } from 'mobx-react'; +import { Message } from 'hubble-ui'; +import { isUndefined, size, isEmpty } from 'lodash-es'; + +import { DataAnalyzeStoreContext } from '../../../../stores'; +import { addGraphNodes, addGraphEdges } from '../../../../stores/utils'; +import { useTranslation } from 'react-i18next'; + +interface GraphPopOverProps { + x: number; + y: number; + switchIsPopover: (state: boolean) => void; + isAfterDragging: boolean; + switchAfterDragging: (state: boolean) => void; +} + +const GraphPopOver: React.FC = observer( + ({ x, y, isAfterDragging, switchAfterDragging, switchIsPopover }) => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + const popoverWrapperRef = useRef(null); + const { t } = useTranslation(); + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // if clicked element is not on dropdown, collpase it + if ( + popoverWrapperRef.current && + !popoverWrapperRef.current.contains(e.target as Element) + ) { + if (isAfterDragging) { + switchAfterDragging(false); + return; + } + + switchIsPopover(false); + } + }, + [switchIsPopover, isAfterDragging] + ); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( +
e.preventDefault()} + style={{ top: y, left: x }} + ref={popoverWrapperRef} + > + {dataAnalyzeStore.rightClickedGraphData.id === '' ? ( +
{ + switchIsPopover(false); + dataAnalyzeStore.setDynamicAddGraphDataStatus('vertex'); + }} + > + {t('addition.common.add-vertex')} +
+ ) : ( + <> +
{ + const node = dataAnalyzeStore.graphData.data.graph_view.vertices.find( + ({ id }) => id === dataAnalyzeStore.rightClickedGraphData.id + ); + + if (isUndefined(node)) { + return; + } + + if (node.label === '~undefined') { + Message.info({ + content: t('addition.message.illegal-vertex'), + size: 'medium', + showCloseIcon: false, + duration: 1 + }); + } + + if ( + isUndefined( + dataAnalyzeStore.vertexTypes.find( + ({ name }) => name === node.label + ) + ) + ) { + return; + } + + await dataAnalyzeStore.expandGraphNode(); + + if ( + dataAnalyzeStore.requestStatus.expandGraphNode === 'success' + ) { + // prompt if there's no extra node + if ( + size( + dataAnalyzeStore.expandedGraphData.data.graph_view + .vertices + ) === 0 + ) { + if ( + isEmpty( + dataAnalyzeStore.visNetwork?.getConnectedNodes(node.id) + ) + ) { + Message.info({ + content: t('addition.message.no-adjacency-points'), + size: 'medium', + showCloseIcon: false, + duration: 1 + }); + } else { + Message.info({ + content: t('addition.message.no-more-points'), + size: 'medium', + showCloseIcon: false, + duration: 1 + }); + } + + return; + } + + addGraphNodes( + dataAnalyzeStore.expandedGraphData.data.graph_view.vertices, + dataAnalyzeStore.visDataSet?.nodes, + dataAnalyzeStore.vertexSizeMappings, + dataAnalyzeStore.colorMappings, + dataAnalyzeStore.vertexWritingMappings + ); + + addGraphEdges( + dataAnalyzeStore.expandedGraphData.data.graph_view.edges, + dataAnalyzeStore.visDataSet?.edges, + dataAnalyzeStore.edgeColorMappings, + dataAnalyzeStore.edgeThicknessMappings, + dataAnalyzeStore.edgeWithArrowMappings, + dataAnalyzeStore.edgeWritingMappings + ); + + dataAnalyzeStore.resetRightClickedGraphData(); + switchIsPopover(false); + } else { + Message.error({ + content: dataAnalyzeStore.errorInfo.expandGraphNode.message, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('addition.operate.expand')} +
+
{ + dataAnalyzeStore.switchShowFilterBoard(true); + switchIsPopover(false); + }} + > + {t('addition.operate.query')} +
+
{ + dataAnalyzeStore.visDataSet?.nodes.remove([ + dataAnalyzeStore.rightClickedGraphData.id + ]); + dataAnalyzeStore.hideGraphNode( + dataAnalyzeStore.rightClickedGraphData.id + ); + dataAnalyzeStore.resetRightClickedGraphData(); + switchIsPopover(false); + }} + > + {t('addition.operate.hidden')} +
+
{ + dataAnalyzeStore.setDynamicAddGraphDataStatus('outEdge'); + dataAnalyzeStore.fetchRelatedEdges(); + switchIsPopover(false); + }} + > + {t('addition.common.add-out-edge')} +
+
{ + dataAnalyzeStore.setDynamicAddGraphDataStatus('inEdge'); + dataAnalyzeStore.fetchRelatedEdges(); + switchIsPopover(false); + }} + > + {t('addition.common.add-in-edge')} +
+ + )} +
+ ); + } +); + +export default GraphPopOver; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx new file mode 100644 index 000000000..f6f5d710b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/GraphQueryResult.tsx @@ -0,0 +1,659 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useState, + useContext, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import { size, isUndefined, isEmpty } from 'lodash-es'; +import { saveAs } from 'file-saver'; +import vis from 'vis-network'; +import 'vis-network/styles/vis-network.min.css'; +import { Message } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import QueryFilterOptions from './QueryFilterOptions'; +import GraphPopOver from './GraphPopOver'; +import { DataAnalyzeStoreContext } from '../../../../stores'; +import { addGraphNodes, addGraphEdges } from '../../../../stores/utils'; + +import ZoomInIcon from '../../../../assets/imgs/ic_fangda_16.svg'; +import ZoomOutIcon from '../../../../assets/imgs/ic_suoxiao_16.svg'; +import CenterIcon from '../../../../assets/imgs/ic_middle_16.svg'; +import DownloadIcon from '../../../../assets/imgs/ic_xiazai_16.svg'; +import FullScreenIcon from '../../../../assets/imgs/ic_quanping_16.svg'; +import ResetScreenIcon from '../../../../assets/imgs/ic_tuichuquanping_16.svg'; +import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; +import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; +import AddNodeIcon from '../../../../assets/imgs/ic_add_node.svg'; + +export interface GraphQueryResult { + hidden: boolean; +} + +const GraphQueryResult: React.FC = observer(({ hidden }) => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + const { t } = useTranslation(); + const graphWrapper = useRef(null); + const resultWrapper = useRef(null); + const legendViewPointWrapper = useRef(null); + const legendWrapper = useRef(null); + const [showLoadingGraphs, switchShowLoadingGraphs] = useState(true); + const [isPopover, switchIsPopover] = useState(false); + const [isAfterDragging, switchAfterDragging] = useState(false); + const [nodeTooltipX, setNodeToolTipX] = useState(0); + const [nodeTooltipY, setNodeToolTipY] = useState(0); + const [legendStep, setLegendStep] = useState(0); + const [legendWidth, setlegendWitdh] = useState(0); + + const [graph, setGraph] = useState(null); + + const redrawGraphs = useCallback(() => { + if (graph) { + const width = getComputedStyle(resultWrapper.current!).width as string; + const height = getComputedStyle(resultWrapper.current!).height as string; + + graph.setSize(width, height); + graph.redraw(); + } + }, [graph]); + + useEffect(() => { + const width = getComputedStyle(resultWrapper.current!).width as string; + const height = getComputedStyle(resultWrapper.current!).height as string; + + const graphNodes = new vis.DataSet(dataAnalyzeStore.graphNodes); + const graphEdges = new vis.DataSet(dataAnalyzeStore.graphEdges); + + if (!graph) { + const data = { + nodes: graphNodes, + edges: graphEdges + }; + + const layout: vis.Options = { + width, + height, + nodes: { + shape: 'dot' + }, + edges: { + arrowStrikethrough: false, + color: { + color: 'rgba(92, 115, 230, 0.8)', + hover: 'rgba(92, 115, 230, 1)', + highlight: 'rgba(92, 115, 230, 1)' + }, + scaling: { + min: 1, + max: 3, + label: { + enabled: false + } + } + }, + interaction: { + hover: true + }, + physics: { + maxVelocity: 50, + solver: 'forceAtlas2Based', + timestep: 0.3, + stabilization: { iterations: 150 } + } + }; + + // initialize your network! + if (graphWrapper.current !== null) { + const network = new vis.Network(graphWrapper!.current, data, layout); + + let timer: number | undefined = undefined; + + network.on('click', ({ nodes, edges }) => { + // click on node, note that edges(related) also has value + if (!isEmpty(nodes)) { + // note: cannot abstract switchClickOn...() and clearTimeout + // as common callings with node and edge, since click event + // would be dispatched even if click is not on node and edge + dataAnalyzeStore.switchClickOnNodeOrEdge(true); + clearTimeout(timer); + + timer = window.setTimeout(() => { + const nodeId = nodes[0]; + const node = + dataAnalyzeStore.graphData.data.graph_view.vertices.find( + ({ id }) => id === nodeId + ); + + if (isUndefined(node)) { + return; + } + + dataAnalyzeStore.changeSelectedGraphData({ + id: node.id, + label: node.label, + properties: node.properties + }); + + dataAnalyzeStore.syncGraphEditableProperties('vertex'); + dataAnalyzeStore.initValidateEditGraphDataPropertiesErrorMessage(); + + if ( + dataAnalyzeStore.graphInfoDataSet !== 'node' || + !dataAnalyzeStore.isShowGraphInfo + ) { + dataAnalyzeStore.switchShowScreeDataSet('node'); + dataAnalyzeStore.switchShowScreenInfo(true); + } + + // close filter board after click on node + dataAnalyzeStore.switchShowFilterBoard(false); + // reset status, or click blank area won't collpase the drawer + dataAnalyzeStore.switchClickOnNodeOrEdge(false); + }, 200); + + return; + } + + // click on edge + if (!isEmpty(edges)) { + dataAnalyzeStore.switchClickOnNodeOrEdge(true); + clearTimeout(timer); + + timer = window.setTimeout(() => { + const edgeId = edges[0]; + + const edge = + dataAnalyzeStore.graphData.data.graph_view.edges.find( + ({ id }) => id === edgeId + ); + + if (isUndefined(edge)) { + return; + } + + dataAnalyzeStore.changeSelectedGraphLinkData({ + id: edge.id, + label: edge.label, + properties: edge.properties, + source: edge.source, + target: edge.target + }); + + dataAnalyzeStore.syncGraphEditableProperties('edge'); + dataAnalyzeStore.initValidateEditGraphDataPropertiesErrorMessage(); + + if ( + dataAnalyzeStore.graphInfoDataSet !== 'edge' || + !dataAnalyzeStore.isShowGraphInfo + ) { + dataAnalyzeStore.switchShowScreeDataSet('edge'); + dataAnalyzeStore.switchShowScreenInfo(true); + } + + // close filter board after click on edge + dataAnalyzeStore.switchShowFilterBoard(false); + // reset status, or click blank area won't collpase the drawer + dataAnalyzeStore.switchClickOnNodeOrEdge(false); + }, 200); + } + }); + + network.on('doubleClick', async ({ nodes }) => { + clearTimeout(timer); + dataAnalyzeStore.switchClickOnNodeOrEdge(false); + if (!isEmpty(nodes)) { + const nodeId = nodes[0]; + const node = + dataAnalyzeStore.graphData.data.graph_view.vertices.find( + ({ id }) => id === nodeId + ); + + if (!isUndefined(node)) { + // specific symbol (~undefined) in schema + if (node.label === '~undefined') { + Message.info({ + content: t('addition.common.illegal-vertex-desc'), + size: 'medium', + showCloseIcon: false, + duration: 1 + }); + } + + if ( + isUndefined( + dataAnalyzeStore.vertexTypes.find( + ({ name }) => name === node.label + ) + ) + ) { + return; + } + + await dataAnalyzeStore.expandGraphNode(node.id, node.label); + + if ( + dataAnalyzeStore.requestStatus.expandGraphNode === 'success' + ) { + // prompt if there's no extra node + if ( + size( + dataAnalyzeStore.expandedGraphData.data.graph_view.vertices + ) === 0 + ) { + if (isEmpty(network.getConnectedNodes(nodeId))) { + Message.info({ + content: t('addition.message.no-adjacency-points'), + size: 'medium', + showCloseIcon: false, + duration: 1 + }); + } else { + Message.info({ + content: t('addition.message.no-more-points'), + size: 'medium', + showCloseIcon: false, + duration: 1 + }); + } + + return; + } + + addGraphNodes( + dataAnalyzeStore.expandedGraphData.data.graph_view.vertices, + dataAnalyzeStore.visDataSet?.nodes, + dataAnalyzeStore.vertexSizeMappings, + dataAnalyzeStore.colorMappings, + dataAnalyzeStore.vertexWritingMappings + ); + + addGraphEdges( + dataAnalyzeStore.expandedGraphData.data.graph_view.edges, + dataAnalyzeStore.visDataSet?.edges, + dataAnalyzeStore.edgeColorMappings, + dataAnalyzeStore.edgeThicknessMappings, + dataAnalyzeStore.edgeWithArrowMappings, + dataAnalyzeStore.edgeWritingMappings + ); + } + + if (dataAnalyzeStore.requestStatus.expandGraphNode === 'failed') { + Message.error({ + content: dataAnalyzeStore.errorInfo.expandGraphNode.message, + size: 'medium', + showCloseIcon: false + }); + } + } else { + Message.error({ + content: dataAnalyzeStore.errorInfo.expandGraphNode.message, + size: 'medium', + showCloseIcon: false + }); + } + } + }); + + network.on('oncontext', async (e) => { + // disable default context menu + e.event.preventDefault(); + + // It's weird that sometimes e.nodes is empty when right click on node + // thus using coordinate to work as expect + const nodeId = network.getNodeAt(e.pointer.DOM); + const node = dataAnalyzeStore.graphData.data.graph_view.vertices.find( + ({ id }) => id === nodeId + ); + + if (!isUndefined(node)) { + dataAnalyzeStore.changeRightClickedGraphData({ + id: node.id, + label: node.label, + properties: node.properties + }); + + switchIsPopover(true); + + network.selectNodes([nodeId]); + setNodeToolTipX(e.pointer.DOM.x); + setNodeToolTipY(e.pointer.DOM.y); + dataAnalyzeStore.setVisCurrentCoordinates({ + domX: e.pointer.DOM.x, + domY: e.pointer.DOM.y, + canvasX: e.pointer.canvas.x, + canvasY: e.pointer.canvas.y + }); + + await dataAnalyzeStore.fetchRelatedVertex(); + + if (size(dataAnalyzeStore.graphDataEdgeTypes) !== 0) { + dataAnalyzeStore.fetchFilteredPropertyOptions( + dataAnalyzeStore.graphDataEdgeTypes[0] + ); + } + } else { + const edgeId = network.getEdgeAt(e.pointer.DOM); + + // if not click on edge + if (isUndefined(edgeId)) { + dataAnalyzeStore.resetRightClickedGraphData(); + setNodeToolTipX(e.pointer.DOM.x); + setNodeToolTipY(e.pointer.DOM.y); + dataAnalyzeStore.setVisCurrentCoordinates({ + domX: e.pointer.DOM.x, + domY: e.pointer.DOM.y, + canvasX: e.pointer.canvas.x, + canvasY: e.pointer.canvas.y + }); + switchIsPopover(true); + } + } + }); + + network.on('dragging', () => { + const node = dataAnalyzeStore.visDataSet?.nodes.get( + dataAnalyzeStore.rightClickedGraphData.id + ); + + if (node !== null) { + const position = network.getPositions(node.id); + setNodeToolTipX(network.canvasToDOM(position[node.id]).x); + setNodeToolTipY(network.canvasToDOM(position[node.id]).y); + switchAfterDragging(true); + } + }); + + network.on('zoom', () => { + const node = dataAnalyzeStore.visDataSet?.nodes.get( + dataAnalyzeStore.rightClickedGraphData.id + ); + + if (node !== null) { + const position = network.getPositions(node.id); + setNodeToolTipX(network.canvasToDOM(position[node.id]).x); + setNodeToolTipY(network.canvasToDOM(position[node.id]).y); + } + }); + + network.on('dragEnd', (e) => { + if (!isEmpty(e.nodes)) { + network.unselectAll(); + } + }); + + network.once('stabilizationIterationsDone', () => { + switchShowLoadingGraphs(false); + }); + + setGraph(network); + dataAnalyzeStore.setVisNetwork(network); + } + } else { + if (!dataAnalyzeStore.isGraphLoaded) { + graph.setData({ + nodes: graphNodes, + edges: graphEdges + }); + + dataAnalyzeStore.setVisDataSet({ + nodes: graphNodes, + edges: graphEdges + }); + + dataAnalyzeStore.switchGraphLoaded(true); + } + + redrawGraphs(); + } + }, [ + dataAnalyzeStore, + dataAnalyzeStore.originalGraphData, + graph, + dataAnalyzeStore.isFullScreenReuslt, + redrawGraphs + ]); + + useEffect(() => { + if (legendWrapper.current) { + const legendWidth = getComputedStyle(legendWrapper.current).width!.split( + 'px' + )[0]; + + setlegendWitdh(Number(legendWidth)); + } + }, []); + + useEffect(() => { + window.addEventListener('resize', redrawGraphs, false); + + return () => { + window.removeEventListener('resize', redrawGraphs); + }; + }, [redrawGraphs]); + + return ( + <> + + {dataAnalyzeStore.isShowFilterBoard && } + {showLoadingGraphs && ( +
+
+ {t('addition.operate.load-background')} + {t('addition.operate.load-spinner')} +
+ {t('addition.operate.rendering')}... +
+ )} + + ); +}); + +export default GraphQueryResult; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx new file mode 100644 index 000000000..fed89e518 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/JSONQueryResult.tsx @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import ReactJsonView from 'react-json-view'; +import 'codemirror/mode/javascript/javascript'; + +import { DataAnalyzeStoreContext } from '../../../../stores'; + +const JSONQueryResult: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + + return ( +
+ +
+ ); +}); + +export default JSONQueryResult; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx new file mode 100644 index 000000000..3b8e48afe --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/QueryFilterOptions.tsx @@ -0,0 +1,405 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useCallback } from 'react'; +import { observer } from 'mobx-react'; +import { Select, Input, NumberBox, Calendar } from 'hubble-ui'; +import { Message } from 'hubble-ui'; + +import { DataAnalyzeStoreContext } from '../../../../stores'; +import { addGraphNodes, addGraphEdges } from '../../../../stores/utils'; +import { useTranslation } from 'react-i18next'; +import i18next from '../../../../i18n'; + +const getRuleOptions = (ruleType: string = '') => { + switch (ruleType.toLowerCase()) { + case 'float': + case 'double': + case 'byte': + case 'int': + case 'long': + case 'date': + return [ + i18next.t('addition.constant.greater-than'), + i18next.t('addition.constant.greater-than-or-equal'), + i18next.t('addition.constant.less-than'), + i18next.t('addition.constant.less-than-or-equal'), + i18next.t('addition.constant.equal') + ]; + case 'object': + case 'text': + case 'blob': + case 'uuid': + return [i18next.t('addition.constant.equal')]; + case 'boolean': + return ['True', 'False']; + default: + return []; + } +}; + +const QueryFilterOptions: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + const { t } = useTranslation(); + const line = dataAnalyzeStore.filteredGraphQueryOptions.line; + const properties = dataAnalyzeStore.filteredGraphQueryOptions.properties; + const lastProperty = properties[properties.length - 1]; + + // value of the corresponding revealed form should not be empty + const allowSendFilterRequest = + (properties.length === 0 && line.type !== '') || + (lastProperty && + lastProperty.property !== '' && + lastProperty.rule !== '' && + lastProperty.value !== '') || + (lastProperty && + (lastProperty.rule === 'True' || lastProperty.rule === 'False')); + + const allowAddProperties = + allowSendFilterRequest && + dataAnalyzeStore.filteredPropertyOptions.length !== 0 && + dataAnalyzeStore.filteredGraphQueryOptions.properties.length !== + dataAnalyzeStore.filteredPropertyOptions.length; + + const handleEdgeSelectChange = useCallback( + (key: 'type' | 'direction') => (value: string) => { + dataAnalyzeStore.editEdgeFilterOption(key, value); + dataAnalyzeStore.fetchFilteredPropertyOptions(value); + }, + [dataAnalyzeStore] + ); + + const handlePropertyChange = useCallback( + ( + key: 'property' | 'rule' | 'value', + value: string | number, + index: number + ) => { + dataAnalyzeStore.editPropertyFilterOption(key, value, index); + }, + [dataAnalyzeStore] + ); + + const renderPropertyValue = ( + type: string = '', + value: string, + index: number + ) => { + const shouldDisabled = + dataAnalyzeStore.filteredGraphQueryOptions.properties[index].property === + ''; + + switch (type.toLowerCase()) { + case 'float': + case 'double': + return ( + { + handlePropertyChange('value', Number(e.value), index); + }} + disabled={shouldDisabled} + /> + ); + case 'byte': + case 'int': + case 'long': + return ( + { + handlePropertyChange('value', Number(e.target.value), index); + }} + disabled={shouldDisabled} + /> + ); + case 'date': + return ( + { + handlePropertyChange('value', timeParams.beginTime, index); + }} + disabled={shouldDisabled} + /> + ); + case 'object': + case 'text': + case 'blob': + case 'uuid': + return ( + { + handlePropertyChange('value', e.value, index); + }} + disabled={shouldDisabled} + /> + ); + case 'boolean': + return
/
; + default: + return ( + + ); + } + }; + + return ( +
+
+
+ + {t('addition.common.edge-type')}: + + +
+
+ + {t('addition.common.edge-direction')}: + + +
+
+ { + if (!allowSendFilterRequest) { + return; + } + + await dataAnalyzeStore.filterGraphData(); + + if ( + dataAnalyzeStore.requestStatus.filteredGraphData === 'success' + ) { + addGraphNodes( + dataAnalyzeStore.expandedGraphData.data.graph_view.vertices, + dataAnalyzeStore.visDataSet?.nodes, + dataAnalyzeStore.vertexSizeMappings, + dataAnalyzeStore.colorMappings, + dataAnalyzeStore.vertexWritingMappings + ); + + addGraphEdges( + dataAnalyzeStore.expandedGraphData.data.graph_view.edges, + dataAnalyzeStore.visDataSet?.edges, + dataAnalyzeStore.edgeColorMappings, + dataAnalyzeStore.edgeThicknessMappings, + dataAnalyzeStore.edgeWithArrowMappings, + dataAnalyzeStore.edgeWritingMappings + ); + + // highlight new vertices + if (dataAnalyzeStore.visNetwork !== null) { + dataAnalyzeStore.visNetwork.selectNodes( + dataAnalyzeStore.expandedGraphData.data.graph_view.vertices + .map(({ id }) => id) + .concat([dataAnalyzeStore.rightClickedGraphData.id]), + true + ); + } + + dataAnalyzeStore.switchShowFilterBoard(false); + dataAnalyzeStore.clearFilteredGraphQueryOptions(); + } else { + Message.error({ + content: dataAnalyzeStore.errorInfo.filteredGraphData.message, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('addition.operate.filter')} + + { + dataAnalyzeStore.switchShowFilterBoard(false); + dataAnalyzeStore.clearFilteredGraphQueryOptions(); + + if (dataAnalyzeStore.visNetwork !== null) { + dataAnalyzeStore.visNetwork.unselectAll(); + } + }} + > + {t('addition.common.cancel')} + +
+
+ {dataAnalyzeStore.filteredGraphQueryOptions.properties.length !== 0 && ( +
+ )} + {dataAnalyzeStore.filteredGraphQueryOptions.properties.map( + ({ property, rule, value }, index) => { + return ( +
+
+ {t('addition.common.property')}: + +
+
+ {t('addition.common.rule')}: + +
+
+ {t('addition.common.value')}: + {renderPropertyValue( + // the real type of value + dataAnalyzeStore.valueTypes[property], + value, + index + )} +
+
+ { + dataAnalyzeStore.deletePropertyFilterOption(index); + }} + > + {t('addition.common.del')} + +
+
+ ); + } + )} +
+ { + dataAnalyzeStore.addPropertyFilterOption(); + } + : undefined + } + style={{ + color: allowAddProperties ? '#2b65ff' : '#ccc' + }} + > + {t('addition.operate.add-filter-item')} + +
+
+ ); +}); + +export default QueryFilterOptions; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/QueryResult.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/QueryResult.tsx new file mode 100644 index 000000000..15fa71c2d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/QueryResult.tsx @@ -0,0 +1,243 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { isEmpty } from 'lodash-es'; +import { useLocation } from 'wouter'; +import classnames from 'classnames'; + +import GraphQueryResult from './GraphQueryResult'; +import TableQueryResult from './TableQueryResult'; +import JSONQueryResult from './JSONQueryResult'; +import { + DataAnalyzeStoreContext, + AsyncTasksStoreContext +} from '../../../../stores'; +import { Algorithm } from '../../../../stores/factory/dataAnalyzeStore/algorithmStore'; +import EmptyIcon from '../../../../assets/imgs/ic_sousuo_empty.svg'; +import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; +import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; +import FinishedIcon from '../../../../assets/imgs/ic_done_144.svg'; +import FailedIcon from '../../../../assets/imgs/ic_fail.svg'; +import i18next from '../../../../i18n'; +import { useTranslation } from 'react-i18next'; + +export interface QueryResultProps { + sidebarIndex: number; + handleSetSidebarIndex: (index: number) => void; +} + +const dataAnalyzeContentSidebarOptions = [ + i18next.t('addition.menu.chart'), + i18next.t('addition.menu.table'), + 'Json' +]; + +const QueryResult: React.FC = observer( + ({ sidebarIndex, handleSetSidebarIndex }) => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + const { algorithmAnalyzerStore } = dataAnalyzeStore; + const asyncTasksStore = useContext(AsyncTasksStoreContext); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const renderReuslt = (index: number) => { + switch (index) { + case 1: + return ; + case 2: + return ; + } + }; + + const queryResutlClassName = classnames({ + 'query-result': true, + 'query-result-fullscreen': dataAnalyzeStore.isFullScreenReuslt + }); + + const dynHeightStyle: Record = {}; + + if ( + dataAnalyzeStore.currentTab === 'algorithm-analyze' && + !algorithmAnalyzerStore.isCollapse + ) { + if (algorithmAnalyzerStore.currentAlgorithm === '') { + dynHeightStyle.height = 'calc(100vh - 441px)'; + } + } + + return ( +
+ {!dataAnalyzeStore.isFullScreenReuslt && ( +
+ {dataAnalyzeContentSidebarOptions.map((text, index) => ( +
+
{ + handleSetSidebarIndex(index); + }} + className={ + sidebarIndex === index + ? 'query-result-sidebar-options-active' + : '' + } + > + + {text} +
+
+ ))} +
+ )} +
+ {dataAnalyzeStore.requestStatus.fetchGraphs === 'success' && + renderReuslt(sidebarIndex)} + + {dataAnalyzeStore.requestStatus.fetchGraphs === 'success' && + dataAnalyzeStore.graphData.data.graph_view.vertices !== null && + dataAnalyzeStore.graphData.data.graph_view.edges !== null && + !isEmpty(dataAnalyzeStore.graphData.data.graph_view.vertices) && ( +
+
+ ); + } +); + +export default QueryResult; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx new file mode 100644 index 000000000..1ee0764be --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/TableQueryResult.tsx @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useCallback } from 'react'; +import { observer } from 'mobx-react'; +import { Table } from 'hubble-ui'; +import { size } from 'lodash-es'; + +import { DataAnalyzeStoreContext } from '../../../../stores'; + +const TableQueryResult: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStoreContext); + + const columnConfigs = dataAnalyzeStore.originalGraphData.data.table_view.header.map( + (title) => ({ + title, + dataIndex: title, + width: + 100 / size(dataAnalyzeStore.originalGraphData.data.table_view.header) + + '%', + render(text: any) { + if (title === 'path') { + return ; + } + + return JSON.stringify(text); + } + }) + ); + + const handlePageChange = useCallback( + (e: React.ChangeEvent) => { + dataAnalyzeStore.mutatePageNumber('tableResult', Number(e.target.value)); + }, + [dataAnalyzeStore] + ); + + return ( +
+
+ + ); +}); + +// item could be obejct array which needs serialization as well +const PathItem: React.FC<{ items: string[] }> = observer(({ items }) => ( + <> + {items.map((item: string) => ( + + {JSON.stringify(item)} + + ))} + +)); + +export default TableQueryResult; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/index.ts new file mode 100644 index 000000000..129ccb2f7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-analyze/query-result/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import QueryResult from './QueryResult'; + +export { QueryResult }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx new file mode 100644 index 000000000..63cb5c8cc --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportFinish.tsx @@ -0,0 +1,102 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { useRoute, useLocation } from 'wouter'; +import { isEmpty } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import { Button } from 'hubble-ui'; + +import { + ImportManagerStoreContext, + GraphManagementStoreContext, + DataImportRootStoreContext +} from '../../../../stores'; + +import { useInitDataImport } from '../../../../hooks'; + +import PassIcon from '../../../../assets/imgs/ic_pass.svg'; + +const ImportFinish: React.FC = observer(() => { + const importManagerStore = useContext(ImportManagerStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [, params] = useRoute( + '/graph-management/:id/data-import/import-manager/:jobId/import-tasks/:status*' + ); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + useEffect(() => { + if (isEmpty(serverDataImportStore.importTasks) && params !== null) { + dataImportRootStore.setCurrentId(Number(params.id)); + dataImportRootStore.setCurrentJobId(Number(params.jobId)); + + serverDataImportStore.fetchAllImportTasks(); + } + }, [params?.id, params?.jobId]); + + return ( +
+
+ complete +
+
{t('data-import-status.finished')}
+
+ {t('data-import-status.success', { + number: + serverDataImportStore.successImportFileStatusNumber !== 0 + ? serverDataImportStore.successImportFileStatusNumber + : '-' + })} + {serverDataImportStore.pausedImportFileNumber !== 0 && + `,${t('data-import-status.pause', { + number: serverDataImportStore.pausedImportFileNumber + })}`} + {serverDataImportStore.abortImportFileNumber !== 0 && + `,${t('data-import-status.abort', { + number: serverDataImportStore.abortImportFileNumber + })}`} +
+
+
+
+ +
+
+ ); +}); + +export default ImportFinish; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportManager.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportManager.less new file mode 100644 index 000000000..f04a4c2c1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportManager.less @@ -0,0 +1,213 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.import-manager { + position: absolute; + width: calc(100% - 60px); + padding: 0 16px 16px; + left: 60px; + top: 60px; + + &-with-expand-sidebar { + width: calc(100% - 200px); + left: 200px; + } + + &-content-wrapper { + height: calc(100vh - 130px); + background: #fff; + padding: 16px; + overflow: auto; + } + + &-content-header { + margin-bottom: 16px; + display: flex; + justify-content: flex-end; + } + + &-breadcrumb-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + margin: 16px 0; + } + + &-empty-list { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + & > div { + margin: 8px 0 24px; + } + } + + &-table { + &-job-name { + display: flex; + + & > .link { + color: #2b65ff; + cursor: pointer; + } + + & > img { + display: block; + margin-left: 6px; + cursor: pointer; + } + } + + &-status-wrapper { + height: 28px; + text-align: center; + border-radius: 2px; + line-height: 28px; + font-size: 14px; + } + + &-status-pending { + width: 58px; + border: 1px solid #e0e0e0; + background-color: #f5f5f5; + color: #333; + } + + &-status-process { + width: 58px; + background-color: #f2f7ff; + border: 1px solid #8cb8ff; + color: #3d88f2; + } + + &-status-failed { + width: 44px; + border: 1px solid #ff9499; + background-color: #fff2f2; + color: #e64552; + } + + &-status-success { + width: 44px; + border: 1px solid #7ed988; + background-color: #f2fff4; + color: #39bf45; + } + + &-manipulations { + display: flex; + justify-content: flex-end; + color: #2b65ff; + width: 100px; + + & > span { + cursor: pointer; + + &:last-child { + margin-left: 16px; + } + } + + &-outlink { + font-size: 14px; + color: #2b65ff; + line-height: 22px; + cursor: pointer; + display: flex; + width: fit-content; + text-decoration: none; + + &:hover { + color: #527dff; + } + + &:active { + color: #184bcc; + } + + &-disabled { + color: #999; + } + } + } + } + + &-create-job-option { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 32px; + + &:first-child { + margin-top: 8px; + } + + &:last-child { + margin-bottom: 12px; + } + + & > div:first-child { + width: 78px; + text-align: right; + } + + &-required-mark { + color: #d0021b; + } + } + + &-delete-job-option { + & span { + display: block; + } + } +} + +/* overrides */ + +// reset breadcrumb line-height +.import-manager .new-fc-one-breadcrumb.new-fc-one-breadcrumb-small { + line-height: 22px; +} + +.import-manager .new-fc-one-menu { + background-color: transparent; +} + +.import-manager-content-wrapper { + & table { + table-layout: fixed; + } +} + +.import-manager .new-fc-one-breadcrumb > span:not(:last-of-type) .new-fc-one-breadcrumb-link { + color: #2b65ff; +} + +// weired, when checking img block in devtool +// its size doesn't match what it seems +// need to hard-code it's left px here +// .import-management-table-job-name .new-fc-one-tooltip { +// left: 323px !important; +// } + +// remove horizon padding of close icon in +.new-fc-one-modal-close-x { + padding: 8px 0; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportManager.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportManager.tsx new file mode 100644 index 000000000..9f34968c9 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportManager.tsx @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { useRoute, useLocation, Switch, Route } from 'wouter'; +import { useTranslation } from 'react-i18next'; +import { isNull } from 'lodash-es'; +import classnames from 'classnames'; +import { Breadcrumb } from 'hubble-ui'; + +import { JobDetails } from './job-details'; +import ImportTaskList from './ImportTaskList'; +import { + GraphManagementStoreContext, + DataImportRootStoreContext, + ImportManagerStoreContext +} from '../../../../stores'; + +import './ImportManager.less'; +import ImportTasks from './ImportTasks'; + +const ImportManager: React.FC = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const importManagerStore = useContext(ImportManagerStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [_, params] = useRoute( + '/graph-management/:id/data-import/import-manager/:rest*' + ); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const wrapperClassName = classnames({ + 'import-manager': true, + 'import-manager-with-expand-sidebar': graphManagementStore.isExpanded + }); + + useEffect(() => { + window.scrollTo(0, 0); + + graphManagementStore.fetchIdList(); + importManagerStore.setCurrentId(Number(params!.id)); + + return () => { + importManagerStore.dispose(); + }; + }, []); + + return ( +
+
+ + { + if (!isNull(importManagerStore.selectedJob)) { + setLocation( + `/graph-management/${importManagerStore.currentId}/data-import/import-manager` + ); + importManagerStore.setSelectedJob(null); + importManagerStore.fetchImportJobList(); + } + + // reset stores + // dataMapStore.dispose(); + // serverDataImportStore.dispose(); + }} + > + {t('breadcrumb.first')} + + {importManagerStore.selectedJob && ( + + {importManagerStore.selectedJob.job_name} + + )} + +
+ + + + + +
+ ); +}); + +export default ImportManager; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx new file mode 100644 index 000000000..13168cf4e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTaskList.tsx @@ -0,0 +1,768 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useContext, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { useRoute, useLocation } from 'wouter'; +import { useTranslation } from 'react-i18next'; +import { isEmpty, size } from 'lodash-es'; +import classnames from 'classnames'; +import { Button, Input, Table, Modal, Message } from 'hubble-ui'; + +import LoadingDataView from '../../../common/LoadingDataView'; +import { Tooltip as CustomTooltip } from '../../../common'; +import { + DataImportRootStoreContext, + ImportManagerStoreContext +} from '../../../../stores'; + +import AddIcon from '../../../../assets/imgs/ic_add.svg'; +import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; + +const styles = { + button: { + width: 78, + marginLeft: 12 + } +}; + +const ImportTaskList: React.FC = observer(() => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const importManagerStore = useContext(ImportManagerStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [preLoading, switchPreLoading] = useState(true); + const [isPopCreateModal, switchCreatePopModal] = useState(false); + const [, params] = useRoute( + '/graph-management/:id/data-import/import-manager' + ); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const isLoading = + preLoading || + importManagerStore.requestStatus.fetchImportJobList === 'pending'; + + const handleSearchChange = (e: React.ChangeEvent) => { + importManagerStore.mutateSearchWords(e.target.value); + }; + + const handleSearch = async () => { + importManagerStore.mutateImportJobListPageNumber(1); + importManagerStore.switchSearchedStatus(true); + await importManagerStore.fetchImportJobList(); + }; + + const handleClearSearch = () => { + importManagerStore.mutateSearchWords(''); + importManagerStore.mutateImportJobListPageNumber(1); + importManagerStore.switchSearchedStatus(false); + importManagerStore.fetchImportJobList(); + }; + + const handlePageChange = (e: React.ChangeEvent) => { + importManagerStore.mutateImportJobListPageNumber(Number(e.target.value)); + importManagerStore.fetchImportJobList(); + }; + + const columnConfigs = [ + { + title: t('import-manager.list-column-title.job-name'), + dataIndex: 'job_name', + width: '20%', + render(name: string, rowData: any) { + const readyToJump = + rowData.job_status === 'SUCCESS' || rowData.job_status === 'FAILED'; + + const wrapperClassName = classnames({ + 'no-line-break': true, + link: readyToJump + }); + + return ( +
+
{ + if (readyToJump) { + importManagerStore.setCurrentJobDetailStep('basic'); + importManagerStore.setSelectedJob(rowData.id); + + // fill in essential data in import-task stores + dataImportRootStore.setCurrentId(Number(params!.id)); + dataImportRootStore.setCurrentJobId(rowData.id); + + dataImportRootStore.fetchVertexTypeList(); + dataImportRootStore.fetchEdgeTypeList(); + + setLocation( + `/graph-management/${ + params!.id + }/data-import/import-manager/${rowData.id}/details` + ); + + // fetch related data + await Promise.all([ + dataMapStore.fetchDataMaps(), + serverDataImportStore.fetchAllImportTasks() + ]); + + dataMapStore.setSelectedFileId( + Number(dataMapStore.fileMapInfos[0].id) + ); + dataMapStore.setSelectedFileInfo(); + + // set flags about readonly and irregular process in + dataMapStore.switchReadOnly(true); + dataMapStore.switchIrregularProcess(true); + + // set flags about readonly and irregular process in + serverDataImportStore.switchExpandImportConfig(true); + serverDataImportStore.switchReadOnly(true); + serverDataImportStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + } + }} + > + {name} +
+ {!isEmpty(rowData.job_remarks) && ( + + )} +
+ ); + } + }, + { + title: t('import-manager.list-column-title.size'), + dataIndex: 'job_size', + width: '15%', + render(text: any) { + return
{text}
; + } + }, + { + title: t('import-manager.list-column-title.create-time'), + dataIndex: 'create_time', + render(text: string) { + return
{text}
; + } + }, + { + title: t('import-manager.list-column-title.status'), + dataIndex: 'job_status', + render(text: string) { + let specificClassName = ''; + + switch (text) { + case 'DEFAULT': + case 'UPLOADING': + specificClassName = 'import-manager-table-status-pending'; + break; + case 'MAPPING': + case 'SETTING': + case 'LOADING': + specificClassName = 'import-manager-table-status-process'; + break; + case 'FAILED': + specificClassName = 'import-manager-table-status-failed'; + break; + case 'SUCCESS': + specificClassName = 'import-manager-table-status-success'; + break; + } + + return ( +
+ {t(`import-manager.list-column-status.${text}`)} +
+ ); + } + }, + { + title: t('import-manager.list-column-title.time-consuming'), + dataIndex: 'job_duration', + render(text: string) { + return
{text}
; + } + }, + { + title: t('import-manager.list-column-title.manipulation'), + render(_: any, rowData: any) { + return ( +
+ +
+ ); + } + } + ]; + + useEffect(() => { + if (importManagerStore.currentId !== null) { + setTimeout(() => { + switchPreLoading(false); + }, 800); + + importManagerStore.fetchImportJobList(); + } + }, [importManagerStore.currentId]); + + return ( +
+
+ + +
+
+
{t('import-manager.hint.no-result')} + ) : ( + + ) + } + /> + ) + }} + dataSource={isLoading ? [] : importManagerStore.importJobList} + pagination={ + isLoading + ? null + : { + hideOnSinglePage: false, + pageNo: importManagerStore.importJobListPageConfig.pageNumber, + pageSize: 10, + showSizeChange: false, + showPageJumper: false, + total: importManagerStore.importJobListPageConfig.pageTotal, + onPageNoChange: handlePageChange + } + } + /> + + { + switchCreatePopModal(false); + await importManagerStore.createNewJob(); + importManagerStore.resetJob('new'); + + if (importManagerStore.requestStatus.createNewJob === 'success') { + Message.success({ + content: t('import-manager.hint.creation-succeed'), + size: 'medium', + showCloseIcon: false + }); + + importManagerStore.fetchImportJobList(); + return; + } + + if (importManagerStore.requestStatus.createNewJob === 'failed') { + Message.error({ + content: importManagerStore.errorInfo.createNewJob.message, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('import-manager.modal.manipulations.create')} + , + + ]} + destroyOnClose + needCloseIcon={true} + onCancel={() => { + switchCreatePopModal(false); + importManagerStore.resetJob('new'); + }} + > +
+
+
+ + * + + {t('import-manager.modal.create-job.job-name')} +
+ { + importManagerStore.mutateNewJob('name', e.value); + importManagerStore.validateJob('new', 'name'); + }} + originInputProps={{ + onBlur: () => { + importManagerStore.validateJob('new', 'name'); + } + }} + /> +
+
+
{t('import-manager.modal.create-job.job-description')}
+
+ { + importManagerStore.mutateNewJob('description', e.value); + importManagerStore.validateJob('new', 'description'); + }} + originInputProps={{ + onBlur: () => { + importManagerStore.validateJob('new', 'description'); + } + }} + /> +
+
+
+
+ + ); +}); + +export interface ImportManagerManipulationProps { + jobId: number; + jobName: string; + status: string; +} + +export const ImportManagerManipulation: React.FC = observer( + ({ jobId, jobName, status }) => { + const importManagerStore = useContext(ImportManagerStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [isPopDeleteModal, switchPopDeleteModal] = useState(false); + const [, params] = useRoute( + '/graph-management/:id/data-import/import-manager' + ); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const jumpToLoaction = (step: number, jobName: string) => async () => { + importManagerStore.setSelectedJob(jobId); + + dataImportRootStore.setCurrentId(Number(params!.id)); + dataImportRootStore.setCurrentJobId(jobId); + dataImportRootStore.setCurrentStatus(status); + + let route = ''; + + if (step === 1) { + await dataMapStore.fetchDataMaps(); + route = 'upload'; + } + + if (step === 2) { + // users may browse from + dataMapStore.switchReadOnly(false); + + await dataMapStore.fetchDataMaps(); + dataMapStore.setSelectedFileId(dataMapStore.fileMapInfos[0].id); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + + route = 'mapping'; + } + + if (step === 3) { + // users may browse from + serverDataImportStore.switchReadOnly(false); + + await dataMapStore.fetchDataMaps(); + + // need to set default selected file + dataMapStore.setSelectedFileId(dataMapStore.fileMapInfos[0].id); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + serverDataImportStore.switchIrregularProcess(true); + + if (status === 'SETTING') { + // user may browse from to + dataMapStore.switchReadOnly(false); + + serverDataImportStore.resetImportTasks(); + serverDataImportStore.switchFetchImportStatus('standby'); + serverDataImportStore.switchImportFinished(false); + } + + if (status === 'LOADING') { + // reveal previous & next button in + // users may browse from which set @readonly true + dataMapStore.switchReadOnly(false); + dataMapStore.switchLock(true); + serverDataImportStore.switchImportConfigReadOnly(true); + // users may browse from , let store fetches + // for one time and decide whether import is finished + serverDataImportStore.resetImportTasks(); + serverDataImportStore.switchImportFinished(false); + } + + route = 'loading'; + } + + dataImportRootStore.setCurrentStep(step); + + setLocation( + `/graph-management/${ + params!.id + }/data-import/import-manager/${jobId}/import-tasks/${route}` + ); + }; + + return ( +
+ {(status === 'DEFAULT' || status === 'UPLOADING') && ( + + {t('import-manager.list-column-manipulations.start')} + + )} + {status === 'MAPPING' && ( + + {t('import-manager.list-column-manipulations.resume-setting')} + + )} + {(status === 'SETTING' || status === 'LOADING') && ( + + {t('import-manager.list-column-manipulations.resume-importing')} + + )} + {status === 'FAILED' && ( + // { + // setLocation( + // `/graph-management/${ + // params!.id + // }/data-import/job-error-log/${jobId}` + // ); + // }} + // > + // {t('import-manager.list-column-manipulations.check-error-log')} + // + + {t('import-manager.list-column-manipulations.check-error-log')} + + )} + { + switchPopDeleteModal(true); + }} + > + {t('import-manager.list-column-manipulations.delete')} + + { + switchPopDeleteModal(false); + await importManagerStore.deleteJob(jobId); + importManagerStore.fetchImportJobList(); + }} + key="delete" + > + {t('import-manager.modal.manipulations.delete')} + , + + ]} + destroyOnClose + needCloseIcon={true} + onCancel={() => { + switchPopDeleteModal(false); + }} + > +
+ + {t('import-manager.modal.delete-job.hint', { + name: jobName + })} + + {t('import-manager.modal.delete-job.sub-hint')} +
+
+
+ ); + } +); + +export const EmptyImportHints: React.FC = observer(() => { + const importManagerStore = useContext(ImportManagerStoreContext); + const [isPopCreateModal, switchCreatePopModal] = useState(false); + const { t } = useTranslation(); + + return ( +
+ {t('import-manager.manipulation.create')} +
{t('import-manager.hint.empty-task')}
+ + { + switchCreatePopModal(false); + await importManagerStore.createNewJob(); + importManagerStore.resetJob('new'); + + if (importManagerStore.requestStatus.createNewJob === 'success') { + Message.success({ + content: t('import-manager.hint.creation-succeed'), + size: 'medium', + showCloseIcon: false + }); + + importManagerStore.fetchImportJobList(); + return; + } + + if (importManagerStore.requestStatus.createNewJob === 'failed') { + Message.error({ + content: importManagerStore.errorInfo.createNewJob.message, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('import-manager.modal.manipulations.create')} + , + + ]} + destroyOnClose + needCloseIcon={true} + onCancel={() => { + switchCreatePopModal(false); + importManagerStore.resetJob('new'); + }} + > +
+
+
+ + * + + {t('import-manager.modal.create-job.job-name')} +
+ { + importManagerStore.mutateNewJob('name', e.value); + importManagerStore.validateJob('new', 'name'); + }} + onBlur={() => { + importManagerStore.validateJob('new', 'name'); + }} + /> +
+
+
{t('import-manager.modal.create-job.job-description')}
+
+ { + importManagerStore.mutateNewJob('description', e.value); + importManagerStore.validateJob('new', 'description'); + }} + onBlur={() => { + importManagerStore.validateJob('new', 'description'); + }} + /> +
+
+
+
+
+ ); +}); + +export default ImportTaskList; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTasks.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTasks.less new file mode 100644 index 000000000..a93c3eddc --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTasks.less @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.import-tasks { + &-breadcrumb-wrapper { + margin: 16px 0; + } + + &-content-wrapper { + height: calc(100vh - 130px); + background: #fff; + } + + &-step-wrapper { + display: flex; + height: calc(100vh - 194px); + overflow: auto; + } + + &-step-content-header { + display: flex; + margin-bottom: 16px; + + & > span { + font-weight: 900; + line-height: 24px; + } + + & img { + cursor: pointer; + } + + &-expand { + margin-left: 9.7px; + transform: rotate(-180deg); + transition: transform 0.3s; + } + + &-collpase { + margin-left: 9.7px; + transform: rotate(0deg); + transition: transform 0.3s; + } + } + + &-tooltips { + padding: 16px; + color: #ff5b5b; + } + + &-manipulation { + font-size: 14px; + color: #2b65ff; + line-height: 20px; + cursor: pointer; + display: flex; + width: fit-content; + + &-disabled { + color: #999; + } + } + + &-complete-hint { + display: flex; + height: calc(100vh - 194px); + flex-direction: column; + justify-content: center; + align-items: center; + + &-description { + display: flex; + justify-content: center; + + & > div { + margin-left: 20px; + + & > div:first-of-type { + font-size: 24px; + } + + & > div:last-of-type { + color: #333; + } + } + } + + &-manipulations { + margin: 42px auto 0; + } + } +} + +// overrides +.import-tasks .new-fc-one-breadcrumb.new-fc-one-breadcrumb-small { + line-height: 22px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx new file mode 100644 index 000000000..3d951614e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/ImportTasks.tsx @@ -0,0 +1,134 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useMemo, useEffect, useLayoutEffect } from 'react'; +import { observer } from 'mobx-react'; +import { useRoute, useLocation } from 'wouter'; +import { isNull } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Steps, Button } from 'hubble-ui'; + +import UploadEntry from './UploadEntry'; +import { DataMapConfigs } from './datamap-configs'; +import { ServerDataImport } from './server-data-import'; +import ImportFinish from './ImportFinish'; +import { + ImportManagerStoreContext, + GraphManagementStoreContext, + DataImportRootStoreContext +} from '../../../../stores'; + +import PassIcon from '../../../../assets/imgs/ic_pass.svg'; + +import './ImportTasks.less'; + +const ImportTasks: React.FC = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const importManagerStore = useContext(ImportManagerStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [, params] = useRoute( + '/graph-management/:id/data-import/import-manager/:jobId/import-tasks/:status*' + ); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const steps = useMemo( + () => [ + t('step.first'), + t('step.second'), + t('step.third'), + t('step.fourth') + ], + [] + ); + + const wrapperClassName = classnames({ + 'import-tasks': true, + 'import-tasks-with-expand-sidebar': graphManagementStore.isExpanded + }); + + useEffect(() => { + if (!isNull(params)) { + switch (params.status) { + case 'upload': + dataImportRootStore.setCurrentStep(1); + break; + case 'mapping': + dataImportRootStore.setCurrentStep(2); + break; + case 'loading': + dataImportRootStore.setCurrentStep(3); + break; + case 'finish': + dataImportRootStore.setCurrentStep(4); + break; + } + } + }, [params?.status]); + + useEffect(() => { + window.scrollTo(0, 0); + dataImportRootStore.setCurrentJobId(Number(params!.jobId)); + + graphManagementStore.fetchIdList(); + dataImportRootStore.setCurrentId(Number(params!.id)); + dataImportRootStore.fetchVertexTypeList(); + dataImportRootStore.fetchEdgeTypeList(); + dataMapStore.fetchDataMaps(); + + return () => { + // no specific job here, solve the problem that click back button in browser + // since relies on @selectedJob in useEffect() + importManagerStore.setSelectedJob(null); + dataImportRootStore.dispose(); + dataMapStore.dispose(); + serverDataImportStore.dispose(); + }; + }, []); + + return ( +
+
+
+ + {steps.map((title: string, index: number) => ( + index + 1 + ? 'finish' + : 'wait' + } + key={title} + /> + ))} + +
+ {dataImportRootStore.currentStep === 1 && } + {dataImportRootStore.currentStep === 2 && } + {dataImportRootStore.currentStep === 3 && } + {dataImportRootStore.currentStep === 4 && } +
+
+ ); +}); + +export default ImportTasks; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/UploadEntry.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/UploadEntry.less new file mode 100644 index 000000000..7af02e583 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/UploadEntry.less @@ -0,0 +1,106 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.import-tasks { + &-upload-wrapper { + padding: 0 16px 28px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: calc(100vh - 250px); + } + + &-upload-drag-area { + width: 400px; + height: 200px; + padding: 83px 73px; + border: 1px dashed #979797; + // display: flex; + // justify-content: center; + // align-items: center; + font-size: 12px; + color: #666; + + &:hover, + &.file-above { + border-color: #2b65ff; + } + } + + &-upload-file-list { + margin-top: 30px; + width: 400px; + max-height: calc(100vh - 512px); + overflow-y: auto; + overflow-x: hidden; + font-size: 14px; + line-height: 20px; + color: #333; + } + + &-upload-file-info { + margin-bottom: 19px; + + &-titles { + width: 75%; + display: flex; + justify-content: space-between; + } + + &-progress-status { + width: 400px; + display: flex; + align-items: center; + + &-refresh-icon { + position: relative; + left: -22px; + cursor: pointer; + } + + &-close-icon { + position: relative; + left: -35px; + cursor: pointer; + top: 0; + + &.in-progress { + left: 0; + top: 1px; + } + + &.in-error { + left: -12px; + top: 0; + } + } + } + } + + &-manipulation-wrapper { + display: flex; + justify-content: center; + } +} + +/* override */ + +// disable original delete icon in progress bar due to the img bug +.import-tasks-upload-file-info .new-fc-one-progress-operation { + display: none; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx new file mode 100644 index 000000000..84f1132d6 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/UploadEntry.tsx @@ -0,0 +1,1034 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useCallback, useRef, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { useLocation } from 'wouter'; +import classnames from 'classnames'; +import { + isEmpty, + size, + isUndefined, + range, + xor, + intersection +} from 'lodash-es'; +import { DndProvider, useDrop, DropTargetMonitor } from 'react-dnd'; +import { useTranslation } from 'react-i18next'; +import { HTML5Backend, NativeTypes } from 'react-dnd-html5-backend'; +import { Button, Progress, Message } from 'hubble-ui'; +import { CancellablePromise } from 'mobx/lib/api/flow'; + +import { DataImportRootStoreContext } from '../../../../stores'; +import { useInitDataImport } from '../../../../hooks'; + +import type { FileUploadResult } from '../../../../stores/types/GraphManagementStore/dataImportStore'; + +import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; +import RefreshIcon from '../../../../assets/imgs/ic_refresh.svg'; + +import './UploadEntry.less'; + +const KB = 1024; +const MB = 1024 * 1024; +const GB = 1024 * 1024 * 1024; +const MAX_CONCURRENT_UPLOAD = 5; + +const UploadEntry: React.FC = observer(() => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const isInitReady = useInitDataImport(); + const { t } = useTranslation(); + const [, setLocation] = useLocation(); + + useEffect(() => { + const unload = (e: any) => { + e = e || window.event; + + if (e) { + e.returnValue = 'hint'; + } + + return 'hint'; + }; + + window.addEventListener('beforeunload', unload); + + return () => { + window.removeEventListener('beforeunload', unload); + }; + }, [dataImportRootStore]); + + return isInitReady ? ( + <> + + + +
+ + +
+ + ) : null; +}); + +export const FileDropZone: React.FC = observer(() => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [{ canDrop, isOver }, drop] = useDrop({ + accept: [NativeTypes.FILE], + drop(item, monitor) { + handleFileDrop(monitor); + }, + collect: (monitor) => ({ + isOver: monitor.isOver(), + canDrop: monitor.canDrop() + }) + }); + const { t } = useTranslation(); + + const uploadRef = useRef(null); + + const validateFileCondition = (files: File[]) => { + const validatedFiles = []; + const currentUploadFileNames = dataImportRootStore.fileUploadTasks + .map(({ name }) => name) + .concat(dataMapStore.fileMapInfos.map(({ name }) => name)); + + const filteredFiles = files.filter( + ({ name }) => !currentUploadFileNames.includes(name) + ); + + if (size(filteredFiles) !== size(files)) { + const duplicatedFiles = xor(files, filteredFiles); + + Message.error({ + content: ( +
+

{t('upload-files.no-duplicate')}

+ {duplicatedFiles.map((file) => ( +

{file.name}

+ ))} +
+ ), + size: 'medium', + showCloseIcon: false + }); + } + + const totalSize = filteredFiles + .map(({ size }) => size) + .reduce((prev, curr) => prev + curr, 0); + + if (totalSize / GB > 10) { + Message.error({ + content: `${t('upload-files.over-all-size-limit')}`, + size: 'medium', + showCloseIcon: false + }); + + return []; + } + + for (const file of filteredFiles) { + const { name, size } = file; + const sizeGB = size / GB; + + if (size === 0) { + Message.error({ + content: `${name} ${t('upload-files.empty-file')}`, + size: 'medium', + showCloseIcon: false + }); + + break; + } + + if (name.slice(-4) !== '.csv') { + Message.error({ + content: `${name}: ${t('upload-files.wrong-format')}`, + size: 'medium', + showCloseIcon: false + }); + + break; + } + + if (sizeGB > 1) { + Message.error({ + content: `${name}: ${t('upload-files.over-single-size-limit')}`, + size: 'medium', + showCloseIcon: false + }); + + break; + } + + validatedFiles.push(file); + } + + dataImportRootStore.updateFileList(validatedFiles); + return validatedFiles; + }; + + const handleFileChange = (files: File[]) => { + for (const file of files) { + const { name, size } = file; + const sizeMB = size / MB; + + const chunkList = []; + // start byte to slice + let currentChunkStartIndex = 0; + // size of each chunk + let chunkSizeMB: number; + let chunkIndex = 0; + + if (sizeMB > 2 && sizeMB <= 128) { + chunkSizeMB = 2; + } else if (sizeMB > 128 && size <= 512) { + chunkSizeMB = 4; + } else { + chunkSizeMB = 5; + } + + while (currentChunkStartIndex < size) { + chunkList.push({ + chunkIndex, + chunk: file.slice( + currentChunkStartIndex, + currentChunkStartIndex + chunkSizeMB * MB + ) + }); + currentChunkStartIndex += chunkSizeMB * MB; + ++chunkIndex; + } + + dataImportRootStore.initFileUploadTask({ + name, + size, + status: 'uploading', + chunkList, + chunkTotal: Math.ceil(size / (chunkSizeMB * MB)), + uploadedChunkTotal: 0, + pendingChunkIndexes: [], + failedChunkIndexes: [], + uploadedChunksIndexes: [] + }); + } + }; + + const initFileTaskQueue = () => { + const firstRequestTasks = dataImportRootStore.fileUploadTasks.slice( + 0, + MAX_CONCURRENT_UPLOAD + ); + + firstRequestTasks.forEach(({ name, chunkList, chunkTotal }) => { + const task = dataImportRootStore.uploadFiles({ + fileName: name, + fileChunkList: chunkList[0], + fileChunkTotal: chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: name, + status: 'uploading', + task + }); + + scheduler(name, 0, task); + }); + + if (size(firstRequestTasks) < MAX_CONCURRENT_UPLOAD) { + let loopCount = 1; + + // Traverse firstRequestTasks to add extra items to queue + while (loopCount) { + const currentQueueItemSize = size(dataImportRootStore.fileUploadQueue); + + firstRequestTasks.forEach(({ chunkTotal, chunkList, name }) => { + if ( + chunkTotal > loopCount && + size(dataImportRootStore.fileUploadQueue) < MAX_CONCURRENT_UPLOAD + ) { + const task = dataImportRootStore.uploadFiles({ + fileName: name, + fileChunkList: chunkList[loopCount], + fileChunkTotal: chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: name, + status: 'uploading', + task + }); + + scheduler(name, loopCount, task); + } + }); + + if ( + size(dataImportRootStore.fileUploadQueue) === MAX_CONCURRENT_UPLOAD || + // which means no other items pushed into queue + currentQueueItemSize === size(dataImportRootStore.fileUploadQueue) + ) { + break; + } else { + loopCount += 1; + } + } + } + }; + + const scheduler = useCallback( + async ( + fileName: string, + fileChunkIndex: number, + task: CancellablePromise, + retryMode: boolean = false + ) => { + const fileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name }) => name === fileName + )!; + + // users may click back button in browser + if (isUndefined(fileUploadTask)) { + return; + } + + // the index of fileChunk is pending + dataImportRootStore.mutateFileUploadTasks( + 'pendingChunkIndexes', + [...fileUploadTask.pendingChunkIndexes, fileChunkIndex], + fileName + ); + + let result; + + // cancel all uploads by user + if (fileUploadTask.status === 'failed') { + task.cancel(); + result = undefined; + } else { + result = await task; + } + + if (isUndefined(result) || result.status === 'FAILURE') { + if (fileUploadTask.status !== 'failed') { + if (dataImportRootStore.errorInfo.uploadFiles.message !== '') { + Message.error({ + content: dataImportRootStore.errorInfo.uploadFiles.message, + size: 'medium', + showCloseIcon: false + }); + } + + dataImportRootStore.mutateFileUploadTasks( + 'status', + 'failed', + fileName + ); + } + + dataImportRootStore.mutateFileUploadTasks( + 'failedChunkIndexes', + [...fileUploadTask.failedChunkIndexes, fileChunkIndex], + fileName + ); + + dataImportRootStore.mutateFileUploadTasks( + 'pendingChunkIndexes', + [], + fileName + ); + + dataImportRootStore.removeFileUploadQueue(fileName); + return; + } + + if (result.status === 'SUCCESS') { + dataImportRootStore.mutateFileUploadTasks( + 'uploadedChunkTotal', + fileUploadTask.uploadedChunkTotal + 1, + fileName + ); + + dataImportRootStore.mutateFileUploadTasks( + 'uploadedChunksIndexes', + [...fileUploadTask.uploadedChunksIndexes, fileChunkIndex], + fileName + ); + + if (retryMode) { + // remove failed chunk index after succeed + dataImportRootStore.mutateFileUploadTasks( + 'failedChunkIndexes', + fileUploadTask.failedChunkIndexes.filter( + (failedChunkIndex) => failedChunkIndex !== fileChunkIndex + ), + fileName + ); + + // if there are no longer existed failed chunk index, + // set retry mode to false + if (size(fileUploadTask.failedChunkIndexes) === 0) { + retryMode = false; + } + } + + // all file chunks are uploaded + if (fileUploadTask.chunkTotal === fileUploadTask.uploadedChunkTotal) { + // remove fully uploaded file from queue + dataImportRootStore.removeFileUploadQueue(fileName); + // change the status of fully uploaded file to success + dataImportRootStore.mutateFileUploadTasks( + 'status', + 'success', + fileName + ); + // clear chunkList of fully uploaded file to release memory + dataImportRootStore.mutateFileUploadTasks('chunkList', [], fileName); + + // no uploading files + if ( + dataImportRootStore.fileUploadTasks.every( + ({ status }) => status !== 'uploading' + ) + ) { + dataMapStore.fetchDataMaps(); + return; + } + + if (size(dataImportRootStore.fileRetryUploadList) !== 0) { + // check if there are some failed uploads waiting in retry queue + const fileName = dataImportRootStore.pullRetryFileUploadQueue()!; + const retryFileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name }) => name === fileName + )!; + + const task = dataImportRootStore.uploadFiles({ + fileName, + fileChunkList: + retryFileUploadTask.chunkList[ + retryFileUploadTask.failedChunkIndexes[0] + ], + fileChunkTotal: retryFileUploadTask.chunkTotal + }); + + scheduler( + retryFileUploadTask.name, + retryFileUploadTask.failedChunkIndexes[0], + task, + true + ); + + return; + } + + for (const [ + fileIndex, + fileUploadTask + ] of dataImportRootStore.fileUploadTasks.entries()) { + // if there still has files which are fully not being uploaded + if ( + fileUploadTask.uploadedChunkTotal === 0 && + size(fileUploadTask.pendingChunkIndexes) === 0 + ) { + const task = dataImportRootStore.uploadFiles({ + fileName: fileUploadTask.name, + fileChunkList: + dataImportRootStore.fileUploadTasks[fileIndex].chunkList[0], + fileChunkTotal: + dataImportRootStore.fileUploadTasks[fileIndex].chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: fileUploadTask.name, + status: 'uploading', + task + }); + + scheduler(fileUploadTask.name, 0, task); + + // if queue is full, do not loop to add task + if ( + size(dataImportRootStore.fileUploadQueue) === + MAX_CONCURRENT_UPLOAD + ) { + break; + } + } + } + + return; + } + + let nextUploadChunkIndex; + + if (retryMode) { + const duplicateIndexes = intersection( + fileUploadTask.uploadedChunksIndexes, + fileUploadTask.failedChunkIndexes + ); + + if (!isEmpty(duplicateIndexes)) { + dataImportRootStore.mutateFileUploadTasks( + 'failedChunkIndexes', + fileUploadTask.failedChunkIndexes.filter( + (failedIndex) => !duplicateIndexes.includes(failedIndex) + ), + fileName + ); + } + + if (isEmpty(fileUploadTask.failedChunkIndexes)) { + retryMode = false; + } + + nextUploadChunkIndex = + fileUploadTask.failedChunkIndexes[0] || + Math.max( + ...fileUploadTask.pendingChunkIndexes, + // maybe it just turns retry mode to false + // and the failed chunk index could be less than + // the one which uploads success + // we have to compare uploaded chunk index either + ...fileUploadTask.uploadedChunksIndexes + ) + 1; + } else { + nextUploadChunkIndex = + Math.max( + ...fileUploadTask.pendingChunkIndexes, + // maybe it just turns retry mode to false + // and the failed chunk index could be less than + // the one which uploads success + // we have to compare uploaded chunk index either + ...fileUploadTask.uploadedChunksIndexes + ) + 1; + } + + // remove pending here to get right result of nextUploadChunkIndex + dataImportRootStore.mutateFileUploadTasks( + 'pendingChunkIndexes', + fileUploadTask.pendingChunkIndexes.filter( + (pendingChunkIndex) => pendingChunkIndex !== fileChunkIndex + ), + fileName + ); + + // no recursion + if ( + nextUploadChunkIndex > fileUploadTask.chunkTotal - 1 || + fileUploadTask.uploadedChunksIndexes.includes(nextUploadChunkIndex) + ) { + return; + } + + scheduler( + fileName, + nextUploadChunkIndex, + dataImportRootStore.uploadFiles({ + fileName, + fileChunkList: fileUploadTask.chunkList[nextUploadChunkIndex], + fileChunkTotal: fileUploadTask.chunkTotal + }), + retryMode + ); + + return; + } + }, + [] + ); + + const handleFileDrop = async (monitor: DropTargetMonitor) => { + if (monitor) { + const fileList = monitor.getItem().files; + const currentValidateFileList = validateFileCondition(fileList); + const isFirstBatchUpload = + size(dataImportRootStore.fileUploadTasks) === 0; + + if (isEmpty(currentValidateFileList)) { + return; + } + + await dataImportRootStore.fetchFilehashes( + currentValidateFileList.map(({ name }) => name) + ); + + handleFileChange(currentValidateFileList); + + if (isFirstBatchUpload) { + initFileTaskQueue(); + } else { + const spareQueueItems = + MAX_CONCURRENT_UPLOAD - size(dataImportRootStore.fileUploadQueue); + + if (spareQueueItems === 0) { + return; + } + + // if new selected files are less than spare spaces from queue + if (spareQueueItems >= size(currentValidateFileList)) { + currentValidateFileList.forEach(({ name }) => { + const fileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name: fileName }) => fileName === name + )!; + + const task = dataImportRootStore.uploadFiles({ + fileName: name, + fileChunkList: fileUploadTask.chunkList[0], + fileChunkTotal: fileUploadTask.chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: fileUploadTask.name, + status: 'uploading', + task + }); + scheduler(name, 0, task); + }); + } else { + range(spareQueueItems).forEach((fileUploadTaskIndex) => { + const fileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name: fileName }) => + fileName === currentValidateFileList[fileUploadTaskIndex].name + )!; + + const task = dataImportRootStore.uploadFiles({ + fileName: fileUploadTask.name, + fileChunkList: fileUploadTask.chunkList[0], + fileChunkTotal: fileUploadTask.chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: fileUploadTask.name, + status: 'uploading', + task + }); + scheduler(fileUploadTask.name, 0, task); + }); + } + } + } + }; + + const handleFileSelect = async (e: React.ChangeEvent) => { + // event in async callback should call this + e.persist(); + + if (e.target.files) { + const fileList = Array.from(e.target.files); + const currentValidateFileList = validateFileCondition(fileList); + const isFirstBatchUpload = + size(dataImportRootStore.fileUploadTasks) === 0; + + if (isEmpty(currentValidateFileList)) { + return; + } + + await dataImportRootStore.fetchFilehashes( + currentValidateFileList.map(({ name }) => name) + ); + + handleFileChange(currentValidateFileList); + + if (isFirstBatchUpload) { + initFileTaskQueue(); + } else { + const spareQueueItems = + MAX_CONCURRENT_UPLOAD - size(dataImportRootStore.fileUploadQueue); + + if (spareQueueItems === 0) { + return; + } + + // if new selected files are less than spare spaces from queue + if (spareQueueItems >= size(currentValidateFileList)) { + currentValidateFileList.forEach(({ name }) => { + const fileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name: fileName }) => fileName === name + )!; + + const task = dataImportRootStore.uploadFiles({ + fileName: name, + fileChunkList: fileUploadTask.chunkList[0], + fileChunkTotal: fileUploadTask.chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: fileUploadTask.name, + status: 'uploading', + task + }); + scheduler(name, 0, task); + }); + } else { + range(spareQueueItems).forEach((fileUploadTaskIndex) => { + const fileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name: fileName }) => + fileName === currentValidateFileList[fileUploadTaskIndex].name + )!; + + const task = dataImportRootStore.uploadFiles({ + fileName: fileUploadTask.name, + fileChunkList: fileUploadTask.chunkList[0], + fileChunkTotal: fileUploadTask.chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName: fileUploadTask.name, + status: 'uploading', + task + }); + scheduler(fileUploadTask.name, 0, task); + }); + } + } + } + + // select same file will not trigger onChange on input[type="file"] + // need to reset its value here + e.target.value = ''; + }; + + const dragAreaClassName = classnames({ + 'import-tasks-upload-drag-area': true, + 'file-above': canDrop && isOver + }); + + // if upload file api throw errors + useEffect(() => { + if (dataImportRootStore.errorInfo.uploadFiles.message !== '') { + Message.error({ + content: dataImportRootStore.errorInfo.uploadFiles.message, + size: 'medium', + showCloseIcon: false + }); + } + }, [dataImportRootStore.errorInfo.uploadFiles.message]); + + return ( +
+ + +
+ ); +}); + +export interface FileListProps { + scheduler: ( + fileName: string, + fileChunkIndex: number, + task: CancellablePromise, + retryMode?: boolean + ) => Promise; +} + +export const FileList: React.FC = observer(({ scheduler }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore } = dataImportRootStore; + + const handleRetry = (fileName: string) => () => { + // if (size(dataImportRootStore.fileUploadQueue) === 0) { + if (size(dataImportRootStore.fileUploadQueue) < MAX_CONCURRENT_UPLOAD) { + const fileUploadTask = dataImportRootStore.fileUploadTasks.find( + ({ name }) => name === fileName + )!; + + const task = dataImportRootStore.uploadFiles({ + fileName, + fileChunkList: + fileUploadTask.chunkList[fileUploadTask.failedChunkIndexes[0]] || + fileUploadTask.chunkList[ + Math.max( + ...fileUploadTask.pendingChunkIndexes, + // maybe it just turns retry mode to false + // and the failed chunk index could be less than + // the one which uploads success + // we have to compare uploaded chunk index either + ...fileUploadTask.uploadedChunksIndexes + ) + 1 + ], + fileChunkTotal: fileUploadTask.chunkTotal + }); + + dataImportRootStore.addFileUploadQueue({ + fileName, + status: 'uploading', + task + }); + + dataImportRootStore.mutateFileUploadTasks( + 'status', + 'uploading', + fileName + ); + + if (!isEmpty(fileUploadTask.failedChunkIndexes)) { + dataImportRootStore.mutateFileUploadTasks( + 'failedChunkIndexes', + [...fileUploadTask.failedChunkIndexes.slice(1)], + fileName + ); + } + + scheduler( + fileName, + fileUploadTask.failedChunkIndexes[0] || + Math.max( + ...fileUploadTask.pendingChunkIndexes, + // maybe it just turns retry mode to false + // and the failed chunk index could be less than + // the one which uploads success + // we have to compare uploaded chunk index either + ...fileUploadTask.uploadedChunksIndexes + ) + 1, + task, + true + ); + } else { + // or just add filename to retry queue, + // let other scheduler decide when to call it + dataImportRootStore.addRetryFileUploadQueue(fileName); + } + }; + + const handleDelete = (name: string, existed = false) => async () => { + await dataImportRootStore.deleteFiles(name); + + if (dataImportRootStore.requestStatus.deleteFiles === 'failed') { + Message.error({ + content: dataImportRootStore.errorInfo.deleteFiles.message, + size: 'medium', + showCloseIcon: false + }); + + return; + } + + if (existed === true) { + dataMapStore.fetchDataMaps(); + return; + } + + dataImportRootStore.removeFileUploadTasks(name); + + // if no uploading files, fetch data maps again + if ( + !dataImportRootStore.fileUploadTasks.some( + ({ status }) => status === 'uploading' + ) + ) { + dataMapStore.fetchDataMaps(); + } + }; + + return ( +
+ {dataImportRootStore.fileUploadTasks.map( + ({ name, size, chunkTotal, uploadedChunkTotal, status }) => { + const [sizeKB, sizeMB, sizeGB] = [size / KB, size / MB, size / GB]; + const convertedSize = + sizeGB > 1 + ? String(sizeGB.toFixed(2)) + ' GB' + : sizeMB > 1 + ? String(sizeMB.toFixed(2)) + ' MB' + : sizeKB > 1 + ? String(sizeKB.toFixed(2)) + ' KB' + : String(size) + ' Byte'; + const progress = Number( + ((uploadedChunkTotal / chunkTotal) * 100).toFixed(2) + ); + + return ( +
+
+ {name} + {convertedSize} +
+
+ + {status === 'failed' && progress !== 100 && ( + retry-upload-file + )} + delete-file +
+
+ ); + } + )} + {dataMapStore.fileMapInfos + .filter( + ({ name }) => + !dataImportRootStore.successFileUploadTaskNames.includes(name) + ) + .map(({ name, total_size }) => { + return ( +
+
+ {name} + {total_size} +
+
+ + delete-file +
+
+ ); + })} +
+ ); +}); + +export default UploadEntry; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less new file mode 100644 index 000000000..174042063 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.less @@ -0,0 +1,393 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.import-tasks { + &-data-map { + margin-bottom: 40px; + } + + &-data-map-tooltip { + background: #fff; + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2); + border-radius: 4px; + padding: 16px; + font-size: 14px; + + &-text { + margin-bottom: 8px; + + &:nth-child(2) { + color: #e64552; + font-size: 16px; + margin-bottom: 12px; + } + + &:last-child { + margin-bottom: 0; + } + } + + &.no-display { + display: none; + } + } + + &-data-type-info-wrapper { + // margin-bottom: 16px; + padding: 24px 16px; + height: 100px; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + display: flex; + position: relative; + } + + &-data-type-info { + display: flex; + flex-direction: column; + padding-right: 8px; + // flex: 1; + + &:nth-child(1) { + // width: 24%; + flex: 1 0; + + & img.collpase { + transform: rotate(-90deg); + transition: transform 0.3s; + } + + & img.expand { + transform: rotate(0deg); + transition: transform 0.3s; + } + } + + &:nth-child(2) { + flex: 1 0; + } + + &:nth-child(3) { + flex: 1 0; + } + + &:last-child { + padding-right: 0; + width: 168px; + flex-direction: row; + align-items: center; + } + + & > div { + display: flex; + } + + &-title { + font-size: 12px; + line-height: 18px; + color: #666; + } + + &-content { + max-width: 180px; + margin-top: 13px; + font-size: 16px; + line-height: 22px; + color: #333; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + + &-data-options { + display: flex; + line-height: 32px; + margin-bottom: 32px; + font-size: 14px; + align-items: center; + + &-title { + display: flex; + justify-content: flex-end; + align-items: center; + width: 62px; + margin-right: 44px; + color: #333; + font-size: 14px; + + &.in-card { + width: 76px; + } + } + + &-value-maps { + width: 650px; + background-color: #f5f5f5; + margin-bottom: 16px; + padding: 16px 40px; + } + + &-expand-table { + width: 80%; + display: flex; + flex-direction: column; + + &-row { + display: flex; + margin-bottom: 8px; + + &:first-child { + margin-bottom: 12px; + } + } + + &-column { + height: 32px; + display: flex; + align-items: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 14px; + line-height: 32px; + + &:nth-child(1) { + flex-basis: 30%; + } + + &:nth-child(2) { + flex-basis: 30%; + } + + &:nth-child(3) { + flex-basis: 30%; + } + + &:last-child { + flex-basis: 10%; + justify-content: center; + } + } + } + + &-expand-dropdown { + width: 382px; + max-height: 328px; + overflow: auto; + background: #fff; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + color: #333; + + & > div { + padding: 0 16px; + height: 32px; + display: flex; + align-items: center; + } + } + + &-expand-values { + display: flex; + flex-direction: column; + } + + &-expand-value { + display: flex; + margin-bottom: 32px; + + &:nth-last-child(2) { + margin-bottom: 16px; + } + + &:nth-last-child(1) { + margin-bottom: 0; + } + + & img { + margin: 0 2px; + } + + &-column { + height: 32px; + display: flex; + align-items: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: 14px; + line-height: 32px; + + &:nth-child(1) { + width: 30%; + } + + &:nth-child(2) { + width: 30%; + } + + &:nth-child(3) { + width: 30%; + } + + &:nth-child(4) { + width: 10%; + } + } + } + + &-expand-info { + display: flex; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + & > span { + font-size: 14px; + line-height: 32px; + + &:nth-child(1) { + width: 60px; + } + } + + & > img { + margin: 0 6px; + } + } + + &-expand-input { + margin-top: 12px; + + &:first-child { + margin-top: 0; + } + } + } + + &-data-type-manipulations { + display: flex; + margin-left: auto; + } + + &-data-map-manipulations { + width: 100%; + margin-top: 40px; + display: flex; + justify-content: center; + } + + &-data-map-configs { + padding: 0 16px; + width: 100%; + overflow: auto; + } + + // &-data-map-config-header { + // display: flex; + // margin-bottom: 16px; + + // & > span { + // font-weight: 900; + // line-height: 24px; + // } + + // & img { + // cursor: pointer; + // } + + // &-expand { + // margin-left: 9.7px; + // transition: transform 0.3s; + // } + + // &-collpase { + // margin-left: 9.7px; + // transform: rotate(-180deg); + // transition: transform 0.3s; + // } + // } + + &-data-map-config-card { + // prevent box-shadow being cliped + // margin: 0 3px; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + margin-bottom: 16px; + padding: 16px; + } + + &-data-map-config-view { + width: 100%; + background: #fafafa; + border: 1px solid #eee; + border-radius: 0 0 3px 3px; + margin-bottom: 16px; + padding: 16px; + // position: absolute; + // top: 100px; + // left: 0; + z-index: 9; + } +} + +.import-tasks-tooltips { + width: 368px; + background: #fff; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + padding: 24px; + font-size: 14px; + color: #333; + + & p { + margin: 0; + + &:nth-of-type(1) { + margin-bottom: 16px; + font-weight: 900; + font-size: 16px; + color: #000; + } + + &:nth-of-type(2) { + margin-bottom: 24px; + font-size: 14px; + color: #333; + } + } +} + +/* override */ + +.import-tasks-data-options + .new-fc-one-checkbox-group.new-fc-one-checkbox-group-medium.new-fc-one-checkbox-group-row { + line-height: normal; +} + +// reveal scrollbar by auto, directly override style on will both set internal wrapper and
    itself, which cause shrinks on . +.import-tasks-step-wrapper + > .new-fc-one-menu-inline-box.new-fc-one-menu-inline-medium + > ul { + overflow: auto; +} + +.import-tasks-data-map-configs + .new-fc-one-input-error.new-fc-one-input-error-layer { + word-break: keep-all; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx new file mode 100644 index 000000000..562fac5aa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/DataMapConfigs.tsx @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { isEmpty } from 'lodash-es'; +import { Menu } from 'hubble-ui'; + +import { + ImportManagerStoreContext, + DataImportRootStoreContext +} from '../../../../../stores'; +import FileConfigs from './FileConfigs'; +import TypeConfigs from './TypeConfigs'; +import { useInitDataImport } from '../../../../../hooks'; + +import './DataMapConfigs.less'; + +export interface DataMapConfigsProps { + height?: string; +} + +const DataMapConfigs: React.FC = observer(({ height }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const isInitReady = useInitDataImport(); + const realHeight = height ? height : 'calc(100vh - 194px)'; + + return isInitReady ? ( +
    + { + // reset state from the previous file + dataMapStore.resetDataMaps(); + + // if data import starts, do not expand collpase + if (!serverDataImportStore.isServerStartImport) { + dataMapStore.switchExpand('file', true); + } + + dataMapStore.setSelectedFileId(Number(e.key)); + dataMapStore.setSelectedFileInfo(); + serverDataImportStore.switchImporting(false); + }} + > + {dataMapStore.fileMapInfos + .filter(({ file_status }) => file_status === 'COMPLETED') + .map(({ id, name }) => ( + + {name} + + ))} + +
    + + +
    +
    + ) : null; +}); + +export default DataMapConfigs; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx new file mode 100644 index 000000000..84729a65a --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/EdgeMap.tsx @@ -0,0 +1,1707 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useState } from 'react'; +import { observer } from 'mobx-react'; +import { isUndefined, isEmpty, size, cloneDeep } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Input, Select, Checkbox, Message } from 'hubble-ui'; + +import { Tooltip } from '../../../../common'; +import { DataImportRootStoreContext } from '../../../../../stores'; +import { + VertexType, + EdgeType +} from '../../../../../stores/types/GraphManagementStore/metadataConfigsStore'; +import TypeConfigManipulations from './TypeConfigManipulations'; +import { getUnicodeLength } from '../../../../../utils'; + +import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; +import BlueArrowIcon from '../../../../../assets/imgs/ic_arrow_blue.svg'; +import CloseIcon from '../../../../../assets/imgs/ic_close_16.svg'; +import MapIcon from '../../../../../assets/imgs/ic_yingshe_16.svg'; + +export interface EdgeMapProps { + checkOrEdit: 'check' | 'edit' | boolean; + onCancelCreateEdge: () => void; + edgeMapIndex?: number; +} + +const EdgeMap: React.FC = observer( + ({ checkOrEdit, onCancelCreateEdge, edgeMapIndex }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore } = dataImportRootStore; + const [isAddMapping, switchAddMapping] = useState(false); + const [isExpandAdvance, switchExpandAdvance] = useState(false); + const { t } = useTranslation(); + + const isCheck = checkOrEdit === 'check'; + const isEdit = checkOrEdit === 'edit'; + const edgeMap = + checkOrEdit !== false + ? dataMapStore.editedEdgeMap! + : dataMapStore.newEdgeType; + const filteredColumnNamesInSelection = + checkOrEdit !== false + ? dataMapStore.filteredColumnNamesInEdgeEditSelection + : dataMapStore.filteredColumnNamesInEdgeNewSelection; + + const findEdge = (collection: EdgeType[], label: string) => + collection.find(({ name }) => name === label); + + const findVertex = (collection: VertexType[], label: string) => + collection.find(({ name }) => name === label); + + const selectedEdge = findEdge(dataImportRootStore.edgeTypes, edgeMap.label); + + let selectedSourceVertex: VertexType | undefined; + let selectedTargetVertex: VertexType | undefined; + + if (!isUndefined(selectedEdge)) { + selectedSourceVertex = findVertex( + dataImportRootStore.vertexTypes, + selectedEdge.source_label + ); + selectedTargetVertex = findVertex( + dataImportRootStore.vertexTypes, + selectedEdge.target_label + ); + } + + const isStrategyAutomatic = + selectedSourceVertex?.id_strategy === 'AUTOMATIC' || + selectedTargetVertex?.id_strategy === 'AUTOMATIC'; + + const handleExpand = () => { + dataMapStore.switchExpand('type', !dataMapStore.isExpandTypeConfig); + }; + + const handleExpandAdvance = () => { + switchExpandAdvance(!isExpandAdvance); + }; + + const wrapperName = classnames({ + 'import-tasks-data-map-config-card': !Boolean(checkOrEdit), + 'import-tasks-data-map-config-view': Boolean(checkOrEdit) + }); + + const expandAdvanceClassName = classnames({ + 'import-tasks-step-content-header-expand': isExpandAdvance, + 'import-tasks-step-content-header-collpase': !isExpandAdvance + }); + + const expandAddMapClassName = classnames({ + 'import-tasks-step-content-header-expand': isAddMapping, + 'import-tasks-step-content-header-collpase': !isAddMapping + }); + + const addMappingManipulationClassName = classnames({ + 'import-tasks-manipulation': true, + 'import-tasks-manipulation-disabled': + size(filteredColumnNamesInSelection) === 0 || isStrategyAutomatic + }); + + const addNullValueClassName = classnames({ + 'import-tasks-manipulation': true, + 'import-tasks-manipulation-disabled': edgeMap.null_values.customized.includes( + '' + ) + }); + + const addPropertyMapClassName = classnames({ + 'import-tasks-manipulation': true, + 'import-tasks-manipulation-disabled': + !dataMapStore.allowAddPropertyMapping('edge') || isStrategyAutomatic + }); + + return ( +
    + {Boolean(checkOrEdit) ? ( +
    + {t('data-configs.type.basic-settings')} +
    + ) : ( +
    + {t('data-configs.type.edge.title')} + collpaseOrExpand +
    + )} +
    + + {t('data-configs.type.edge.type')}: + + {isCheck ? ( + {dataMapStore.editedEdgeMap!.label} + ) : ( + + )} +
    + + {!isUndefined(selectedSourceVertex) && ( +
    + + {t('data-configs.type.edge.source-ID-strategy')}: + + + {t('data-configs.type.hint.lack-support-for-automatic')} + + } + > + {t( + `data-configs.type.ID-strategy.${selectedSourceVertex?.id_strategy}` + )} + {selectedSourceVertex?.id_strategy === 'PRIMARY_KEY' && + `-${selectedSourceVertex?.primary_keys.join(',')}`} + +
    + )} + {edgeMap.source_fields.map((idField, fieldIndex) => { + return ( +
    + + {t('data-configs.type.edge.ID-column') + + (selectedSourceVertex?.id_strategy === 'PRIMARY_KEY' + ? fieldIndex + 1 + : '')} + : + + {isCheck ? ( + {idField} + ) : ( + + )} +
    + ); + })} + + {!isUndefined(selectedTargetVertex) && ( +
    + + {t('data-configs.type.edge.target-ID-strategy')}: + + + {t('data-configs.type.hint.lack-support-for-automatic')} + + } + > + {t( + `data-configs.type.ID-strategy.${selectedTargetVertex?.id_strategy}` + )} + {selectedTargetVertex?.id_strategy === 'PRIMARY_KEY' && + `-${selectedTargetVertex?.primary_keys.join(',')}`} + +
    + )} + {edgeMap.target_fields.map((idField, fieldIndex) => { + return ( +
    + + {t('data-configs.type.edge.ID-column') + + (selectedTargetVertex?.id_strategy === 'PRIMARY_KEY' + ? fieldIndex + 1 + : '')} + : + + {isCheck ? ( + {idField} + ) : ( + + )} +
    + ); + })} + +
    + + {t('data-configs.type.edge.map-settings')}: + +
    + {isCheck && + isEmpty(dataMapStore.editedEdgeMap?.field_mapping) && + '-'} + + {((Boolean(checkOrEdit) === false && + !isEmpty(dataMapStore.newEdgeType.field_mapping)) || + (Boolean(checkOrEdit) !== false && + !isEmpty(dataMapStore.editedEdgeMap!.field_mapping))) && ( +
    +
    + {t('data-configs.type.edge.add-map.name')} +
    +
    + {t('data-configs.type.edge.add-map.sample')} +
    +
    + {t('data-configs.type.edge.add-map.property')} +
    +
    + {!isCheck && ( + { + isEdit + ? dataMapStore.toggleEdgeSelectAllFieldMapping( + 'edit', + false, + selectedEdge + ) + : dataMapStore.toggleEdgeSelectAllFieldMapping( + 'new', + false, + selectedEdge + ); + }} + > + {t('data-configs.type.edge.add-map.clear')} + + )} +
    +
    + )} + {edgeMap.field_mapping.map( + ({ column_name, mapped_name }, fieldIndex) => { + const param = checkOrEdit === false ? 'new' : 'edit'; + + return ( +
    +
    + {column_name} +
    +
    + { + dataMapStore.selectedFileInfo?.file_setting + .column_values[ + dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( + (name) => column_name === name + ) + ] + } +
    +
    + {isCheck ? ( + {mapped_name} + ) : ( + + )} +
    +
    + {!isCheck && ( + close { + dataMapStore.removeEdgeFieldMapping( + param, + column_name + ); + }} + /> + )} +
    +
    + ); + } + )} + + {!isCheck && ( + <> +
    { + if ( + size(filteredColumnNamesInSelection) === 0 || + isStrategyAutomatic + ) { + switchAddMapping(false); + return; + } + + switchAddMapping(!isAddMapping); + }} + > +
    + {t('data-configs.type.edge.add-map.title')} +
    + expand +
    + {isAddMapping && ( +
    +
    + + { + if (isEdit) { + const isIndeterminate = + !isEmpty( + dataMapStore.editedEdgeMap?.field_mapping + ) && + size( + dataMapStore.editedEdgeMap?.field_mapping + ) !== + size( + dataMapStore.filteredColumnNamesInEdgeEditSelection + ); + + dataMapStore.toggleEdgeSelectAllFieldMapping( + 'edit', + // if isIndeterminate is true, e.target.checked is false + isIndeterminate || e.target.checked, + selectedEdge + ); + } else { + const isIndeterminate = + !isEmpty( + dataMapStore.newEdgeType.field_mapping + ) && + size(dataMapStore.newEdgeType.field_mapping) !== + size( + dataMapStore.filteredColumnNamesInEdgeNewSelection + ); + + dataMapStore.toggleEdgeSelectAllFieldMapping( + 'new', + isIndeterminate || e.target.checked, + selectedEdge + ); + } + }} + > + {t('data-configs.type.edge.select-all')} + + +
    + {filteredColumnNamesInSelection.map((name) => { + const param = isEdit ? 'edit' : 'new'; + + let combinedText = name; + let currentColumnValue = dataMapStore.selectedFileInfo + ?.file_setting.column_values[ + dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( + (columnName) => name === columnName + ) + ] as string; + combinedText += `(${currentColumnValue})`; + + if (getUnicodeLength(combinedText) > 35) { + combinedText = combinedText.slice(0, 35) + '...'; + } + + const mappingValue = selectedEdge?.properties.find( + ({ name: propertyName }) => propertyName === name + )?.name; + + return ( +
    + + column_name === name + ) + ) + } + onChange={(e: any) => { + if (e.target.checked) { + dataMapStore.setEdgeFieldMappingKey( + param, + name, + mappingValue + ); + } else { + dataMapStore.removeEdgeFieldMapping( + param, + name + ); + } + }} + > + {combinedText} + + +
    + ); + })} +
    + )} + + )} +
    +
    + +
    + {t('data-configs.type.edge.advance.title')} + {!isCheck && ( + collpaseOrExpand + )} +
    + {(isExpandAdvance || isCheck) && ( + <> +
    + + {t('data-configs.type.edge.advance.nullable-list.title')}: + + {isCheck ? ( + + {dataMapStore + .editedEdgeMap!.null_values.checked.filter( + (value) => value !== 'null' + ) + .map((value) => + value === '' + ? t('addition.common.null-value') + : value === 'NULL' + ? 'NULL/null' + : value + ) + .concat(dataMapStore.editedEdgeMap!.null_values.customized) + .join(',')} + + ) : ( + <> +
    + { + isEdit + ? dataMapStore.editCheckedNullValues( + 'edit', + 'edge', + checkedList + ) + : dataMapStore.editCheckedNullValues( + 'new', + 'edge', + checkedList + ); + }} + value={ + isEdit + ? dataMapStore.editedEdgeMap!.null_values.checked + : dataMapStore.newEdgeType.null_values.checked + } + > + NULL/null + + {t( + 'data-configs.type.edge.advance.nullable-list.empty' + )} + + +
    + { + dataMapStore.toggleCustomNullValue( + isEdit ? 'edit' : 'new', + 'edge', + e.target.checked + ); + + if (e.target.checked) { + dataMapStore.addValidateValueMappingOption( + 'null_values' + ); + } else { + dataMapStore.resetValidateValueMapping( + 'null_values' + ); + } + }} + > + {t( + 'data-configs.type.edge.advance.nullable-list.custom' + )} + +
    +
    +
    + {isEdit ? ( + <> + {dataMapStore.editedEdgeMap?.null_values.customized.map( + (nullValue, nullValueIndex) => ( +
    + { + dataMapStore.editCustomNullValues( + 'edit', + 'edge', + e.value, + nullValueIndex + ); + + dataMapStore.validateValueMapping( + 'edge', + 'edit', + 'null_values', + nullValueIndex + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore.validateAdvanceConfigErrorMessage + .null_values[nullValueIndex] + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'edge', + 'edit', + 'null_values', + nullValueIndex + ); + } + }} + /> +
    + ) + )} + {!isEmpty( + dataMapStore.editedEdgeMap?.null_values.customized + ) && ( +
    + { + const extraNullValues = + dataMapStore.editedEdgeMap?.null_values + .customized; + + if (!extraNullValues?.includes('')) { + dataMapStore.addCustomNullValues( + 'edit', + 'edge' + ); + } + }} + > + {t('data-configs.manipulations.add')} + +
    + )} + + ) : ( + <> + {dataMapStore.newEdgeType.null_values.customized.map( + (nullValue, nullValueIndex) => ( +
    + { + dataMapStore.editCustomNullValues( + 'new', + 'edge', + e.value, + nullValueIndex + ); + + dataMapStore.validateValueMapping( + 'edge', + 'new', + 'null_values', + nullValueIndex + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore.validateAdvanceConfigErrorMessage + .null_values[nullValueIndex] + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'edge', + 'new', + 'null_values', + nullValueIndex + ); + } + }} + /> +
    + ) + )} + {!isEmpty( + dataMapStore.newEdgeType.null_values.customized + ) && ( +
    + { + const extraNullValues = + dataMapStore.newEdgeType?.null_values + .customized; + + if (!extraNullValues.includes('')) { + dataMapStore.addCustomNullValues( + 'new', + 'edge' + ); + } + }} + > + {t('data-configs.manipulations.add')} + +
    + )} + + )} +
    + + )} +
    + +
    + + {t('data-configs.type.edge.advance.map-property-value.title')}: + + {!isCheck && + (isEdit + ? isEmpty(dataMapStore.editedEdgeMap?.value_mapping) + : isEmpty(dataMapStore.newEdgeType.value_mapping)) && ( +
    { + if (isStrategyAutomatic) { + return; + } + + isEdit + ? dataMapStore.addEdgeValueMapping('edit') + : dataMapStore.addEdgeValueMapping('new'); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings' + ); + }} + > + {t( + 'data-configs.type.edge.advance.map-property-value.add-value' + )} +
    + )} + + {isCheck && ( +
    + {isEmpty(dataMapStore.editedEdgeMap?.value_mapping) + ? '-' + : dataMapStore.editedEdgeMap?.value_mapping.map( + ({ column_name, values }, valueMapIndex) => ( +
    +
    + + {t( + 'data-configs.type.edge.advance.map-property-value.fields.property' + )} + {valueMapIndex + 1}: + + {column_name} +
    + {values.map(({ column_value, mapped_value }) => ( +
    + + {t( + 'data-configs.type.edge.advance.map-property-value.fields.value-map' + )} + + {column_value} + map + {mapped_value} +
    + ))} +
    + ) + )} +
    + )} +
    + + {/* property value mapping form */} + {!isCheck && + (!Boolean(checkOrEdit) + ? dataMapStore.newEdgeType.value_mapping.map( + ({ column_name, values }, valueMapIndex) => ( +
    +
    + + {t( + 'data-configs.type.edge.advance.map-property-value.fields.property' + )} + {valueMapIndex + 1}: + + + { + dataMapStore.removeEdgeValueMapping( + 'new', + valueMapIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'edge', + 'new', + 'value_mappings', + valueMapIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + +
    +
    + + {t( + 'data-configs.type.edge.advance.map-property-value.fields.value-map' + )} + : + +
    + {values.map( + ({ column_value, mapped_value }, valueIndex) => ( +
    + { + dataMapStore.editEdgeValueMappingColumnValueName( + 'new', + 'column_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'edge', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].column_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'edge', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + } + }} + /> + map + { + dataMapStore.editEdgeValueMappingColumnValueName( + 'new', + 'mapped_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'edge', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].mapped_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'edge', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + } + }} + /> + {values.length > 1 && ( + { + dataMapStore.removeEdgeValueMappingValue( + 'new', + valueMapIndex, + valueIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'edge', + 'new', + 'value_mappings_value', + valueMapIndex, + valueIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + + )} +
    + ) + )} +
    +
    + { + if ( + !dataMapStore.allowAddPropertyValueMapping( + 'edge', + valueMapIndex + ) + ) { + return; + } + + dataMapStore.addEdgeValueMappingValue( + 'new', + valueMapIndex + ); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings_value', + valueMapIndex + ); + }} + > + {t( + 'data-configs.type.edge.advance.map-property-value.fields.add-value-map' + )} + +
    +
    +
    +
    +
    + ) + ) + : dataMapStore.editedEdgeMap?.value_mapping.map( + ({ column_name, values }, valueMapIndex) => ( +
    +
    + + {t( + 'data-configs.type.edge.advance.map-property-value.fields.property' + )} + {valueMapIndex + 1}: + + + { + dataMapStore.removeEdgeValueMapping( + 'edit', + valueMapIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'edge', + 'edit', + 'value_mappings', + valueMapIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + +
    +
    + + {t( + 'data-configs.type.edge.advance.map-property-value.fields.value-map' + )} + : + +
    + {values.map( + ({ column_value, mapped_value }, valueIndex) => ( +
    + { + dataMapStore.editEdgeValueMappingColumnValueName( + 'edit', + 'column_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'edge', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].column_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'edge', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + } + }} + /> + map + { + dataMapStore.editEdgeValueMappingColumnValueName( + 'edit', + 'mapped_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'edge', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].mapped_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'edge', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + } + }} + /> + {values.length > 1 && ( + { + dataMapStore.removeEdgeValueMappingValue( + 'edit', + valueMapIndex, + valueIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'edge', + 'edit', + 'value_mappings_value', + valueMapIndex, + valueIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + + )} +
    + ) + )} +
    +
    + { + if ( + !dataMapStore.allowAddPropertyValueMapping( + 'edge', + valueMapIndex + ) + ) { + return; + } + + dataMapStore.addEdgeValueMappingValue( + 'edit', + valueMapIndex + ); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings_value', + valueMapIndex + ); + }} + > + {t( + 'data-configs.type.edge.advance.map-property-value.fields.add-value-map' + )} + +
    +
    +
    +
    +
    + ) + ))} + + {!isCheck && + (isEdit + ? !isEmpty(dataMapStore.editedEdgeMap?.value_mapping) + : !isEmpty(dataMapStore.newEdgeType.value_mapping)) && ( +
    { + if (!dataMapStore.allowAddPropertyMapping('edge')) { + return; + } + + isEdit + ? dataMapStore.addEdgeValueMapping('edit') + : dataMapStore.addEdgeValueMapping('new'); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings' + ); + }} + > + {t( + 'data-configs.type.edge.advance.map-property-value.add-value' + )} +
    + )} + + )} + + {!isCheck && ( + + isEmpty(mapped_name) + ) || + !dataMapStore.allowAddPropertyMapping('edge') || + !dataMapStore.isValidateSave + } + onCreate={async () => { + dataMapStore.switchAddNewTypeConfig(false); + dataMapStore.switchEditTypeConfig(false); + + isEdit + ? await dataMapStore.updateEdgeMap( + 'upgrade', + dataMapStore.selectedFileId + ) + : await dataMapStore.updateEdgeMap( + 'add', + dataMapStore.selectedFileId + ); + + if (dataMapStore.requestStatus.updateEdgeMap === 'failed') { + Message.error({ + content: dataMapStore.errorInfo.updateEdgeMap.message, + size: 'medium', + showCloseIcon: false + }); + } + + onCancelCreateEdge(); + dataMapStore.resetNewMap('edge'); + }} + onCancel={() => { + dataMapStore.switchAddNewTypeConfig(false); + dataMapStore.switchEditTypeConfig(false); + + if (!isEdit) { + dataMapStore.resetNewMap('edge'); + } else { + dataMapStore.resetEditMapping('edge'); + } + + onCancelCreateEdge(); + dataMapStore.resetNewMap('edge'); + dataMapStore.resetValidateValueMapping('all'); + }} + /> + )} +
    + ); + } +); + +export default EdgeMap; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx new file mode 100644 index 000000000..d8f9cc00f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/FileConfigs.tsx @@ -0,0 +1,395 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { range, rangeRight } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Radio, Switch, Input, Select, Button, Message } from 'hubble-ui'; + +import { DataImportRootStoreContext } from '../../../../../stores'; + +import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; + +const separators = [',', ';', '\\t', ' ']; +const charsets = ['UTF-8', 'GBK', 'ISO-8859-1', 'US-ASCII']; +const dateFormat = [ + 'yyyy-MM-dd', + 'yyyy-MM-dd HH:mm:ss', + 'yyyy-MM-dd HH:mm:ss.SSS' +]; + +const timezones = rangeRight(1, 13) + .map((num) => `GMT-${num}`) + .concat(['GMT']) + .concat(range(1, 13).map((num) => `GMT+${num}`)); + +const styles = { + smallGap: { + marginBottom: 18 + }, + mediumGap: { + marginBottom: 23 + } +}; + +const FileConfigs: React.FC = observer(() => { + const { dataMapStore, serverDataImportStore } = useContext( + DataImportRootStoreContext + ); + const { t } = useTranslation(); + + const expandClassName = classnames({ + 'import-tasks-step-content-header-expand': dataMapStore.isExpandFileConfig, + 'import-tasks-step-content-header-collpase': !dataMapStore.isExpandFileConfig + }); + + const handleExpand = () => { + dataMapStore.switchExpand('file', !dataMapStore.isExpandFileConfig); + }; + + return ( + dataMapStore.selectedFileInfo && ( +
    +
    + {t('data-configs.file.title')} + collpaseOrExpand +
    + {dataMapStore.isExpandFileConfig && ( + <> +
    + + {t('data-configs.file.include-header')}: + + { + dataMapStore.setFileConfig('has_header', checked); + }} + /> +
    +
    + + {t('data-configs.file.delimiter.title')}: + +
    + ) => { + if (e.target.value === 'custom') { + dataMapStore.setFileConfig('delimiter', ''); + } else { + dataMapStore.setFileConfig('delimiter', e.target.value); + // reset validate error message of delimiter + dataMapStore.validateFileInfo('delimiter'); + } + }} + > + + {t('data-configs.file.delimiter.comma')} + + + {t('data-configs.file.delimiter.semicolon')} + + + {t('data-configs.file.delimiter.tab')} + + + {t('data-configs.file.delimiter.space')} + + + {t('data-configs.file.delimiter.custom')} + + +
    + {!separators.includes( + dataMapStore.selectedFileInfo!.file_setting.delimiter + ) && ( +
    + { + dataMapStore.setFileConfig('delimiter', e.value); + dataMapStore.validateFileInfo('delimiter'); + }} + errorMessage={ + dataMapStore.validateFileInfoErrorMessage.delimiter + } + errorLocation="layer" + originInputProps={{ + onBlur: () => { + dataMapStore.validateFileInfo('delimiter'); + } + }} + /> +
    + )} +
    +
    + + {t('data-configs.file.code-type.title')}: + +
    + ) => { + if (e.target.value === 'custom') { + dataMapStore.setFileConfig('charset', ''); + } else { + dataMapStore.setFileConfig('charset', e.target.value); + dataMapStore.validateFileInfo('charset'); + } + }} + > + + {t('data-configs.file.code-type.UTF-8')} + + + {t('data-configs.file.code-type.GBK')} + + + {t('data-configs.file.code-type.ISO-8859-1')} + + + {t('data-configs.file.code-type.US-ASCII')} + + + {t('data-configs.file.code-type.custom')} + + +
    + {!charsets.includes( + dataMapStore.selectedFileInfo!.file_setting.charset + ) && ( +
    + { + dataMapStore.setFileConfig('charset', e.value); + dataMapStore.validateFileInfo('charset'); + }} + errorMessage={ + dataMapStore.validateFileInfoErrorMessage.charset + } + errorLocation="layer" + originInputProps={{ + onBlur: () => { + dataMapStore.validateFileInfo('charset'); + } + }} + /> +
    + )} +
    +
    + + {t('data-configs.file.date-type.title')}: + +
    + ) => { + if (e.target.value === 'custom') { + dataMapStore.setFileConfig('date_format', ''); + } else { + dataMapStore.setFileConfig('date_format', e.target.value); + dataMapStore.validateFileInfo('date_format'); + } + }} + > + yyyy-MM-dd + yyyy-MM-dd HH:MM:SS + + yyyy-MM-dd HH:mm:ss.SSS + + + {t('data-configs.file.code-type.custom')} + + + {!dateFormat.includes( + dataMapStore.selectedFileInfo!.file_setting.date_format + ) && ( +
    + { + dataMapStore.setFileConfig('date_format', e.value); + dataMapStore.validateFileInfo('date_format'); + }} + errorMessage={ + dataMapStore.validateFileInfoErrorMessage.date_format + } + errorLocation="layer" + originInputProps={{ + onBlur: () => { + dataMapStore.validateFileInfo('date_format'); + } + }} + /> +
    + )} +
    +
    +
    + + {t('data-configs.file.skipped-line')}: + + { + dataMapStore.setFileConfig('skipped_line', e.value); + dataMapStore.validateFileInfo('skipped_line'); + }} + errorLocation="layer" + errorMessage={ + dataMapStore.validateFileInfoErrorMessage.skipped_line + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateFileInfo('skipped_line'); + } + }} + /> +
    +
    + + {t('data-configs.file.timezone')}: + + +
    + {!dataMapStore.readOnly && !dataMapStore.lock && ( +
    + + +
    + )} + + )} +
    + ) + ); +}); + +export default FileConfigs; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx new file mode 100644 index 000000000..61cb5c877 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigManipulations.tsx @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { observer } from 'mobx-react'; +import { useTranslation } from 'react-i18next'; +import { Button } from 'hubble-ui'; + +interface TypeConfigManipulationsProps { + type: 'vertex' | 'edge'; + status: 'add' | 'edit'; + disableSave?: boolean; + onCreate: () => void; + onCancel: () => void; +} + +const TypeConfigManipulations: React.FC = observer( + ({ type, status, onCreate, onCancel, disableSave = false }) => { + const { t } = useTranslation(); + + return ( +
    + +
    + + +
    +
    + ); + } +); + +export default TypeConfigManipulations; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx new file mode 100644 index 000000000..f50a71637 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeConfigs.tsx @@ -0,0 +1,273 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useState, useEffect, useRef } from 'react'; +import { observer } from 'mobx-react'; +import { isEmpty, size } from 'lodash-es'; +import { useLocation } from 'wouter'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Button } from 'hubble-ui'; + +import { DataImportRootStoreContext } from '../../../../../stores'; + +import { Tooltip } from '../../../../common'; +import TypeInfo from './TypeInfo'; +import VertexMap from './VertexMap'; +import EdgeMap from './EdgeMap'; + +import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; + +const TypeConfigs: React.FC = observer(() => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const [isExpand, switchExpand] = useState(true); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [isCreateVertexMap, switchCreateVertexMap] = useState(false); + const [isCreateEdgeMap, switchCreateEdgeMap] = useState(false); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const shouldRevealInitalButtons = + !isCreateVertexMap && + !isCreateEdgeMap && + isEmpty(dataMapStore.selectedFileInfo?.vertex_mappings) && + isEmpty(dataMapStore.selectedFileInfo?.edge_mappings); + + const invalidFileMaps = !dataMapStore.isIrregularProcess + ? dataMapStore.fileMapInfos.filter( + ({ name, vertex_mappings, edge_mappings }) => + dataImportRootStore.successFileUploadTaskNames.includes(name) && + isEmpty(vertex_mappings) && + isEmpty(edge_mappings) + ) + : dataMapStore.fileMapInfos.filter( + ({ vertex_mappings, edge_mappings }) => + isEmpty(vertex_mappings) && isEmpty(edge_mappings) + ); + + const expandClassName = classnames({ + 'import-tasks-step-content-header-expand': isExpand, + 'import-tasks-step-content-header-collpase': !isExpand + }); + + const nextButtonTooltipClassName = classnames({ + 'import-tasks-data-map-tooltip': true, + 'no-display': size(invalidFileMaps) === 0 + }); + + const handleExpand = () => { + switchExpand(!isExpand); + }; + + const handleCreate = (type: 'vertex' | 'edge', flag: boolean) => () => { + dataMapStore.switchExpand('file', false); + // Adding a new type config counts editing as well + dataMapStore.switchAddNewTypeConfig(flag); + + if (type === 'vertex') { + switchCreateVertexMap(flag); + } else { + switchCreateEdgeMap(flag); + } + }; + + useEffect(() => { + // close dashboard when user selects another file + // since the state is not in mobx store, we have to do this for now + switchCreateVertexMap(false); + switchCreateEdgeMap(false); + switchExpand(true); + }, [dataMapStore.selectedFileId]); + + return ( +
    +
    + + {t('data-configs.type.title')} + + collpaseOrExpand + {!dataMapStore.readOnly && + !dataMapStore.lock && + !shouldRevealInitalButtons && ( + + )} +
    + {!dataMapStore.readOnly && + !dataMapStore.lock && + shouldRevealInitalButtons && ( + + )} + {isExpand && ( + <> + {isCreateVertexMap && ( + + )} + {isCreateEdgeMap && ( + + )} + {dataMapStore.selectedFileInfo?.vertex_mappings + .map((mapping, index) => ( + + )) + .reverse()} + {dataMapStore.selectedFileInfo?.edge_mappings + .map((mapping, index) => ( + + )) + .reverse()} + + )} + {!dataMapStore.readOnly && ( +
    + {!serverDataImportStore.isServerStartImport && ( + + )} + +
    + {t('data-configs.type.hint.no-vertex-or-edge-mapping')} +
    + {invalidFileMaps.map(({ name }) => ( +
    + {name} +
    + ))} + + } + > + +
    +
    + )} +
    + ); +}); + +export interface TypeConfigMapCreationsProps { + onCreateVertex: () => void; + onCreateEdge: () => void; + disabled?: boolean; +} + +const TypeConfigMapCreations: React.FC = observer( + ({ onCreateVertex, onCreateEdge, disabled = false }) => { + const { t } = useTranslation(); + + return ( +
    + + +
    + ); + } +); + +export default TypeConfigs; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx new file mode 100644 index 000000000..2274f54e6 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/TypeInfo.tsx @@ -0,0 +1,350 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useState, + useRef, + useContext, + useCallback, + useEffect +} from 'react'; +import { observer } from 'mobx-react'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Button } from 'hubble-ui'; + +import { Tooltip } from '../../../../common'; +import { DataImportRootStoreContext } from '../../../../../stores'; +import VertexMap from './VertexMap'; +import EdgeMap from './EdgeMap'; + +import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; +import { VertexType } from '../../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +export interface TypeInfoProps { + type: 'vertex' | 'edge'; + mapIndex: number; +} + +const TypeInfo: React.FC = observer(({ type, mapIndex }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [isExpand, switchExpand] = useState(false); + const [isDeletePop, switchDeletePop] = useState(false); + const [checkOrEdit, setCheckOrEdit] = useState<'check' | 'edit' | boolean>( + false + ); + const typeInfoWrapperRef = useRef(null); + const manipulationAreaRef = useRef(null); + const editButtonRef = useRef(null); + const deleteButtonRef = useRef(null); + const deleteWrapperRef = useRef(null); + const { t } = useTranslation(); + + let vertexInfo: VertexType | undefined; + let sourceVertexInfo: VertexType | undefined; + let targetVertexInfo: VertexType | undefined; + + if (type === 'vertex') { + vertexInfo = dataImportRootStore.vertexTypes.find( + ({ name }) => + name === dataMapStore.selectedFileInfo?.vertex_mappings[mapIndex].label + ); + } else { + const edgeInfo = dataImportRootStore.edgeTypes.find( + ({ name }) => + name === dataMapStore.selectedFileInfo!.edge_mappings[mapIndex].label + ); + + sourceVertexInfo = dataImportRootStore.vertexTypes.find( + ({ name }) => name === edgeInfo?.source_label + ); + + targetVertexInfo = dataImportRootStore.vertexTypes.find( + ({ name }) => name === edgeInfo?.target_label + ); + } + + const handleImgClickExpand = () => { + switchExpand(!isExpand); + + if (Boolean(checkOrEdit)) { + if (checkOrEdit === 'edit') { + dataMapStore.switchEditTypeConfig(false); + } + + setCheckOrEdit(false); + } else { + if (type === 'vertex') { + dataMapStore.syncEditMap('vertex', mapIndex); + } else { + dataMapStore.syncEditMap('edge', mapIndex); + } + + setCheckOrEdit('check'); + } + }; + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + if ( + isDeletePop && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + switchDeletePop(false); + } + }, + [isDeletePop] + ); + + const handleTypeInfoExpandClick = useCallback( + (e: MouseEvent) => { + if ( + manipulationAreaRef.current && + !manipulationAreaRef.current?.contains(e.target as Element) + ) { + handleImgClickExpand(); + } + }, + [handleImgClickExpand] + ); + + const expandClassName = classnames({ + expand: isExpand, + collpase: !isExpand + }); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + typeInfoWrapperRef.current!.addEventListener( + 'click', + handleTypeInfoExpandClick, + false + ); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + typeInfoWrapperRef.current!.removeEventListener( + 'click', + handleTypeInfoExpandClick, + false + ); + }; + }, [handleOutSideClick, handleTypeInfoExpandClick]); + + return ( +
    +
    +
    +
    + collpaseOrExpand +
    +
    + + {t('data-configs.type.info.type')} + + + {type === 'vertex' + ? t('data-configs.type.vertex.type') + : t('data-configs.type.edge.type')} + +
    +
    +
    + + {t('data-configs.type.info.name')} + + + {type === 'vertex' + ? dataMapStore.selectedFileInfo?.vertex_mappings[mapIndex].label + : dataMapStore.selectedFileInfo?.edge_mappings[mapIndex].label} + +
    +
    + + {t('data-configs.type.info.ID-strategy')} + + + {type === 'vertex' + ? t(`data-configs.type.ID-strategy.${vertexInfo?.id_strategy}`) + + (vertexInfo?.id_strategy === 'PRIMARY_KEY' + ? '-' + vertexInfo?.primary_keys.join(',') + : '') + : `${t('addition.common.source')}:${ + t( + `data-configs.type.ID-strategy.${sourceVertexInfo?.id_strategy}` + ) + + (sourceVertexInfo?.id_strategy === 'PRIMARY_KEY' + ? '-' + sourceVertexInfo?.primary_keys.join(',') + : '') + } ${t('addition.common.target')}:${ + t( + `data-configs.type.ID-strategy.${targetVertexInfo?.id_strategy}` + ) + + (targetVertexInfo?.id_strategy === 'PRIMARY_KEY' + ? '-' + targetVertexInfo?.primary_keys.join(',') + : '') + }`} + +
    +
    + {!dataMapStore.readOnly && !dataMapStore.lock && ( + <> + + +

    + {t('data-configs.manipulations.hints.delete-confirm')} +

    +

    {t('data-configs.manipulations.hints.warning')}

    +
    + + +
    +
    + } + childrenProps={{ + onClick() { + switchDeletePop(true); + } + }} + > + + + + )} +
    +
    + {isExpand && Boolean(checkOrEdit) && type === 'vertex' && ( + { + setCheckOrEdit(false); + switchExpand(false); + }} + vertexMapIndex={mapIndex} + /> + )} + {isExpand && Boolean(checkOrEdit) && type === 'edge' && ( + { + setCheckOrEdit(false); + switchExpand(false); + }} + edgeMapIndex={mapIndex} + /> + )} + + ); +}); + +export default TypeInfo; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx new file mode 100644 index 000000000..b9e2f283e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/VertexMap.tsx @@ -0,0 +1,1628 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useCallback, + useRef, + useEffect +} from 'react'; +import { observer } from 'mobx-react'; +import { isUndefined, isEmpty, size, cloneDeep } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Input, Select, Checkbox, Message } from 'hubble-ui'; + +import { Tooltip } from '../../../../common'; +import TypeConfigManipulations from './TypeConfigManipulations'; +import { DataImportRootStoreContext } from '../../../../../stores'; +import { VertexType } from '../../../../../stores/types/GraphManagementStore/metadataConfigsStore'; +import { getUnicodeLength } from '../../../../../utils'; + +import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; +import BlueArrowIcon from '../../../../../assets/imgs/ic_arrow_blue.svg'; +import CloseIcon from '../../../../../assets/imgs/ic_close_16.svg'; +import MapIcon from '../../../../../assets/imgs/ic_yingshe_16.svg'; + +export interface VertexMapProps { + checkOrEdit: 'check' | 'edit' | boolean; + onCancelCreateVertex: () => void; + vertexMapIndex?: number; +} + +const VertexMap: React.FC = observer( + ({ checkOrEdit, onCancelCreateVertex, vertexMapIndex }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore } = dataImportRootStore; + const [isAddMapping, switchAddMapping] = useState(false); + const [isExpandAdvance, switchExpandAdvance] = useState(false); + const addMappingWrapperRef = useRef(null); + const { t } = useTranslation(); + + const isCheck = checkOrEdit === 'check'; + const isEdit = checkOrEdit === 'edit'; + const vertexMap = + checkOrEdit !== false + ? dataMapStore.editedVertexMap! + : dataMapStore.newVertexType; + const filteredColumnNamesInSelection = + checkOrEdit !== false + ? dataMapStore.filteredColumnNamesInVertexEditSelection + : dataMapStore.filteredColumnNamesInVertexNewSelection; + + const findVertex = (collection: VertexType[], label: string) => + collection.find(({ name }) => name === label); + + const selectedVertex = findVertex( + dataImportRootStore.vertexTypes, + vertexMap.label + ); + + const isStrategyAutomatic = selectedVertex?.id_strategy === 'AUTOMATIC'; + + const handleAdvanceExpand = () => { + switchExpandAdvance(!isExpandAdvance); + }; + + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // if clicked element is not on dropdown, collpase it + if ( + isAddMapping && + addMappingWrapperRef.current && + !addMappingWrapperRef.current.contains(e.target as Element) + ) { + switchAddMapping(false); + } + }, + [isAddMapping] + ); + + const wrapperName = classnames({ + 'import-tasks-data-map-config-card': !Boolean(checkOrEdit), + 'import-tasks-data-map-config-view': Boolean(checkOrEdit) + }); + + const expandAdvanceClassName = classnames({ + 'import-tasks-step-content-header-expand': isExpandAdvance, + 'import-tasks-step-content-header-collpase': !isExpandAdvance + }); + + const expandAddMapClassName = classnames({ + 'import-tasks-step-content-header-expand': isAddMapping, + 'import-tasks-step-content-header-collpase': !isAddMapping + }); + + const addMappingManipulationClassName = classnames({ + 'import-tasks-manipulation': true, + 'import-tasks-manipulation-disabled': + size(filteredColumnNamesInSelection) === 0 || isStrategyAutomatic + }); + + const addNullValueClassName = classnames({ + 'import-tasks-manipulation': true, + 'import-tasks-manipulation-disabled': isEdit + ? dataMapStore.editedVertexMap!.null_values.customized.includes('') + : dataMapStore.newVertexType.null_values.customized.includes('') + }); + + const addPropertyMapClassName = classnames({ + 'import-tasks-manipulation': true, + 'import-tasks-manipulation-disabled': + !dataMapStore.allowAddPropertyMapping('vertex') || isStrategyAutomatic + }); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( +
    + {Boolean(checkOrEdit) ? ( +
    + {t('data-configs.type.basic-settings')} +
    + ) : ( +
    + {t('data-configs.type.vertex.title')} + collpaseOrExpand +
    + )} +
    + + {t('data-configs.type.vertex.type')}: + + {isCheck ? ( + {dataMapStore.editedVertexMap!.label} + ) : ( + + )} +
    + {!isUndefined(selectedVertex) && ( +
    + + {t('data-configs.type.vertex.ID-strategy')}: + + + {t('data-configs.type.hint.lack-support-for-automatic')} + + } + > + {t(`data-configs.type.ID-strategy.${selectedVertex.id_strategy}`)} + {selectedVertex.id_strategy === 'PRIMARY_KEY' && + `-${selectedVertex.primary_keys.join(',')}`} + +
    + )} + {vertexMap.id_fields.map((idField, fieldIndex) => { + return ( +
    + + {t('data-configs.type.vertex.ID-column') + + (selectedVertex?.id_strategy === 'PRIMARY_KEY' + ? fieldIndex + 1 + : '')} + : + + {isCheck ? ( + {idField} + ) : ( + + )} +
    + ); + })} + +
    + + {t('data-configs.type.vertex.map-settings')}: + +
    + {isCheck && + isEmpty(dataMapStore.editedVertexMap?.field_mapping) && + '-'} + + {((Boolean(checkOrEdit) === false && + !isEmpty(dataMapStore.newVertexType.field_mapping)) || + (Boolean(checkOrEdit) !== false && + !isEmpty(dataMapStore.editedVertexMap!.field_mapping))) && ( +
    +
    + {t('data-configs.type.vertex.add-map.name')} +
    +
    + {t('data-configs.type.vertex.add-map.sample')} +
    +
    + {t('data-configs.type.vertex.add-map.property')} +
    +
    + {!isCheck && ( + { + isEdit + ? dataMapStore.toggleVertexSelectAllFieldMapping( + 'edit', + false, + selectedVertex + ) + : dataMapStore.toggleVertexSelectAllFieldMapping( + 'new', + false, + selectedVertex + ); + }} + > + {t('data-configs.type.vertex.add-map.clear')} + + )} +
    +
    + )} + + {vertexMap.field_mapping.map( + ({ column_name, mapped_name }, fieldIndex) => { + const param = checkOrEdit === false ? 'new' : 'edit'; + + return ( +
    +
    + {column_name} +
    +
    + { + dataMapStore.selectedFileInfo?.file_setting + .column_values[ + dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( + (name) => column_name === name + ) + ] + } +
    +
    + {isCheck ? ( + {mapped_name} + ) : ( + + )} +
    +
    + {!isCheck && ( + close { + dataMapStore.removeVertexFieldMapping( + param, + column_name + ); + }} + /> + )} +
    +
    + ); + } + )} + + {!isCheck && ( + <> +
    { + if ( + size(filteredColumnNamesInSelection) === 0 || + isStrategyAutomatic + ) { + switchAddMapping(false); + return; + } + + switchAddMapping(!isAddMapping); + }} + > +
    + {t('data-configs.type.vertex.add-map.title')} +
    + expand +
    + {isAddMapping && ( +
    +
    + + { + if (isEdit) { + const isIndeterminate = + !isEmpty( + dataMapStore.editedVertexMap?.field_mapping + ) && + size( + dataMapStore.editedVertexMap?.field_mapping + ) !== + size( + dataMapStore.filteredColumnNamesInVertexEditSelection + ); + + dataMapStore.toggleVertexSelectAllFieldMapping( + 'edit', + // if isIndeterminate is true, e.target.checked is false + isIndeterminate || e.target.checked, + selectedVertex + ); + } else { + const isIndeterminate = + !isEmpty( + dataMapStore.newVertexType.field_mapping + ) && + size( + dataMapStore.newVertexType.field_mapping + ) !== + size( + dataMapStore.filteredColumnNamesInVertexNewSelection + ); + + dataMapStore.toggleVertexSelectAllFieldMapping( + 'new', + isIndeterminate || e.target.checked, + selectedVertex + ); + } + }} + > + {t('data-configs.type.vertex.select-all')} + + +
    + {dataMapStore.selectedFileInfo?.file_setting.column_names + .filter((name) => !vertexMap.id_fields.includes(name)) + .map((name) => { + let combinedText = name; + let currentColumnValue = dataMapStore.selectedFileInfo + ?.file_setting.column_values[ + dataMapStore.selectedFileInfo?.file_setting.column_names.findIndex( + (columnName) => name === columnName + ) + ] as string; + combinedText += `(${currentColumnValue})`; + + if (getUnicodeLength(combinedText) > 35) { + combinedText = combinedText.slice(0, 35) + '...'; + } + + const mappingValue = selectedVertex?.properties.find( + ({ name: propertyName }) => propertyName === name + )?.name; + + return ( +
    + + column_name === name + ) + ) + } + onChange={(e: any) => { + if (e.target.checked) { + isEdit + ? dataMapStore.setVertexFieldMappingKey( + 'edit', + name, + mappingValue + ) + : dataMapStore.setVertexFieldMappingKey( + 'new', + name, + mappingValue + ); + } else { + isEdit + ? dataMapStore.removeVertexFieldMapping( + 'edit', + name + ) + : dataMapStore.removeVertexFieldMapping( + 'new', + name + ); + } + }} + > + {combinedText} + + +
    + ); + })} +
    + )} + + )} +
    +
    + +
    + {t('data-configs.type.vertex.advance.title')} + {!isCheck && ( + collpaseOrExpand + )} +
    + {(isExpandAdvance || isCheck) && ( + <> +
    + + {t('data-configs.type.vertex.advance.nullable-list.title')}: + + {isCheck ? ( + + {dataMapStore + .editedVertexMap!.null_values.checked.filter( + (value) => value !== 'null' + ) + .map((value) => + value === '' + ? t('addition.common.null-value') + : value === 'NULL' + ? 'NULL/null' + : value + ) + .concat( + dataMapStore.editedVertexMap!.null_values.customized + ) + .join(',')} + + ) : ( + <> +
    + { + isEdit + ? dataMapStore.editCheckedNullValues( + 'edit', + 'vertex', + checkedList + ) + : dataMapStore.editCheckedNullValues( + 'new', + 'vertex', + checkedList + ); + }} + value={ + isEdit + ? dataMapStore.editedVertexMap!.null_values.checked + : dataMapStore.newVertexType.null_values.checked + } + > + NULL/null + + {t( + 'data-configs.type.vertex.advance.nullable-list.empty' + )} + + +
    + { + dataMapStore.toggleCustomNullValue( + isEdit ? 'edit' : 'new', + 'vertex', + e.target.checked + ); + + if (e.target.checked) { + dataMapStore.addValidateValueMappingOption( + 'null_values' + ); + } else { + dataMapStore.resetValidateValueMapping( + 'null_values' + ); + } + }} + > + {t( + 'data-configs.type.vertex.advance.nullable-list.custom' + )} + +
    +
    +
    + {isEdit ? ( + <> + {dataMapStore.editedVertexMap?.null_values.customized.map( + (nullValue, nullValueIndex) => ( +
    + { + dataMapStore.editCustomNullValues( + 'edit', + 'vertex', + e.value, + nullValueIndex + ); + + dataMapStore.validateValueMapping( + 'vertex', + 'edit', + 'null_values', + nullValueIndex + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore.validateAdvanceConfigErrorMessage + .null_values[nullValueIndex] + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'vertex', + 'edit', + 'null_values', + nullValueIndex + ); + } + }} + /> +
    + ) + )} + {!isEmpty( + dataMapStore.editedVertexMap?.null_values.customized + ) && ( +
    + { + const extraNullValues = + dataMapStore.editedVertexMap?.null_values + .customized; + + if (!extraNullValues?.includes('')) { + dataMapStore.addCustomNullValues( + 'edit', + 'vertex' + ); + } + }} + > + {t('data-configs.manipulations.add')} + +
    + )} + + ) : ( + <> + {dataMapStore.newVertexType.null_values.customized.map( + (nullValue, nullValueIndex) => ( +
    + { + dataMapStore.editCustomNullValues( + 'new', + 'vertex', + e.value, + nullValueIndex + ); + + dataMapStore.validateValueMapping( + 'vertex', + 'new', + 'null_values', + nullValueIndex + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore.validateAdvanceConfigErrorMessage + .null_values[nullValueIndex] + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'vertex', + 'new', + 'null_values', + nullValueIndex + ); + } + }} + /> +
    + ) + )} + {!isEmpty( + dataMapStore.newVertexType.null_values.customized + ) && ( +
    + { + const extraNullValues = + dataMapStore.newVertexType?.null_values + .customized; + + if (!extraNullValues.includes('')) { + dataMapStore.addCustomNullValues( + 'new', + 'vertex' + ); + } + }} + > + {t('data-configs.manipulations.add')} + +
    + )} + + )} +
    + + )} +
    + +
    + + {t('data-configs.type.vertex.advance.map-property-value.title')} + : + + {!isCheck && + (isEdit + ? isEmpty(dataMapStore.editedVertexMap?.value_mapping) + : isEmpty(dataMapStore.newVertexType.value_mapping)) && ( +
    { + if (isStrategyAutomatic) { + return; + } + + isEdit + ? dataMapStore.addVertexValueMapping('edit') + : dataMapStore.addVertexValueMapping('new'); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings' + ); + }} + > + {t( + 'data-configs.type.vertex.advance.map-property-value.add-value' + )} +
    + )} + + {isCheck && ( +
    + {isEmpty(dataMapStore.editedVertexMap?.value_mapping) + ? '-' + : dataMapStore.editedVertexMap?.value_mapping.map( + ({ column_name, values }, valueMapIndex) => ( +
    +
    + + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.property' + )} + {valueMapIndex + 1}: + + {column_name} +
    + {values.map(({ column_value, mapped_value }) => ( +
    + + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.value-map' + )} + + {column_value} + map + {mapped_value} +
    + ))} +
    + ) + )} +
    + )} +
    + + {/* property value mapping form */} + {!isCheck && + (!Boolean(checkOrEdit) + ? dataMapStore.newVertexType.value_mapping.map( + ({ column_name, values }, valueMapIndex) => ( +
    +
    + + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.property' + )} + {valueMapIndex + 1}: + + + { + dataMapStore.removeVertexValueMapping( + 'new', + valueMapIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'vertex', + 'new', + 'value_mappings', + valueMapIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + +
    +
    + + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.value-map' + )} + : + +
    + {values.map( + ({ column_value, mapped_value }, valueIndex) => ( +
    + { + dataMapStore.editVertexValueMappingColumnValueName( + 'new', + 'column_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'vertex', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].column_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'vertex', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + } + }} + /> + map + { + dataMapStore.editVertexValueMappingColumnValueName( + 'new', + 'mapped_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'vertex', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].mapped_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'vertex', + 'new', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + } + }} + /> + {values.length > 1 && ( + { + dataMapStore.removeVertexValueMappingValue( + 'new', + valueMapIndex, + valueIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'vertex', + 'new', + 'value_mappings_value', + valueMapIndex, + valueIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + + )} +
    + ) + )} +
    +
    + { + if ( + !dataMapStore.allowAddPropertyValueMapping( + 'vertex', + valueMapIndex + ) + ) { + return; + } + + dataMapStore.addVertexValueMappingValue( + 'new', + valueMapIndex + ); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings_value', + valueMapIndex + ); + }} + > + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.add-value-map' + )} + +
    +
    +
    +
    +
    + ) + ) + : dataMapStore.editedVertexMap?.value_mapping.map( + ({ column_name, values }, valueMapIndex) => ( +
    +
    + + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.property' + )} + {valueMapIndex + 1}: + + + { + dataMapStore.removeVertexValueMapping( + 'edit', + valueMapIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'vertex', + 'edit', + 'value_mappings', + valueMapIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + +
    +
    + + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.value-map' + )} + : + +
    + {values.map( + ({ column_value, mapped_value }, valueIndex) => ( +
    + { + dataMapStore.editVertexValueMappingColumnValueName( + 'edit', + 'column_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'vertex', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].column_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'vertex', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'column_value', + valueIndex: valueIndex + } + ); + } + }} + /> + map + { + dataMapStore.editVertexValueMappingColumnValueName( + 'edit', + 'mapped_value', + e.value, + valueMapIndex, + valueIndex + ); + + dataMapStore.validateValueMapping( + 'vertex', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + }} + errorLocation="layer" + errorMessage={ + dataMapStore + .validateAdvanceConfigErrorMessage + .value_mapping[valueMapIndex].values[ + valueIndex + ].mapped_value + } + originInputProps={{ + onBlur: () => { + dataMapStore.validateValueMapping( + 'vertex', + 'edit', + 'value_mappings', + valueMapIndex, + { + field: 'mapped_value', + valueIndex: valueIndex + } + ); + } + }} + /> + {values.length > 1 && ( + { + dataMapStore.removeVertexValueMappingValue( + 'edit', + valueMapIndex, + valueIndex + ); + + dataMapStore.removeValidateValueMappingOption( + 'vertex', + 'edit', + 'value_mappings_value', + valueMapIndex, + valueIndex + ); + }} + > + {t('data-configs.manipulations.delete')} + + )} +
    + ) + )} +
    +
    + { + if ( + !dataMapStore.allowAddPropertyValueMapping( + 'vertex', + valueMapIndex + ) + ) { + return; + } + + dataMapStore.addVertexValueMappingValue( + 'edit', + valueMapIndex + ); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings_value', + valueMapIndex + ); + }} + > + {t( + 'data-configs.type.vertex.advance.map-property-value.fields.add-value-map' + )} + +
    +
    +
    +
    +
    + ) + ))} + + {!isCheck && + (isEdit + ? !isEmpty(dataMapStore.editedVertexMap?.value_mapping) + : !isEmpty(dataMapStore.newVertexType.value_mapping)) && ( +
    { + if (!dataMapStore.allowAddPropertyMapping('vertex')) { + return; + } + + isEdit + ? dataMapStore.addVertexValueMapping('edit') + : dataMapStore.addVertexValueMapping('new'); + + dataMapStore.addValidateValueMappingOption( + 'value_mappings' + ); + }} + > + {t( + 'data-configs.type.vertex.advance.map-property-value.add-value' + )} +
    + )} + + )} + + {!isCheck && ( + + isEmpty(mapped_name) + ) || + !dataMapStore.allowAddPropertyMapping('vertex') || + !dataMapStore.isValidateSave + } + onCreate={async () => { + dataMapStore.switchAddNewTypeConfig(false); + dataMapStore.switchEditTypeConfig(false); + + // really weird! if import task comes from import-manager + // datamapStore.fileMapInfos cannot be updated in + // though it's already re-rendered + if (dataMapStore.isIrregularProcess) { + isEdit + ? await dataMapStore.updateVertexMap( + 'upgrade', + dataMapStore.selectedFileId + ) + : await dataMapStore.updateVertexMap( + 'add', + dataMapStore.selectedFileId + ); + + dataMapStore.fetchDataMaps(); + } else { + isEdit + ? await dataMapStore.updateVertexMap( + 'upgrade', + dataMapStore.selectedFileId + ) + : await dataMapStore.updateVertexMap( + 'add', + dataMapStore.selectedFileId + ); + } + + if (dataMapStore.requestStatus.updateVertexMap === 'failed') { + Message.error({ + content: dataMapStore.errorInfo.updateVertexMap.message, + size: 'medium', + showCloseIcon: false + }); + } + + onCancelCreateVertex(); + dataMapStore.resetNewMap('vertex'); + }} + onCancel={() => { + dataMapStore.switchAddNewTypeConfig(false); + dataMapStore.switchEditTypeConfig(false); + + if (!isEdit) { + dataMapStore.resetNewMap('vertex'); + } else { + dataMapStore.resetEditMapping('vertex'); + } + + onCancelCreateVertex(); + dataMapStore.resetNewMap('vertex'); + dataMapStore.resetValidateValueMapping('all'); + }} + /> + )} +
    + ); + } +); + +export default VertexMap; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts new file mode 100644 index 000000000..44d62e9c2 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/datamap-configs/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import DataMapConfigs from './DataMapConfigs'; + +export { DataMapConfigs }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less new file mode 100644 index 000000000..ca243f647 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.less @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.job-error-logs { + width: 75vw; + position: relative; + top: 76px; + margin: 0 auto; + font-size: 14px; + + &-title { + margin-bottom: 16px; + color: #333; + line-height: 22px; + font-weight: 900; + } + + &-content-wrapper { + display: flex; + height: calc(100vh - 139px); + padding-top: 25px; + padding-right: 16px; + background-color: #fff; + } + + &-content { + margin-left: 19px; + overflow: auto; + line-height: 2; + + &-item { + display: flex; + + &:nth-child(even) { + margin-bottom: 32px; + } + } + + &-item-title { + word-break: keep-all; + } + + &-item-text { + margin-left: 6px; + } + + &-with-error-only { + margin-left: 16px; + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx new file mode 100644 index 000000000..0cb48f63c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/JobErrorLogs.tsx @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useEffect, useState } from 'react'; +import { useRoute } from 'wouter'; +import { observer } from 'mobx-react'; +import { motion } from 'framer-motion'; +import { Menu } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { ImportManagerStoreContext } from '../../../../../stores'; + +import './JobErrorLogs.less'; + +const failedReasonVariants = { + initial: { + opacity: 0, + y: -10 + }, + animate: { + opacity: 1, + y: 0, + transition: { + duration: 0.8, + ease: 'easeInOut' + } + } +}; + +const JobErrorLogs: React.FC = observer(() => { + const importManagerStore = useContext(ImportManagerStoreContext); + const { t } = useTranslation(); + const [, params] = useRoute( + '/graph-management/:id/data-import/job-error-log/:jobId' + ); + const [selectedFileName, setSelectedFileName] = useState(''); + + useEffect(() => { + const init = async () => { + await importManagerStore.fetchFailedReason( + Number(params!.id), + Number(params!.jobId) + ); + + if (importManagerStore.requestStatus.fetchFailedReason === 'success') { + setSelectedFileName(importManagerStore.failedReason[0].file_name); + } + }; + + init(); + }, [params!.id, params!.jobId]); + + return ( +
    +
    + {t('addition.message.fail-reason')} +
    + +
    + {importManagerStore.requestStatus.fetchFailedReason === 'failed' ? ( +
    + {importManagerStore.errorInfo.fetchFailedReason.message} +
    + ) : ( + <> + { + setSelectedFileName(e.key); + }} + > + {importManagerStore.failedReason.map(({ file_name }) => ( + + {file_name} + + ))} + +
    + {importManagerStore.failedReason + .find(({ file_name }) => file_name === selectedFileName) + ?.reason.split('\n') + .filter((reason) => reason !== '') + .map((text, index) => ( +
    +
    + {index % 2 === 0 + ? `${t('addition.message.fail-reason')}:` + : `${t('addition.message.fail-position')}:`} +
    +
    + {text.replace('#### INSERT ERROR:', '')} +
    +
    + ))} +
    + + )} +
    +
    +
    + ); +}); + +export default JobErrorLogs; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less new file mode 100644 index 000000000..7e992bfc7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.less @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.task-error-logs { + width: 80vw; + position: relative; + top: 76px; + line-height: 2; + font-size: 14px; + margin: 0 auto 16px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx new file mode 100644 index 000000000..d71097365 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/TaskErrorLogs.tsx @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useEffect } from 'react'; +import { useRoute } from 'wouter'; +import { observer } from 'mobx-react'; +import { DataImportRootStoreContext } from '../../../../../stores'; + +import './TaskErrorLogs.less'; + +const TaskErrorLogs: React.FC = observer(() => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { serverDataImportStore } = dataImportRootStore; + const [, params] = useRoute( + '/graph-management/:id/data-import/:jobId/task-error-log/:taskId' + ); + + useEffect(() => { + serverDataImportStore.checkErrorLogs( + Number(params!.id), + Number(params!.jobId), + Number(params!.taskId) + ); + }, [params!.id, params!.jobId, params!.taskId]); + + return ( +
    + {/*
    + {serverDataImportStore.requestStatus.checkErrorLogs === 'failed' + ? serverDataImportStore.errorInfo.checkErrorLogs.message + : serverDataImportStore.errorLogs} +
    */} +
    + {serverDataImportStore.requestStatus.checkErrorLogs === 'failed' + ? serverDataImportStore.errorInfo.checkErrorLogs.message + : serverDataImportStore.errorLogs + .split('\n') + .map((text) =>

    {text}

    )} +
    +
    + ); +}); + +export default TaskErrorLogs; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/index.ts new file mode 100644 index 000000000..a694b2fc5 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/error-logs/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import TaskErrorLogs from './TaskErrorLogs'; +import JobErrorLogs from './JobErrorLogs'; + +export { TaskErrorLogs, JobErrorLogs }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/index.ts new file mode 100644 index 000000000..e1324524f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/index.ts @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import ImportTasks from './ImportTasks'; +import ImportManager from './ImportManager'; +import { JobDetails } from './job-details'; + +export { ImportTasks, ImportManager, JobDetails }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx new file mode 100644 index 000000000..0332c4b83 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/BasicSettings.tsx @@ -0,0 +1,258 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useContext, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { isEmpty, isNull, isUndefined } from 'lodash-es'; +import { useRoute } from 'wouter'; +import { motion } from 'framer-motion'; +import { useTranslation } from 'react-i18next'; +import { Button, Modal, Input, Message } from 'hubble-ui'; + +import { ImportManagerStoreContext } from '../../../../../stores'; +import { + GraphManagementStoreContext, + DataImportRootStoreContext +} from '../../../../../stores'; + +const BasicSettings: React.FC = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const importManagerStore = useContext(ImportManagerStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [isPopEditModal, switchPopEditModal] = useState(false); + const [, params] = useRoute( + '/graph-management/:id/data-import/import-manager/:jobId/details' + ); + const { t } = useTranslation(); + + useEffect(() => { + const init = async () => { + if (isEmpty(importManagerStore.importJobList)) { + graphManagementStore.fetchIdList(); + importManagerStore.setCurrentId(Number(params!.id)); + await importManagerStore.fetchImportJobList(); + } + + if (isNull(importManagerStore.selectedJob)) { + if ( + !isUndefined( + importManagerStore.importJobList.find( + ({ id }) => String(id) === (params && params.jobId) + ) + ) && + params !== null + ) { + importManagerStore.setSelectedJob(Number(params.jobId)); + + // duplicate logic in + // fill in essential data in import-task stores + dataImportRootStore.setCurrentId(Number(params!.id)); + dataImportRootStore.setCurrentJobId(Number(params.jobId)); + + dataImportRootStore.fetchVertexTypeList(); + dataImportRootStore.fetchEdgeTypeList(); + + // fetch related data + await Promise.all([ + dataMapStore.fetchDataMaps(), + serverDataImportStore.fetchAllImportTasks() + ]); + + dataMapStore.setSelectedFileId( + Number(dataMapStore.fileMapInfos[0].id) + ); + dataMapStore.setSelectedFileInfo(); + + // set flags about readonly and irregular process in + dataMapStore.switchReadOnly(true); + dataMapStore.switchIrregularProcess(true); + + // set flags about readonly and irregular process in + serverDataImportStore.switchExpandImportConfig(true); + serverDataImportStore.switchReadOnly(true); + serverDataImportStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + } + } + }; + + init(); + }, []); + + return ( +
    +
    +
    + {t('import-job-details.basic.job-name')} + {importManagerStore.selectedJob?.job_name} +
    +
    + {t('import-job-details.basic.job-description')} + {importManagerStore.selectedJob?.job_remarks} +
    +
    + + { + switchPopEditModal(false); + await importManagerStore.updateJobInfo(); + + if (importManagerStore.requestStatus.updateJobInfo === 'failed') { + Message.error({ + content: importManagerStore.errorInfo.updateJobInfo.message, + size: 'medium', + showCloseIcon: false + }); + + return; + } + + if ( + importManagerStore.requestStatus.updateJobInfo === 'success' + ) { + Message.success({ + content: t('import-manager.hint.update-succeed'), + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('import-job-details.basic.modal.manipulations.save')} + , + + ]} + destroyOnClose + needCloseIcon + onCancel={() => { + switchPopEditModal(false); + }} + > +
    +
    +
    + + * + + + {t('import-job-details.basic.modal.edit-job.job-name')} + +
    + { + importManagerStore.mutateEditJob('name', e.value); + importManagerStore.validateJob('edit', 'name'); + }} + originInputProps={{ + onBlur: () => { + importManagerStore.validateJob('edit', 'name'); + } + }} + /> +
    +
    +
    + {t('import-job-details.basic.modal.edit-job.job-description')} +
    +
    + { + importManagerStore.mutateEditJob('description', e.value); + importManagerStore.validateJob('edit', 'description'); + }} + originInputProps={{ + onBlur: () => { + importManagerStore.validateJob('edit', 'description'); + } + }} + /> +
    +
    +
    +
    +
    + ); +}); + +export default BasicSettings; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx new file mode 100644 index 000000000..21b81eba0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/DataImportDetails.tsx @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { observer } from 'mobx-react'; + +import { ServerDataImport } from '../server-data-import'; + +const DataImportDetails: React.FC = observer(() => { + return ( +
    + +
    + ); +}); + +export default DataImportDetails; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx new file mode 100644 index 000000000..1f205c6ae --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/DataMaps.tsx @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { observer } from 'mobx-react'; + +import DataMapConfigs from '../datamap-configs/DataMapConfigs'; + +import '../datamap-configs/DataMapConfigs.less'; + +const DataMaps: React.FC = observer(() => { + return ( +
    + +
    + ); +}); + +export default DataMaps; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less new file mode 100644 index 000000000..21bb217ba --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.less @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.import-job-details { + position: absolute; + width: calc(100% - 60px); + padding: 0 16px 16px; + left: 60px; + top: 60px; + + &-with-expand-sidebar { + width: calc(100% - 200px); + left: 200px; + } + + &-breadcrumb-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + margin: 16px 0; + } + + &-content-wrapper { + height: calc(100vh - 201px); + background: #fff; + padding: 24px; + overflow: auto; + } + + &-content-header { + margin-bottom: 16px; + display: flex; + justify-content: flex-end; + } + + &-basic-text { + font-size: 14px; + color: #333; + + & > div { + margin-bottom: 14px; + } + + & span:last-child { + margin-left: 24px; + } + } + + &-uploaded-file-infos { + margin-bottom: 19px; + font-size: 14px; + + &-titles { + width: 300px; + display: flex; + justify-content: space-between; + } + + &-progress-status { + width: 374px; + display: flex; + align-items: center; + } + } +} + +/* override */ + +// reveal error layer in +.new-fc-one-modal-body { + overflow: visible; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx new file mode 100644 index 000000000..66d7394ff --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/JobDetails.tsx @@ -0,0 +1,90 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { AnimatePresence } from 'framer-motion'; +import { useTranslation } from 'react-i18next'; +import { isEmpty } from 'lodash-es'; +import { Menu } from 'hubble-ui'; + +import { + DataImportRootStoreContext, + ImportManagerStoreContext +} from '../../../../../stores'; + +import BasicSettings from './BasicSettings'; +import UploadedFiles from './UploadedFiles'; +import DataMaps from './DataMaps'; +import DataImportDetails from './DataImportDetails'; + +import './JobDetails.less'; + +const JobDetails: React.FC = observer(() => { + const importManagerStore = useContext(ImportManagerStoreContext); + const { dataMapStore, serverDataImportStore } = useContext( + DataImportRootStoreContext + ); + const { t } = useTranslation(); + + const handleMenuItemChange = ({ key }: { key: string }) => { + importManagerStore.setCurrentJobDetailStep(key); + }; + + const renderListView = () => { + switch (importManagerStore.jobDetailsStep) { + case 'basic': + return ; + case 'upload': + return ; + case 'data-map': + return ; + case 'import-details': + return ; + } + }; + + return ( + <> + + + {t('import-job-details.tabs.basic-settings')} + + + {t('import-job-details.tabs.uploaded-files')} + + + {t('import-job-details.tabs.data-maps')} + + + {t('import-job-details.tabs.import-details')} + + + {renderListView()} + + ); +}); + +export default JobDetails; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx new file mode 100644 index 000000000..7bcf4e6fc --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/UploadedFiles.tsx @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Progress } from 'hubble-ui'; + +import { DataImportRootStoreContext } from '../../../../../stores'; + +const UploadedFiles: React.FC = observer(() => { + const { dataMapStore } = useContext(DataImportRootStoreContext); + + return ( +
    + {dataMapStore.fileMapInfos.map(({ name, total_size }) => ( +
    +
    + {name} + {total_size} +
    +
    + +
    +
    + ))} +
    + ); +}); + +export default UploadedFiles; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/index.ts new file mode 100644 index 000000000..36247d378 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/job-details/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import JobDetails from './JobDetails'; + +export { JobDetails }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx new file mode 100644 index 000000000..289e9d394 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ImportConfigs.tsx @@ -0,0 +1,862 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useCallback, useEffect, useRef } from 'react'; +import { observer } from 'mobx-react'; +import { useLocation } from 'wouter'; +import { isEmpty } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; +import classnames from 'classnames'; +import { Switch, Input, Button, Table, Tooltip, Message } from 'hubble-ui'; + +import { DataImportRootStoreContext } from '../../../../../stores'; +import { useInitDataImport } from '../../../../../hooks'; + +import type { + ImportTasks, + LoadParameter +} from '../../../../../stores/types/GraphManagementStore/dataImportStore'; + +import ArrowIcon from '../../../../../assets/imgs/ic_arrow_16.svg'; +import HintIcon from '../../../../../assets/imgs/ic_question_mark.svg'; + +const importStatusColorMapping: Record = { + RUNNING: '#2b65ff', + SUCCEED: '#39bf45', + FAILED: '#e64552', + PAUSED: '#a9cbfb', + STOPPED: '#ccc' +}; + +const commonInputProps = { + size: 'medium', + width: 100, + errorLocation: 'layer' +}; + +export interface ImportConfigsProps { + height?: string; +} + +const ImportConfigs: React.FC = observer(({ height }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { serverDataImportStore, dataMapStore } = dataImportRootStore; + const timerId = useRef(NaN); + const isInitReady = useInitDataImport(); + const [, setLocation] = useLocation(); + const { t } = useTranslation(); + + const columnConfigs = [ + { + title: t('server-data-import.import-details.column-titles.file-name'), + dataIndex: 'file_name', + width: '10%', + render(text: string) { + return ( +
    + {text} +
    + ); + } + }, + { + title: t('server-data-import.import-details.column-titles.type'), + dataIndex: 'type', + width: '15%', + render(_: any, rowData: ImportTasks) { + const title = ( +
    + {!isEmpty(rowData.vertices) && ( +
    + {t('server-data-import.import-details.content.vertex')}: + {rowData.vertices.join(' ')} +
    + )} + {!isEmpty(rowData.edges) && ( +
    + {t('server-data-import.import-details.content.edge')}: + {rowData.edges.join(' ')} +
    + )} + {isEmpty(rowData.vertices) && isEmpty(rowData.edges) && '-'} +
    + ); + + return ( + +
    + {!isEmpty(rowData.vertices) && + `${t( + 'server-data-import.import-details.content.vertex' + )}:${rowData.vertices.join(' ')} `} + {!isEmpty(rowData.edges) && + `${t( + 'server-data-import.import-details.content.edge' + )}:${rowData.edges.join(' ')}`} + {isEmpty(rowData.vertices) && isEmpty(rowData.edges) && '-'} +
    +
    + ); + } + }, + { + title: t('server-data-import.import-details.column-titles.import-speed'), + dataIndex: 'load_rate', + width: '12%', + align: 'center', + render(text: string) { + return ( +
    + {text} +
    + ); + } + }, + { + title: t( + 'server-data-import.import-details.column-titles.import-progress' + ), + dataIndex: 'load_progress', + width: '35%', + render(progress: number, rowData: Record) { + return ( +
    +
    +
    +
    +
    {`${progress}%`}
    +
    + ); + } + }, + { + title: t('server-data-import.import-details.column-titles.status'), + dataIndex: 'status', + width: '10%', + render(text: string) { + return ( +
    + {t(`server-data-import.import-details.status.${text}`)} +
    + ); + } + }, + { + title: t('server-data-import.import-details.column-titles.time-consumed'), + dataIndex: 'duration', + align: 'right', + width: '8%', + render(text: string) { + return ( +
    + {text} +
    + ); + } + }, + { + title: !serverDataImportStore.readOnly + ? t('server-data-import.import-details.column-titles.manipulations') + : '', + width: '15%', + render(_: never, rowData: Record, taskIndex: number) { + return !serverDataImportStore.readOnly ? ( +
    + +
    + ) : null; + } + } + ]; + + const handleInputChange = (key: keyof LoadParameter) => (e: any) => { + serverDataImportStore.mutateImportConfigs(key, e.value); + serverDataImportStore.validateImportConfigs(key); + }; + + const handleBlur = (key: keyof LoadParameter) => () => { + serverDataImportStore.validateImportConfigs(key); + }; + + const loopQueryImportData = useCallback(() => { + const loopId = window.setInterval(async () => { + if (serverDataImportStore.isImportFinished) { + window.clearInterval(loopId); + return; + } + + if ( + serverDataImportStore.requestStatus.fetchImportTasks === 'failed' || + serverDataImportStore.requestStatus.fetchAllImportTasks === 'failed' + ) { + Message.error({ + content: + serverDataImportStore.errorInfo.fetchImportTasks.message || + serverDataImportStore.errorInfo.fetchAllImportTasks.message, + size: 'medium', + showCloseIcon: false + }); + + window.clearInterval(loopId); + return; + } + + if (serverDataImportStore.isIrregularProcess) { + serverDataImportStore.fetchAllImportTasks(); + } else { + // stop loops when users click sidebar icon + // (dispose called in , [ids] resets to empty array) + if (isEmpty(serverDataImportStore.fileImportTaskIds)) { + window.clearInterval(loopId); + return; + } + + serverDataImportStore.fetchImportTasks( + serverDataImportStore.fileImportTaskIds + ); + } + }, 1000); + + timerId.current = loopId; + }, []); + + const expandClassName = classnames({ + 'import-tasks-step-content-header-expand': + serverDataImportStore.isExpandImportConfig, + 'import-tasks-step-content-header-collpase': !serverDataImportStore.isExpandImportConfig + }); + + useEffect(() => { + // if comes from import manager or refresh + if ( + (!serverDataImportStore.readOnly || + serverDataImportStore.isIrregularProcess) && + dataImportRootStore.currentStatus === 'LOADING' + ) { + loopQueryImportData(); + } + + return () => { + if (!Object.is(NaN, timerId.current)) { + window.clearInterval(timerId.current); + } + }; + }, [ + isInitReady, + serverDataImportStore.readOnly, + serverDataImportStore.isIrregularProcess, + dataImportRootStore.currentStatus + ]); + + return isInitReady ? ( +
    +
    + {t('server-data-import.import-settings.title')} + collpaseOrExpand { + serverDataImportStore.switchExpandImportConfig( + !serverDataImportStore.isExpandImportConfig + ); + }} + /> +
    + + {serverDataImportStore.isExpandImportConfig && ( +
    +
    +
    +
    + + {t('server-data-import.import-settings.checkIfExist')}: + + + hint + +
    +
    + { + serverDataImportStore.mutateImportConfigs( + 'check_vertex', + checked + ); + }} + disabled={ + serverDataImportStore.readOnly || + serverDataImportStore.importConfigReadOnly + } + /> +
    +
    +
    + + {t( + 'server-data-import.import-settings.maximumAnalyzedErrorRow' + )} + : + + {!serverDataImportStore.readOnly && + !serverDataImportStore.importConfigReadOnly ? ( + + ) : ( +
    + {serverDataImportStore.importConfigs?.max_parse_errors} +
    + )} +
    +
    + + {t( + 'server-data-import.import-settings.maxiumInterpolateErrorRow' + )} + : + + {!serverDataImportStore.readOnly && + !serverDataImportStore.importConfigReadOnly ? ( + + ) : ( +
    + {serverDataImportStore.importConfigs?.max_insert_errors} +
    + )} +
    +
    +
    +
    + + {t( + 'server-data-import.import-settings.requestTimesWhenInterpolationFailed' + )} + : + + {!serverDataImportStore.readOnly && + !serverDataImportStore.importConfigReadOnly ? ( + + ) : ( +
    + {serverDataImportStore.importConfigs?.retry_times} +
    + )} +
    +
    + + {t( + 'server-data-import.import-settings.requestTicksWhenInterpolationFailed' + )} + : + + {!serverDataImportStore.readOnly && + !serverDataImportStore.importConfigReadOnly ? ( + + ) : ( +
    + {serverDataImportStore.importConfigs?.retry_interval} +
    + )} +
    +
    + + {t('server-data-import.import-settings.InterpolationTimeout')}: + + {!serverDataImportStore.readOnly && + !serverDataImportStore.importConfigReadOnly ? ( + + ) : ( +
    + {serverDataImportStore.importConfigs?.insert_timeout} +
    + )} +
    +
    +
    + )} + + {(dataImportRootStore.currentStatus === 'LOADING' || + dataImportRootStore.currentStatus === 'SUCCESS' || + dataImportRootStore.currentStatus === 'FAILED' || + (serverDataImportStore.isIrregularProcess && + serverDataImportStore.readOnly)) && ( + <> +
    + {t('server-data-import.import-details.title')} +
    +
    +
+ + + )} + + {!serverDataImportStore.readOnly && ( +
+ + +
+ )} + + ) : null; +}); + +export interface ImportManipulationsProps { + importStatus: string; + taskIndex: number; + loopQuery: () => void; +} + +const ImportManipulations: React.FC = observer( + ({ importStatus, taskIndex, loopQuery }) => { + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { serverDataImportStore } = dataImportRootStore; + const { t } = useTranslation(); + const manipulations: string[] = []; + + const handleClickManipulation = async (manipulation: string) => { + switch (manipulation) { + case t('server-data-import.import-details.manipulations.pause'): + await serverDataImportStore.pauseImport( + serverDataImportStore.importTasks[taskIndex].id + ); + + if (serverDataImportStore.requestStatus.pauseImport === 'failed') { + Message.error({ + content: serverDataImportStore.errorInfo.pauseImport.message, + size: 'medium', + showCloseIcon: false + }); + } + + break; + case t('server-data-import.import-details.manipulations.abort'): + await serverDataImportStore.abortImport( + serverDataImportStore.importTasks[taskIndex].id + ); + + if (serverDataImportStore.requestStatus.abortImport === 'failed') { + Message.error({ + content: serverDataImportStore.errorInfo.abortImport.message, + size: 'medium', + showCloseIcon: false + }); + } + + serverDataImportStore.fetchAllImportTasks(); + + break; + case t('server-data-import.import-details.manipulations.resume'): + await serverDataImportStore.resumeImport( + serverDataImportStore.importTasks[taskIndex].id + ); + + if (serverDataImportStore.requestStatus.resumeImport === 'failed') { + Message.error({ + content: serverDataImportStore.errorInfo.resumeImport.message, + size: 'medium', + showCloseIcon: false + }); + } + + serverDataImportStore.switchImporting(true); + serverDataImportStore.switchImportFinished(false); + loopQuery(); + break; + case t('server-data-import.import-details.manipulations.failed-cause'): + serverDataImportStore.checkErrorLogs( + dataImportRootStore.currentId!, + dataImportRootStore.currentJobId!, + serverDataImportStore.importTasks[taskIndex].id + ); + break; + case t('server-data-import.import-details.manipulations.retry'): + await serverDataImportStore.retryImport( + serverDataImportStore.importTasks[taskIndex].id + ); + + if (serverDataImportStore.requestStatus.retryImport === 'failed') { + Message.error({ + content: serverDataImportStore.errorInfo.retryImport.message, + size: 'medium', + showCloseIcon: false + }); + } + + serverDataImportStore.switchImporting(true); + serverDataImportStore.switchImportFinished(false); + loopQuery(); + break; + } + }; + + switch (importStatus) { + case 'RUNNING': + manipulations.push( + t('server-data-import.import-details.manipulations.pause'), + t('server-data-import.import-details.manipulations.abort') + ); + break; + case 'FAILED': + manipulations.push( + t('server-data-import.import-details.manipulations.resume'), + t('server-data-import.import-details.manipulations.failed-cause') + ); + break; + case 'PAUSED': + manipulations.push( + t('server-data-import.import-details.manipulations.resume'), + t('server-data-import.import-details.manipulations.abort') + ); + break; + case 'STOPPED': + manipulations.push( + t('server-data-import.import-details.manipulations.retry') + ); + break; + case 'SUCCEED': + break; + default: + throw new Error('Wrong status received from server'); + } + + return ( +
+ {manipulations.map((manipulation) => { + if ( + manipulation === + t('server-data-import.import-details.manipulations.failed-cause') + ) { + return ( + { + handleClickManipulation(manipulation); + }} + > + {manipulation} + + ); + } + + return ( + { + serverDataImportStore.switchImportFinished(false); + handleClickManipulation(manipulation); + }} + > + {manipulation} + + ); + })} +
+ ); + } +); + +export default ImportConfigs; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less new file mode 100644 index 000000000..7ba8506e1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.less @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.import-tasks { + &-server-data-import { + &-configs-wrapper { + width: 100%; + margin-bottom: 30px; + } + + &-configs { + display: flex; + width: 100%; + } + + &-config { + height: 128px; + display: flex; + justify-content: space-between; + flex-direction: column; + flex-basis: 50%; + + &:first-child { + align-items: flex-end; + // margin-right: 87px; + } + + &:last-child { + align-items: flex-start; + } + } + + &-config-option { + display: flex; + align-items: center; + + & > div:first-child, + & > span:first-child { + width: 200.7px; + margin-right: 44px; + text-align: right; + color: #333; + font-size: 14px; + } + + &-readonly-data { + width: 100px; + font-size: 14px; + color: #333; + line-height: 20px; + } + } + + &-manipulations { + width: 100%; + margin: 40px 0 6px; + display: flex; + justify-content: center; + } + + &-table-wrapper { + & table { + table-layout: fixed; + } + } + + &-table-tooltip-title { + width: 234px; + } + + &-table-progress { + position: relative; + width: 80%; + height: 8px; + background: #eee; + border-radius: 4px; + margin-right: 8px; + } + + &-table-manipulations { + display: flex; + // justify-content: space-between; + } + } +} + +/* override */ + +.import-tasks-server-data-import-config-option .new-fc-one-input-error.new-fc-one-input-error-layer { + // safari bug + // width: max-content; + word-break: keep-all; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx new file mode 100644 index 000000000..b84fb2870 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/ServerDataImport.tsx @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { observer } from 'mobx-react'; + +import ImportConfigs from './ImportConfigs'; + +import './ServerDataImport.less'; + +const ServerDataImport: React.FC = observer(() => { + return ( +
+ +
+ ); +}); + +export default ServerDataImport; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts new file mode 100644 index 000000000..850e2c888 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/import-tasks/server-data-import/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import ServerDataImport from './ServerDataImport'; + +export { ServerDataImport }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/index.ts new file mode 100644 index 000000000..6ff89dc6e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/data-import/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { ImportTasks, ImportManager, JobDetails } from './import-tasks'; + +export { ImportTasks, ImportManager, JobDetails }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/index.ts new file mode 100644 index 000000000..c92bd3ece --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/index.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import GraphManagement from './GraphManagement'; +import { DataAnalyze } from './data-analyze'; +import { MetadataConfigs } from './metadata-configs'; +import { ImportTasks, ImportManager, JobDetails } from './data-import'; +import { AsyncTaskList } from './async-tasks'; + +export { + GraphManagement, + DataAnalyze, + MetadataConfigs, + ImportTasks, + ImportManager, + JobDetails, + AsyncTaskList +}; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/MetadataConfigs.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/MetadataConfigs.less new file mode 100644 index 000000000..f5a0cf5bb --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/MetadataConfigs.less @@ -0,0 +1,282 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.metadata-configs { + position: absolute; + width: calc(100% - 60px); + padding: 0 16px 16px 16px; + left: 60px; + top: 60px; + + &-with-expand-sidebar { + width: calc(100% - 200px); + left: 200px; + } + + &-content { + &-wrapper { + margin-top: 16px; + padding: 16px; + background: #fff; + border: 1px solid #eee; + border-radius: 3px; + } + + &-loading-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + &-loading-bg { + width: 144px; + height: 144px; + position: relative; + margin-bottom: 10px; + } + + &-loading-back { + position: absolute; + left: 22px; + top: 20px; + } + + &-loading-front { + position: absolute; + left: 57.1px; + top: 52.1px; + animation: loading-rotate 2s linear infinite; + } + + &-mode { + margin: 16px 0; + + &-button { + display: flex; + align-items: center; + + & > img { + margin-right: 6px; + } + } + } + + &-header { + margin-bottom: 16px; + display: flex; + justify-content: flex-end; + } + + &-dropdown { + width: 382px; + max-height: 332px; + overflow: auto; + background: #fff; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + color: #333; + + & > div { + padding: 0 16px; + height: 32px; + display: flex; + align-items: center; + } + } + } + + &-drawer { + font-size: 14px; + margin-top: 4px; + } + + &-sorted-multiSelect-option { + display: flex; + + & > div:first-child { + margin: 8px 8px 0; + width: 16px; + height: 16px; + border: 1px solid #ccc; + background: #fff; + border-radius: 2px; + } + + & > div:last-child { + width: 80%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + &-selected { + & > div:first-child { + margin: 8px 8px 0; + width: 16px; + height: 16px; + background: #2b65ff; + border-radius: 2px; + text-align: center; + line-height: 14px; + color: #fff; + } + } + } +} + +.metadata-properties-tooltips { + background: #fff; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + padding: 24px; + font-size: 14px; + color: #333; + + &-title { + font-size: 16px; + font-weight: 900; + margin-bottom: 16px; + } + + &-footer { + display: flex; + margin-top: 24px; + } + + // & p { + // margin: 0; + // line-height: 28px; + // } +} + +.metadata-title { + font-family: + 'PingFangSC-Medium', + 'Microsoft YaHei', + '微软雅黑', + Arial, + sans-serif; + font-weight: bold; + font-size: 16px; + color: #000; + letter-spacing: 0; + line-height: 24px; +} + +.metadata-drawer { + &-options { + margin-bottom: 12px; + display: flex; + + &-disabled { + color: #ccc; + } + + &-name { + width: 98px; + text-align: right; + margin-right: 9px; + } + + &-list { + width: calc(100% - 155px); + + &-row { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; + + &-normal { + & > div, + & > span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + &:nth-child(1) { + flex: 0 1 30%; + } + + &:nth-child(2) { + flex: 0 1 32%; + } + + &:nth-child(3) { + flex: 0 1 38%; + display: flex; + align-items: center; + + & > img { + margin-left: 4px; + } + } + } + } + + &:last-child { + margin-bottom: 0; + } + } + } + } +} + +.metadata-selected-properties { + display: flex; + justify-content: space-between; + margin: 12px 0; +} + +.metdata-essential-form-options { + color: #fb4b53; +} + +// override +.metadata-configs { + table { + table-layout: fixed; + } + + .new-fc-one-table { + overflow: visible; + border: 0; + } + + .new-fc-one-table table { + overflow: visible; + } + + .new-fc-one-menu { + background: transparent; + } + + .new-fc-one-select-dropdown-menu-item.new-fc-one-select-dropdown-menu-item-selected { + color: #2b65ff; + font-weight: 900; + } +} + +// override +.metadata-drawer-options-list-row { + .new-fc-one-select-search-ul { + .new-fc-one-select-search.new-fc-one-select-search--inline { + display: none; + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/MetadataConfigs.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/MetadataConfigs.tsx new file mode 100644 index 000000000..e0c9ce130 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/MetadataConfigs.tsx @@ -0,0 +1,197 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, useEffect, useContext } from 'react'; +import { observer } from 'mobx-react'; +import { useRoute, useLocation, Params } from 'wouter'; +import classnames from 'classnames'; +import { AnimatePresence } from 'framer-motion'; +import { Radio, Menu, Modal, Button } from 'hubble-ui'; + +import { MetadataProperties } from './property'; +import { VertexTypeList } from './vertex-type'; +import { EdgeTypeList } from './edge-type'; +import { PropertyIndex } from './property-index'; +import { GraphView } from './graph-view'; +import DataAnalyzeStore from '../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import MetadataConfigsRootStore from '../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import './MetadataConfigs.less'; +import { AppStoreContext, GraphManagementStoreContext } from '../../../stores'; +import ActiveTableIcon from '../../../assets/imgs/ic_liebiaomoshi_white.svg'; +import TableIcon from '../../../assets/imgs/ic_liebiaomoshi_black.svg'; +import ActiveShowGraphIcon from '../../../assets/imgs/ic_tumoshi_white.svg'; +import ShowGraphIcon from '../../../assets/imgs/ic_tumoshi_black.svg'; +import { useTranslation } from 'react-i18next'; + +const MetadataConfig: React.FC = observer(() => { + const appStore = useContext(AppStoreContext); + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const graphManagementStore = useContext(GraphManagementStoreContext); + const metadataConfigRootStore = useContext(MetadataConfigsRootStore); + const [viewMode, setViewMode] = useState('list'); + const [selectedMenuItem, setSelectedMenuItem] = useState('property'); + const [match, params] = useRoute('/graph-management/:id/metadata-configs'); + const [_, setLocation] = useLocation(); + const { t } = useTranslation(); + + const handleRadioGroupChange = (e: React.ChangeEvent) => { + setViewMode(e.target.value); + }; + + const handleMenuItemChange = ({ key }: { key: string }) => { + // reset store current tab status to default + switch (selectedMenuItem) { + case 'property': + metadataConfigRootStore.metadataPropertyStore.changeCurrentTabStatus( + 'list' + ); + case 'vertex-type': + metadataConfigRootStore.vertexTypeStore.changeCurrentTabStatus('list'); + case 'edge-type': + metadataConfigRootStore.edgeTypeStore.changeCurrentTabStatus('list'); + } + + setSelectedMenuItem(key); + }; + + const wrapperClassName = classnames({ + 'metadata-configs': true, + 'metadata-configs-with-expand-sidebar': graphManagementStore.isExpanded + }); + + const renderListView = () => { + switch (selectedMenuItem) { + case 'property': + return ; + case 'vertex-type': + return ; + case 'edge-type': + return ; + case 'property-index': + return ; + } + }; + + // Caution: Preitter will automatically add 'params' behind 'match' in array, + // which is not equal each time + /* eslint-disable */ + useEffect(() => { + window.scrollTo(0, 0); + graphManagementStore.fetchIdList(); + + if (match && params !== null) { + appStore.setCurrentId(Number(params.id)); + // fetch node colors + dataAnalyzeStore.setCurrentId(Number(params.id)); + dataAnalyzeStore.fetchAllNodeStyle(); + dataAnalyzeStore.fetchAllEdgeStyle(); + metadataConfigRootStore.setCurrentId(Number(params.id)); + // metadataConfigRootStore.fetchIdList(); + } + + return () => { + metadataConfigRootStore.dispose(); + }; + }, [metadataConfigRootStore, match, params?.id]); + + return ( +
+
+
+ + +
+ table mode + {t('addition.menu.list-mode')} +
+
+ +
+ graph mode + {t('addition.menu.chart-mode')} +
+
+
+
+ {viewMode === 'list' ? ( + <> + + + {t('addition.common.property')} + + + {t('addition.common.vertex-type')} + + + {t('addition.common.edge-type')} + + + {t('addition.common.property-index')} + + + + {renderListView()} + + + ) : ( + + )} +
+ { + metadataConfigRootStore.setCurrentId(null); + setLocation('/'); + }} + > + {t('addition.dataAnalyze.return-home')} + + ]} + visible={graphManagementStore.graphData.some( + ({ id, enabled }) => + metadataConfigRootStore.currentId === id && !enabled + )} + destroyOnClose + needCloseIcon={false} + > +
+ {metadataConfigRootStore.metadataPropertyStore.errorMessage} +
+
+
+ ); +}); + +export default MetadataConfig; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx new file mode 100644 index 000000000..cc38c32eb --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/common/EmptyDataView.tsx @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { observer } from 'mobx-react'; + +import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; +import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; + +import i18next from '../../../../i18n'; +export interface LoadingDataViewProps { + isLoading: boolean; + emptyText?: string; +} + +const LoadingDataView: React.FC = observer( + ({ isLoading, emptyText }) => + isLoading ? ( +
+
+ load background + load spinner +
+ {i18next.t('addition.message.data-loading')}... +
+ ) : emptyText ? ( + {emptyText} + ) : null +); + +export default LoadingDataView; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less new file mode 100644 index 000000000..a6874e139 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.less @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.edge-type-list-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 16px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx new file mode 100644 index 000000000..a29c32ddd --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/EdgeTypeList.tsx @@ -0,0 +1,1957 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import { + isEmpty, + isUndefined, + cloneDeep, + intersection, + size, + without +} from 'lodash-es'; +import { useLocation } from 'wouter'; +import classnames from 'classnames'; +import { motion } from 'framer-motion'; +import { + Button, + Table, + Switch, + Modal, + Drawer, + Input, + Select, + Checkbox, + Message, + Loading +} from 'hubble-ui'; + +import { Tooltip, LoadingDataView } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +import NewEdgeType from './NewEdgeType'; +import ReuseEdgeTypes from './ReuseEdgeTypes'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { formatVertexIdText } from '../../../../stores/utils'; + +import type { + EdgeTypeValidatePropertyIndexes, + EdgeType +} from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import AddIcon from '../../../../assets/imgs/ic_add.svg'; +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import WhiteCloseIcon from '../../../../assets/imgs/ic_close_white.svg'; +import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; +import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; +import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; +import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; +import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; +import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; +import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; +import i18next from '../../../../i18n'; +import { useTranslation } from 'react-i18next'; + +import './EdgeTypeList.less'; + +const styles = { + button: { + marginLeft: 12, + width: 78 + }, + header: { + marginBottom: 16 + }, + manipulation: { + marginRight: 12 + }, + deleteWrapper: { + display: 'flex', + justifyContent: 'flex-end' + }, + loading: { + padding: 0, + marginRight: 4 + } +}; + +const variants = { + initial: { + opacity: 0 + }, + animate: { + opacity: 1, + transition: { + duration: 0.7 + } + }, + exit: { + opacity: 0, + transition: { + duration: 0.3 + } + } +}; + +const propertyIndexTypeMappings: Record = { + SECONDARY: i18next.t('addition.menu.secondary-index'), + RANGE: i18next.t('addition.menu.range-index'), + SEARCH: i18next.t('addition.menu.full-text-index') +}; + +const EdgeTypeList: React.FC = observer(() => { + const { t } = useTranslation(); + const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); + const { metadataPropertyStore, edgeTypeStore } = metadataConfigsRootStore; + const [preLoading, switchPreLoading] = useState(true); + const [sortOrder, setSortOrder] = useState(''); + const [selectedRowKeys, mutateSelectedRowKeys] = useState([]); + const [isShowModal, switchShowModal] = useState(false); + const [isAddProperty, switchIsAddProperty] = useState(false); + const [isEditEdge, switchIsEditEdge] = useState(false); + const [ + deleteExistPopIndexInDrawer, + setDeleteExistPopIndexInDrawer + ] = useState(null); + const [ + deleteAddedPopIndexInDrawer, + setDeleteAddedPopIndexInDrawer + ] = useState(null); + const [, setLocation] = useLocation(); + + const dropdownWrapperRef = useRef(null); + const deleteWrapperInDrawerRef = useRef(null); + + const isLoading = + preLoading || edgeTypeStore.requestStatus.fetchEdgeTypeList === 'pending'; + + const currentSelectedRowKeys = intersection( + selectedRowKeys, + edgeTypeStore.edgeTypes.map(({ name }) => name) + ); + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + if ( + isAddProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddProperty(false); + } + + if ( + (deleteExistPopIndexInDrawer || deleteAddedPopIndexInDrawer) && + deleteWrapperInDrawerRef.current && + !deleteWrapperInDrawerRef.current.contains(e.target as Element) + ) { + setDeleteExistPopIndexInDrawer(null); + setDeleteAddedPopIndexInDrawer(null); + } + }, + [deleteExistPopIndexInDrawer, deleteWrapperInDrawerRef, isAddProperty] + ); + + const handleSelectedTableRow = (newSelectedRowKeys: string[]) => { + mutateSelectedRowKeys(newSelectedRowKeys); + }; + + const handleCloseDrawer = () => { + switchIsAddProperty(false); + switchIsEditEdge(false); + edgeTypeStore.selectEdgeType(null); + edgeTypeStore.resetEditedSelectedEdgeType(); + }; + + const handleSortClick = () => { + switchPreLoading(true); + + if (sortOrder === 'descend') { + edgeTypeStore.mutatePageSort('asc'); + setSortOrder('ascend'); + } else { + edgeTypeStore.mutatePageSort('desc'); + setSortOrder('descend'); + } + + edgeTypeStore.fetchEdgeTypeList(); + }; + + const batchDeleteProperties = async () => { + switchShowModal(false); + // need to set a copy in store since local row key state would be cleared + edgeTypeStore.mutateSelectedEdgeTypeNames(currentSelectedRowKeys); + // mutateSelectedRowKeys([]); + await edgeTypeStore.deleteEdgeType(currentSelectedRowKeys); + // edgeTypeStore.mutateSelectedEdgeTypeNames([]); + + if (edgeTypeStore.requestStatus.deleteEdgeType === 'success') { + Message.success({ + content: t('addition.common.del-success'), + size: 'medium', + showCloseIcon: false + }); + + mutateSelectedRowKeys( + without(selectedRowKeys, ...currentSelectedRowKeys) + ); + + await edgeTypeStore.fetchEdgeTypeList(); + + // fetch previous page data if it's empty + if ( + edgeTypeStore.requestStatus.fetchEdgeTypeList === 'success' && + size(edgeTypeStore.edgeTypes) === 0 && + edgeTypeStore.edgeTypeListPageConfig.pageNumber > 1 + ) { + edgeTypeStore.mutatePageNumber( + edgeTypeStore.edgeTypeListPageConfig.pageNumber - 1 + ); + + edgeTypeStore.fetchEdgeTypeList(); + } + + return; + } + + if (edgeTypeStore.requestStatus.deleteEdgeType === 'failed') { + Message.error({ + content: edgeTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + }; + + const columnConfigs = [ + { + title: t('addition.common.edge-type-name'), + dataIndex: 'name', + sorter: true, + sortOrder, + width: '14%', + render(text: string, records: any[], index: number) { + return ( +
{ + edgeTypeStore.selectEdgeType(index); + + // check also need style infos + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + style: { + color: edgeTypeStore.selectedEdgeType!.style.color, + icon: null, + with_arrow: edgeTypeStore.selectedEdgeType!.style.with_arrow, + thickness: edgeTypeStore.selectedEdgeType!.style.thickness, + display_fields: edgeTypeStore.selectedEdgeType!.style + .display_fields + } + }); + }} + > + {text} +
+ ); + } + }, + { + title: t('addition.common.source-type'), + dataIndex: 'source_label', + width: '14%', + render(text: string, records: any[], index: number) { + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.common.target-type'), + dataIndex: 'target_label', + width: '14%', + render(text: string, records: any[], index: number) { + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.common.association-property'), + dataIndex: 'properties', + width: '14%', + render(properties: { name: string; nullable: boolean }[]) { + const text = + properties.length !== 0 + ? properties.map(({ name }) => name).join('; ') + : '-'; + + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.common.distinguishing-key'), + dataIndex: 'sort_keys', + width: '10%', + render(values: string[]) { + const text = values.length !== 0 ? values.join(';') : '-'; + + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.menu.type-index'), + dataIndex: 'open_label_index', + width: '8%', + render(value: boolean) { + return ( + + ); + } + }, + { + title: t('addition.common.property-index'), + dataIndex: 'property_indexes', + width: '14%', + render(indexes: { name: string; type: string; fields: string[] }[]) { + const text = + indexes.length !== 0 + ? indexes.map(({ name }) => name).join('; ') + : '-'; + + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '12%', + render(_: any, records: EdgeType, index: number) { + return ( + + ); + } + } + ]; + + const metadataDrawerOptionClass = classnames({ + 'metadata-drawer-options': true, + 'metadata-drawer-options-disabled': isEditEdge + }); + + useEffect(() => { + setTimeout(() => { + switchPreLoading(false); + }, 500); + }, [sortOrder]); + + useEffect(() => { + return () => { + const messageComponents = document.querySelectorAll( + '.new-fc-one-message' + ) as NodeListOf; + + messageComponents.forEach((messageComponent) => { + messageComponent.style.display = 'none'; + }); + }; + }); + + useEffect(() => { + if (metadataConfigsRootStore.currentId !== null) { + metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); + edgeTypeStore.fetchEdgeTypeList(); + } + + return () => { + edgeTypeStore.dispose(); + }; + }, [ + metadataPropertyStore, + metadataConfigsRootStore.currentId, + edgeTypeStore + ]); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + if (edgeTypeStore.currentTabStatus === 'new') { + return ; + } + + if (edgeTypeStore.currentTabStatus === 'reuse') { + return ; + } + + return ( + +
+
+ + +
+ {size(currentSelectedRowKeys) !== 0 && ( +
+
+ {t('addition.message.selected')} + {size(currentSelectedRowKeys)} + {t('addition.common.term')} +
+ + {t('addition.common.close')} { + mutateSelectedRowKeys([]); + }} + /> +
+ )} +
rowData.name} + locale={{ + emptyText: ( + } + /> + ) + }} + rowSelection={{ + selectedRowKeys, + onChange: handleSelectedTableRow + }} + onSortClick={handleSortClick} + dataSource={isLoading ? [] : edgeTypeStore.edgeTypes} + pagination={ + isLoading + ? null + : { + hideOnSinglePage: false, + pageNo: edgeTypeStore.edgeTypeListPageConfig.pageNumber, + pageSize: 10, + showSizeChange: false, + showPageJumper: false, + total: edgeTypeStore.edgeTypeListPageConfig.pageTotal, + onPageNoChange: (e: React.ChangeEvent) => { + // mutateSelectedRowKeys([]); + edgeTypeStore.mutatePageNumber(Number(e.target.value)); + edgeTypeStore.fetchEdgeTypeList(); + } + } + } + /> + { + switchShowModal(false); + }} + > +
+
+ {t('addition.common.del-comfirm')} + {t('addition.common.close')} { + switchShowModal(false); + }} + /> +
+
+ {t('addition.message.edge-del-confirm')} +
+
+ {t('addition.message.long-time-notice')} +
+
) { + return ( + + {text} + + ); + } + } + ]} + dataSource={currentSelectedRowKeys.map((name) => ({ + name + }))} + pagination={false} + /> + + + { + if (!isEditEdge) { + switchIsEditEdge(true); + edgeTypeStore.validateEditEdgeType(); + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + style: { + color: edgeTypeStore.selectedEdgeType!.style.color, + icon: null, + with_arrow: edgeTypeStore.selectedEdgeType!.style + .with_arrow, + thickness: edgeTypeStore.selectedEdgeType!.style + .thickness, + display_fields: edgeTypeStore.selectedEdgeType!.style + .display_fields + } + }); + } else { + await edgeTypeStore.updateEdgeType(); + + if (edgeTypeStore.requestStatus.updateEdgeType === 'failed') { + Message.error({ + content: edgeTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + + return; + } + + if ( + edgeTypeStore.requestStatus.updateEdgeType === 'success' + ) { + if ( + isEmpty( + edgeTypeStore.editedSelectedEdgeType + .append_property_indexes + ) + ) { + Message.success({ + content: t('addition.operate.modify-success'), + size: 'medium', + showCloseIcon: false + }); + } else { + Message.success({ + content: ( +
+
+ {t('addition.common.save-scuccess')} +
+
+ {t('addition.message.index-long-time-notice')} +
+
{ + setLocation( + `/graph-management/${metadataConfigsRootStore.currentId}/async-tasks` + ); + }} + > + {t('addition.operate.view-task-management')} +
+
+ ), + duration: 60 * 60 * 24 + }); + } + } + + switchIsEditEdge(false); + edgeTypeStore.selectEdgeType(null); + edgeTypeStore.fetchEdgeTypeList(); + edgeTypeStore.resetEditedSelectedEdgeType(); + } + }} + > + {isEditEdge + ? t('addition.common.save') + : t('addition.common.edit')} + , + + ]} + > + {!isEmpty(edgeTypeStore.selectedEdgeType) && ( +
+
+
+ {t('addition.menu.base-info')} +
+
+
+ {t('addition.common.edge-type-name')}: +
+
+ {edgeTypeStore.selectedEdgeType!.name} +
+
+
+
+ + {t('addition.common.edge-style')}: + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ {t('addition.common.source-type')}: +
+
+ {edgeTypeStore.selectedEdgeType!.source_label} +
+
+
+
+ {t('addition.common.target-type')}: +
+
+ {edgeTypeStore.selectedEdgeType!.target_label} +
+
+
+
+ + {t('addition.common.allow-multiple-connections')}: + +
+ +
+
+
+ {t('addition.common.association-property')}: +
+
+
+ {t('addition.common.property')} + {t('addition.common.allow-null')} +
+ {edgeTypeStore.selectedEdgeType!.properties.map( + ({ name, nullable }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditEdge && + edgeTypeStore.editedSelectedEdgeType.append_properties.map( + ({ name }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditEdge && ( +
{ + switchIsAddProperty(!isAddProperty); + }} + > + + {t('addition.common.add-property')} + + toogleAddProperties +
+ )} + {isEditEdge && isAddProperty && ( +
+ {metadataPropertyStore.metadataProperties + .filter( + (property) => + edgeTypeStore.selectedEdgeType!.properties.find( + ({ name }) => name === property.name + ) === undefined + ) + .map((property) => ( +
+ + + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesInSelectedVertextType = + edgeTypeStore.addedPropertiesInSelectedEdgeType; + + addedPropertiesInSelectedVertextType.has( + property.name + ) + ? addedPropertiesInSelectedVertextType.delete( + property.name + ) + : addedPropertiesInSelectedVertextType.add( + property.name + ); + + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_properties: [ + ...addedPropertiesInSelectedVertextType + ].map((propertyName) => { + const currentProperty = edgeTypeStore.newEdgeType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined( + currentProperty + ) + ? currentProperty.nullable + : true + }; + }) + }); + }} + > + {property.name} + + +
+ ))} +
+ )} +
+
+
+
+ + {t('addition.common.distinguishing-key-property')}: + +
+
+ {edgeTypeStore.selectedEdgeType!.sort_keys.join(';')} +
+
+
+
+ + {t('addition.edge.display-content')}: + +
+ {isEditEdge ? ( + + ) : ( +
+ {edgeTypeStore.selectedEdgeType?.style.display_fields + .map((field) => + formatVertexIdText( + field, + t('addition.function-parameter.edge-type') + ) + ) + .join('-')} +
+ )} +
+
+ {t('addition.edge.index-info')} +
+
+
+ {t('addition.menu.type-index')}: +
+ +
+
+
+ {t('addition.common.property-index')}: +
+
+ {(edgeTypeStore.selectedEdgeType!.property_indexes + .length !== 0 || + edgeTypeStore.editedSelectedEdgeType + .append_property_indexes.length !== 0) && ( +
+ {t('addition.edge.index-name')} + {t('addition.edge.index-type')} + {t('addition.common.property')} +
+ )} + {edgeTypeStore + .selectedEdgeType!.property_indexes.filter( + (propertyIndex) => + isUndefined( + edgeTypeStore.editedSelectedEdgeType.remove_property_indexes.find( + (removedPropertyName) => + removedPropertyName === propertyIndex.name + ) + ) + ) + .map(({ name, type, fields }, index) => { + return ( +
+
{name}
+
{propertyIndexTypeMappings[type]}
+
+ + {fields + .map( + (field, index) => index + 1 + '.' + field + ) + .join(';')} + + + {isEditEdge && ( + +

+ {t( + 'addition.message.property-del-confirm' + )} +

+

+ {t( + 'addition.message.index-del-confirm' + )} +

+
+
{ + const removedPropertyIndex = cloneDeep( + edgeTypeStore + .editedSelectedEdgeType + .remove_property_indexes + ); + + removedPropertyIndex.push( + edgeTypeStore.selectedEdgeType! + .property_indexes[index].name + ); + + edgeTypeStore.mutateEditedSelectedEdgeType( + { + ...edgeTypeStore.editedSelectedEdgeType, + remove_property_indexes: removedPropertyIndex + } + ); + + setDeleteExistPopIndexInDrawer( + null + ); + edgeTypeStore.validateEditEdgeType( + true + ); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeleteExistPopIndexInDrawer( + null + ); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteExistPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> + )} +
+
+ ); + })} + {edgeTypeStore.editedSelectedEdgeType.append_property_indexes.map( + ({ name, type, fields }, index) => { + return ( +
+
+ { + const propertyIndexEntities = cloneDeep( + edgeTypeStore.editedSelectedEdgeType + .append_property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + edgeTypeStore.validateEditEdgeType(); + } + }} + /> +
+
+ +
+
+ + + +

+ {t( + 'addition.message.property-del-confirm' + )} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const appendPropertyIndexes = cloneDeep( + edgeTypeStore.editedSelectedEdgeType! + .append_property_indexes + ); + + appendPropertyIndexes.splice( + index, + 1 + ); + + edgeTypeStore.mutateEditedSelectedEdgeType( + { + ...edgeTypeStore.editedSelectedEdgeType, + append_property_indexes: appendPropertyIndexes + } + ); + + setDeleteAddedPopIndexInDrawer(null); + edgeTypeStore.validateEditEdgeType( + true + ); + }} + > + {t('addition.common.confirm')} +
+
{ + edgeTypeStore.resetEditedSelectedEdgeType(); + setDeleteAddedPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteAddedPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> +
+
+ ); + } + )} + {isEditEdge && ( + { + if ( + edgeTypeStore.editedSelectedEdgeType + .append_property_indexes.length === 0 || + edgeTypeStore.isEditReady + ) { + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_property_indexes: [ + ...edgeTypeStore.editedSelectedEdgeType + .append_property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + edgeTypeStore.validateEditEdgeType(true); + } + }} + style={{ + cursor: 'pointer', + color: edgeTypeStore.isEditReady ? '#2b65ff' : '#999' + }} + > + {t('addition.edge.add-group')} + + )} +
+
+ + + )} +
+ + + ); +}); + +export interface EdgeTypeListManipulation { + edgeName: string; + edgeIndex: number; + switchIsEditEdge: (flag: boolean) => void; +} + +const EdgeTypeListManipulation: React.FC = observer( + ({ edgeName, edgeIndex, switchIsEditEdge }) => { + const { edgeTypeStore } = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + const [isPopDeleteModal, switchPopDeleteModal] = useState(false); + const [isDeleting, switchDeleting] = useState(false); + const deleteWrapperRef = useRef(null); + const isDeleteOrBatchDeleting = + isDeleting || + (edgeTypeStore.requestStatus.deleteEdgeType === 'pending' && + edgeTypeStore.selectedEdgeTypeNames.includes(edgeName)); + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + if ( + isPopDeleteModal && + deleteWrapperRef && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + switchPopDeleteModal(false); + } + }, + [deleteWrapperRef, isPopDeleteModal] + ); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( +
+ { + edgeTypeStore.selectEdgeType(edgeIndex); + edgeTypeStore.validateEditEdgeType(true); + switchIsEditEdge(true); + + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + style: { + color: edgeTypeStore.selectedEdgeType!.style.color, + icon: null, + with_arrow: edgeTypeStore.selectedEdgeType!.style.with_arrow, + thickness: edgeTypeStore.selectedEdgeType!.style.thickness, + display_fields: edgeTypeStore.selectedEdgeType!.style + .display_fields + } + }); + }} + > + {t('addition.common.edit')} + +
+ {isDeleteOrBatchDeleting && ( + + )} + +

+ {t('addition.edge.confirm-del-edge-type')} +

+

{t('addition.edge.confirm-del-edge-type-again')}

+

{t('addition.message.long-time-notice')}

+
+ + +
+
+ } + childrenProps={{ + className: 'metadata-properties-manipulation', + title: isDeleteOrBatchDeleting + ? t('addition.operate.del-ing') + : t('addition.common.del'), + onClick() { + if (isDeleteOrBatchDeleting) { + return; + } + + switchPopDeleteModal(true); + } + }} + > + {isDeleteOrBatchDeleting + ? t('addition.operate.del-ing') + : t('addition.common.del')} + +
+ + ); + } +); + +const EmptyEdgeTypeHints: React.FC = observer(() => { + const { edgeTypeStore } = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + return ( +
+ Add new property +
+ {t('addition.edge.no-edge-desc')} +
+
+ + +
+
+ ); +}); + +export default EdgeTypeList; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less new file mode 100644 index 000000000..db945395a --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.less @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.new-edge-type-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 16px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx new file mode 100644 index 000000000..4864443af --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/NewEdgeType.tsx @@ -0,0 +1,1099 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import classnames from 'classnames'; +import { isUndefined, cloneDeep } from 'lodash-es'; +import { + Input, + Select, + Button, + Switch, + Tooltip, + Checkbox, + Message +} from 'hubble-ui'; + +import { Tooltip as CustomTooltip } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { formatVertexIdText } from '../../../../stores/utils'; + +import type { EdgeTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; +import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; +import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; +import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; +import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; +import { useTranslation } from 'react-i18next'; + +const NewVertexType: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { t } = useTranslation(); + const { metadataPropertyStore, vertexTypeStore, edgeTypeStore } = useContext( + MetadataConfigsRootStore + ); + const [isAddNewProperty, switchIsAddNewProperty] = useState(false); + const [deletePopIndex, setDeletePopIndex] = useState(null); + const dropdownWrapperRef = useRef(null); + const deleteWrapperRef = useRef(null); + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + if ( + isAddNewProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddNewProperty(false); + } + + if ( + deletePopIndex && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + setDeletePopIndex(null); + } + }, + [deletePopIndex, isAddNewProperty] + ); + + useEffect(() => { + metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); + vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); + edgeTypeStore.validateAllNewEdgeType(true); + }, [edgeTypeStore, metadataPropertyStore, vertexTypeStore]); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( +
+
+
+ {t('addition.menu.base-info')} +
+
+
+ * + {t('addition.common.edge-type-name')}: +
+ { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + name: e.value + }); + }} + originInputProps={{ + onBlur() { + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType('name'); + } + }} + /> +
+
+
+ * + {t('addition.common.edge-style')}: +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ * + {t('addition.common.source-type')}: +
+ +
+
+
+ * + {t('addition.common.target-type')}: +
+ +
+
+
+ * + {t('addition.common.allow-multiple-connections')}: + + hint + +
+ { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + link_multi_times: checked + }); + }} + /> +
+
+
+ {edgeTypeStore.newEdgeType.link_multi_times && ( + * + )} + {t('addition.common.association-property')}: +
+
+ {edgeTypeStore.newEdgeType.properties.length !== 0 && ( +
+
+
{t('addition.common.property')}
+
{t('addition.common.allow-null')}
+
+ {edgeTypeStore.newEdgeType.properties.map((property, index) => { + const currentProperties = cloneDeep( + edgeTypeStore.newEdgeType.properties + ); + + return ( +
+
{property.name}
+
+ { + currentProperties[index].nullable = + !currentProperties[index].nullable; + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + properties: currentProperties + }); + + // remove primary keys since it could be empty value + if (checked) { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + sort_keys: + edgeTypeStore.newEdgeType.sort_keys.filter( + (key) => key !== property.name + ) + }); + } + }} + size="large" + /> +
+
+ ); + })} +
+ )} +
{ + switchIsAddNewProperty(!isAddNewProperty); + }} + > + {t('addition.common.add-property')} + toggleAddProperty +
+
+
+ {isAddNewProperty && ( +
+
+
+ {metadataPropertyStore.metadataProperties.map((property) => ( +
+ + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesIndexInSelectedEdgeType = + edgeTypeStore.addedPropertiesInSelectedEdgeType; + + addedPropertiesIndexInSelectedEdgeType.has( + property.name + ) + ? addedPropertiesIndexInSelectedEdgeType.delete( + property.name + ) + : addedPropertiesIndexInSelectedEdgeType.add( + property.name + ); + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + properties: [ + ...addedPropertiesIndexInSelectedEdgeType + ].map((propertyName) => { + const currentProperty = + edgeTypeStore.newEdgeType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined(currentProperty) + ? currentProperty.nullable + : true + }; + }) + }); + + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType('properties'); + }} + > + {property.name} + + +
+ ))} +
+
+ )} + + {edgeTypeStore.newEdgeType.link_multi_times && ( +
+
+ * + {t('addition.common.distinguishing-key')}: +
+ +
+ )} + +
+
+ * + {t('addition.edge.display-content')}: +
+ +
+ +
+ + {t('addition.edge.index-info')} + + + hint + +
+
+
+ * + {t('addition.menu.type-index')}: +
+ { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + open_label_index: checked + }); + }} + /> +
+ +
+
+ {t('addition.common.property-index')}: +
+
+ {edgeTypeStore.newEdgeType.property_indexes.length !== 0 && ( +
+
+ {t('addition.edge.index-name')} +
+
+ {t('addition.edge.index-type')} +
+
{t('addition.common.property')}
+
+ )} + {edgeTypeStore.newEdgeType.property_indexes.map( + ({ name, type, fields }, index) => ( +
+
+ { + const propertyIndexEntities = cloneDeep( + edgeTypeStore.newEdgeType.property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType('propertyIndexes'); + } + }} + /> +
+
+ +
+
+ +
+ +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const propertyIndexEntities = cloneDeep( + edgeTypeStore.newEdgeType.property_indexes + ); + + propertyIndexEntities.splice(index, 1); + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + property_indexes: propertyIndexEntities + }); + + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType( + 'propertyIndexes' + ); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeletePopIndex(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: closeIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeletePopIndex(index); + } + }} + childrenWrapperElement="img" + /> +
+ ) + )} + { + if ( + edgeTypeStore.newEdgeType.property_indexes.length === 0 || + edgeTypeStore.isAddNewPropertyIndexReady + ) { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + property_indexes: [ + ...edgeTypeStore.newEdgeType.property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + edgeTypeStore.validateAllNewEdgeType(true); + // set isAddNewPropertyIndexReady to false + edgeTypeStore.validateNewEdgeType('propertyIndexes', true); + } + }} + style={{ + cursor: 'pointer', + color: edgeTypeStore.isAddNewPropertyIndexReady + ? '#2b65ff' + : '#999', + lineHeight: '32px' + }} + > + {t('addition.edge.add-group')} + +
+
+ +
+
+ + +
+
+ + ); +}); + +export default NewVertexType; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less new file mode 100644 index 000000000..71698137e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.less @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.reuse-properties-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 16px; + + .reuse-steps { + width: 860px; + margin: 16px auto 18px; + } + + .reuse-properties { + &-row { + display: flex; + align-items: center; + margin: 18px 0 32px; + font-size: 14px; + color: #333; + + &:last-child { + margin-bottom: 24px; + } + + &-name { + width: 98px; + text-align: right; + margin-right: 13.9px; + } + } + + &-manipulations { + display: flex; + justify-content: center; + margin-bottom: 88px; + } + + &-validate { + &-duplicate, + &-exist, + &-pass { + width: 58px; + margin: 0 auto; + border-radius: 2px; + letter-spacing: 0; + line-height: 22px; + text-align: center; + } + + &-duplicate { + background: #fff2f2; + border: 1px solid #ff9499; + color: #e64552; + } + + &-exist, + &-pass { + background: #f2fff4; + border: 1px solid #7ed988; + color: #39bf45; + } + } + + &-complete-hint { + display: flex; + flex-direction: column; + justify-content: center; + margin: 88px auto 327px; + + &-description { + display: flex; + justify-content: center; + + & > div { + margin-left: 20px; + } + } + + &-manipulations { + margin: 42px auto 0; + } + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx new file mode 100644 index 000000000..6a462e4ad --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/ReuseEdgeTypes.tsx @@ -0,0 +1,1237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useState, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { + Select, + Steps, + Transfer, + Button, + Table, + Input, + Message +} from 'hubble-ui'; + +import { GraphManagementStoreContext } from '../../../../stores'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +import PassIcon from '../../../../assets/imgs/ic_pass.svg'; + +import './ReuseEdgeTypes.less'; +import { cloneDeep } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; + +const ReuseEdgeTypes: React.FC = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + const { edgeTypeStore } = metadataConfigsRootStore; + const [currentStatus, setCurrentStatus] = useState(1); + // acutally the name, not id in database + const [selectedId, mutateSelectedId] = useState<[] | string>([]); + const [selectedList, mutateSelectedList] = useState([]); + + // step 2 + const [edgeTypeEditIndex, setEdgeTypeEditIndex] = useState( + null + ); + const [vertexTypeEditIndex, setVertexTypeEditIndex] = useState( + null + ); + const [propertyEditIndex, setPropertyEditIndex] = useState( + null + ); + const [propertyIndexEditIndex, setPropertyIndexEditIndex] = useState< + number | null + >(null); + + // hack: need to call @observable at here to dispatch re-render by mobx + // since @action in onBlur() in doesn't dispatch re-render + edgeTypeStore.validateReuseErrorMessage.edgeType.toUpperCase(); + edgeTypeStore.validateReuseErrorMessage.vertexType.toUpperCase(); + edgeTypeStore.validateReuseErrorMessage.property.toUpperCase(); + edgeTypeStore.validateReuseErrorMessage.property_index.toUpperCase(); + + const edgeTypeColumnConfigs = [ + { + title: t('addition.common.edge-type-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (index !== edgeTypeEditIndex) { + return ( +
+ {text} +
+ ); + } + + return ( + { + edgeTypeStore.resetValidateReuseErrorMessage('edgeType'); + + const editedCheckedReusableData = cloneDeep( + edgeTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.edgelabel_conflicts[index].entity.name = + e.value; + + edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); + }} + originInputProps={{ + onBlur() { + edgeTypeStore.validateReuseData( + 'edgeType', + edgeTypeStore.checkedReusableData!.edgelabel_conflicts[index] + .entity.name, + edgeTypeStore.editedCheckedReusableData!.edgelabel_conflicts[ + index + ].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + width: '30%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (edgeTypeStore.reusableEdgeTypeNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + const originalName = edgeTypeStore.checkedReusableData! + .edgelabel_conflicts[index].entity.name; + const changedName = edgeTypeStore.editedCheckedReusableData! + .edgelabel_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + if (edgeTypeEditIndex === index) { + return ( +
+ { + if ( + !isChanged || + !edgeTypeStore.validateReuseData( + 'edgeType', + originalName, + changedName + ) + ) { + return; + } + + edgeTypeStore.mutateReuseData( + 'edgeType', + originalName, + changedName + ); + setEdgeTypeEditIndex(null); + edgeTypeStore.mutateReusableEdgeTypeChangeIndexes(index); + }} + > + {t('addition.common.save')} + + { + edgeTypeStore.resetValidateReuseErrorMessage('edgeType'); + setEdgeTypeEditIndex(null); + edgeTypeStore.resetEditedReusableEdgeTypeName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (edgeTypeEditIndex !== null) { + return; + } + + setEdgeTypeEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (edgeTypeEditIndex !== null) { + return; + } + + setEdgeTypeEditIndex(null); + + // remove selected status of the property in + const newSelectedList = [...selectedList].filter( + (property) => + property !== + edgeTypeStore.editedCheckedReusableData! + .edgelabel_conflicts[index].entity.name + ); + + mutateSelectedList(newSelectedList); + + // notice: useState hooks cannot sync updated state value, so the length is still 1 + if (selectedList.length === 1) { + setCurrentStatus(1); + // remove edit status after return previous + edgeTypeStore.clearReusableNameChangeIndexes(); + return; + } + + edgeTypeStore.deleteReuseData('edgelabel_conflicts', index); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + const vertexTypeColumnConfigs = [ + { + title: t('addition.common.vertex-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (index !== vertexTypeEditIndex) { + return text; + } + + return ( + { + edgeTypeStore.resetValidateReuseErrorMessage('vertexType'); + + const editedCheckedReusableData = cloneDeep( + edgeTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.vertexlabel_conflicts[ + index + ].entity.name = e.value; + + edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); + }} + originInputProps={{ + onBlur() { + edgeTypeStore.validateReuseData( + 'vertexType', + edgeTypeStore.checkedReusableData!.vertexlabel_conflicts[ + index + ].entity.name, + edgeTypeStore.editedCheckedReusableData! + .vertexlabel_conflicts[index].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + width: '30%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (edgeTypeStore.reusableVertexTypeNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + const originalName = edgeTypeStore.checkedReusableData! + .vertexlabel_conflicts[index].entity.name; + const changedName = edgeTypeStore.editedCheckedReusableData! + .vertexlabel_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + if (index === vertexTypeEditIndex) { + return ( +
+ { + if ( + !isChanged || + !edgeTypeStore.validateReuseData( + 'vertexType', + originalName, + changedName + ) + ) { + return; + } + + edgeTypeStore.mutateReuseData( + 'vertexType', + originalName, + changedName + ); + setVertexTypeEditIndex(null); + edgeTypeStore.mutateReusableVertexTypeChangeIndexes(index); + }} + > + {t('addition.common.save')} + + { + edgeTypeStore.resetValidateReuseErrorMessage('vertexType'); + setVertexTypeEditIndex(null); + edgeTypeStore.resetEditedReusableVertexTypeName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (vertexTypeEditIndex !== null) { + return; + } + + setVertexTypeEditIndex(index); + }} + > + {t('addition.operate.rename')} + +
+ ); + } + } + ]; + + const metadataPropertyColumnConfigs = [ + { + title: t('addition.common.property-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (propertyEditIndex !== index) { + return text; + } + + return ( + { + edgeTypeStore.resetValidateReuseErrorMessage('property'); + + const editedCheckedReusableData = cloneDeep( + edgeTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.propertykey_conflicts[ + index + ].entity.name = e.value; + + edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); + }} + originInputProps={{ + onBlur() { + edgeTypeStore.validateReuseData( + 'property', + edgeTypeStore.checkedReusableData!.propertykey_conflicts[ + index + ].entity.name, + edgeTypeStore.editedCheckedReusableData! + .propertykey_conflicts[index].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.common.data-type'), + dataIndex: 'data_type', + width: '15%', + render(text: string) { + if (text === 'TEXT') { + return 'string'; + } + + return text.toLowerCase(); + } + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + align: 'center', + width: '15%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (edgeTypeStore.reusablePropertyNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return
{text}
; + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + if (index === propertyEditIndex) { + const originalName = edgeTypeStore.checkedReusableData! + .propertykey_conflicts[index].entity.name; + const changedName = edgeTypeStore.editedCheckedReusableData! + .propertykey_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + return ( +
+ { + if ( + !isChanged || + !edgeTypeStore.validateReuseData( + 'property', + originalName, + changedName + ) + ) { + return; + } + + edgeTypeStore.mutateReuseData( + 'property', + originalName, + changedName + ); + setPropertyEditIndex(null); + edgeTypeStore.mutateReusablePropertyNameChangeIndexes(index); + }} + > + {t('addition.common.save')} + + { + edgeTypeStore.resetValidateReuseErrorMessage('property'); + setPropertyEditIndex(null); + edgeTypeStore.resetEditedReusablePropertyName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (propertyEditIndex !== null) { + return; + } + + setPropertyEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (propertyEditIndex !== null) { + return; + } + + setPropertyEditIndex(null); + + edgeTypeStore.deleteReuseData('propertykey_conflicts', index); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + const metadataPropertyIndexColumnConfigs = [ + { + title: t('addition.common.property-index-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (index !== propertyIndexEditIndex) { + return text; + } + + return ( + { + edgeTypeStore.resetValidateReuseErrorMessage('property_index'); + + const editedCheckedReusableData = cloneDeep( + edgeTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.propertyindex_conflicts[ + index + ].entity.name = e.value; + + edgeTypeStore.mutateEditedReusableData(editedCheckedReusableData); + }} + originInputProps={{ + onBlur() { + edgeTypeStore.validateReuseData( + 'property_index', + edgeTypeStore.checkedReusableData!.propertyindex_conflicts[ + index + ].entity.name, + edgeTypeStore.editedCheckedReusableData! + .propertyindex_conflicts[index].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.common.corresponding-type'), + dataIndex: 'owner', + width: '15%' + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + align: 'center', + width: '15%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (edgeTypeStore.reusablePropertyIndexNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return
{text}
; + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + if (index === propertyIndexEditIndex) { + const originalName = edgeTypeStore.checkedReusableData! + .propertyindex_conflicts[index].entity.name; + const changedName = edgeTypeStore.editedCheckedReusableData! + .propertyindex_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + return ( +
+ { + if ( + !isChanged || + !edgeTypeStore.validateReuseData( + 'property_index', + originalName, + changedName + ) + ) { + return; + } + + edgeTypeStore.mutateReuseData( + 'property_index', + originalName, + changedName + ); + setPropertyIndexEditIndex(null); + edgeTypeStore.mutateReusableVertexTypeChangeIndexes(index); + }} + > + {t('addition.common.save')} + + { + edgeTypeStore.resetValidateReuseErrorMessage( + 'property_index' + ); + setPropertyIndexEditIndex(null); + edgeTypeStore.resetEditedReusablePropertyIndexName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (propertyIndexEditIndex !== null) { + return; + } + + setPropertyIndexEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (propertyIndexEditIndex !== null) { + return; + } + + setPropertyIndexEditIndex(null); + + edgeTypeStore.deleteReuseData('propertyindex_conflicts', index); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + useEffect(() => { + // unlike metadata properties, all vertex types only needs here(in reuse) + edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); + }, [edgeTypeStore]); + + return ( +
+
+ {t('addition.edge.multiplexing-edge-type')} +
+
+ {t('addition.edge.multiplexing-edge-type-notice')} +
+
+ + {[ + t('addition.menu.select-reuse-item'), + t('addition.menu.confirm-reuse-item'), + t('addition.menu.complete-reuse') + ].map((title: string, index: number) => ( + index + 1 + ? 'finish' + : 'wait' + } + key={title} + /> + ))} + + + {currentStatus === 1 && ( + <> +
+
+ * + {t('addition.newGraphConfig.id')}: +
+ +
+
+
+ * + {t('addition.edge.multiplexing-edge-type')}: +
+ name + )} + selectedList={selectedList} + showSearchBox={false} + candidateTreeStyle={{ + width: 359, + fontSize: 14 + }} + selectedTreeStyle={{ + width: 359, + fontSize: 14 + }} + handleSelect={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleSelectAll={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleDelete={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleDeleteAll={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + /> +
+
+ + +
+ + )} + + {currentStatus === 2 && ( + <> +
+ {t('addition.common.selected-edge-type')} +
+
({ + name: entity.name, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ {t('addition.common.selected-vertex-type')} +
+
({ + name: entity.name, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ {t('addition.common.selected-property')} +
+
({ + name: entity.name, + data_type: entity.data_type, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ {t('addition.common.selected-property-index')} +
+
({ + name: entity.name, + owner: entity.owner, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ + +
+ + )} + + {currentStatus === 3 && ( +
+
+ {t('addition.message.reuse-complete')} +
+
{t('addition.message.reuse-complete')}
+
{t('addition.message.vertex-type-reuse-success')}
+
+
+
+ + +
+
+ )} + + + ); +}); + +export default ReuseEdgeTypes; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/index.ts new file mode 100644 index 000000000..2326af6d4 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/edge-type/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import NewEdgeType from './NewEdgeType'; +import EdgeTypeList from './EdgeTypeList'; + +export { NewEdgeType, EdgeTypeList }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx new file mode 100644 index 000000000..2ff3edae7 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckAndEditEdge.tsx @@ -0,0 +1,1415 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import classnames from 'classnames'; +import { cloneDeep, merge, isUndefined, isEmpty } from 'lodash-es'; +import { + Drawer, + Button, + Input, + Select, + Switch, + Checkbox, + Message +} from 'hubble-ui'; + +import { Tooltip } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import { + mapMetadataProperties, + generateGraphModeId, + formatVertexIdText, + edgeWidthMapping +} from '../../../../stores/utils'; + +import type { EdgeTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; +import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; +import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; +import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; +import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; +import i18next from '../../../../i18n'; +import { useTranslation } from 'react-i18next'; + +const propertyIndexTypeMappings: Record = { + SECONDARY: i18next.t('addition.menu.secondary-index'), + RANGE: i18next.t('addition.menu.range-index'), + SEARCH: i18next.t('addition.menu.full-text-index') +}; + +const CheckAndEditEdge: React.FC = observer(() => { + const { metadataPropertyStore, edgeTypeStore, graphViewStore } = useContext( + MetadataConfigsRootStore + ); + const { t } = useTranslation(); + const [isAddProperty, switchIsAddProperty] = useState(false); + const [isDeletePop, switchDeletePop] = useState(false); + const [ + deleteExistPopIndexInDrawer, + setDeleteExistPopIndexInDrawer + ] = useState(null); + const [ + deleteAddedPopIndexInDrawer, + setDeleteAddedPopIndexInDrawer + ] = useState(null); + + const deleteWrapperRef = useRef(null); + const dropdownWrapperRef = useRef(null); + const deleteWrapperInDrawerRef = useRef(null); + + const isEditEdge = graphViewStore.currentDrawer === 'edit-edge'; + + const metadataDrawerOptionClass = classnames({ + 'metadata-drawer-options': true, + 'metadata-drawer-options-disabled': isEditEdge + }); + + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + const drawerWrapper = document.querySelector( + '.new-fc-one-drawer-content-wrapper' + ); + + if ( + graphViewStore.currentDrawer === 'check-edge' && + drawerWrapper && + !drawerWrapper.contains(e.target as Element) + ) { + /* + handleOutSideClick is being called after the value assignment of data and drawer-name, + we need to judge whether a node or edge is being clicked + */ + if (graphViewStore.isNodeOrEdgeClicked) { + // if node/edge is clicked, reset state and prepare for next outside clicks + graphViewStore.switchNodeOrEdgeClicked(false); + } else { + graphViewStore.setCurrentDrawer(''); + } + } + + if ( + isEditEdge && + isAddProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddProperty(false); + return; + } + + if ( + isDeletePop !== null && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + switchDeletePop(false); + } + }, + [graphViewStore, isEditEdge, isAddProperty, isDeletePop] + ); + + const handleCloseDrawer = () => { + switchIsAddProperty(false); + graphViewStore.setCurrentDrawer(''); + edgeTypeStore.selectEdgeType(null); + // clear mutations in + edgeTypeStore.resetEditedSelectedEdgeType(); + }; + + const handleDeleteEdge = async () => { + // cache vertex name here before it gets removed + const edgeName = edgeTypeStore.selectedEdgeType!.name; + const edgeId = generateGraphModeId( + edgeName, + edgeTypeStore.selectedEdgeType!.source_label, + edgeTypeStore.selectedEdgeType!.target_label + ); + const edgeInfo = graphViewStore.visDataSet!.edges.get(edgeName); + + switchDeletePop(false); + handleCloseDrawer(); + + graphViewStore.visDataSet!.edges.remove(edgeId); + + await edgeTypeStore.deleteEdgeType([edgeName]); + + if (edgeTypeStore.requestStatus.deleteEdgeType === 'success') { + Message.success({ + content: t('addition.common.del-success'), + size: 'medium', + showCloseIcon: false + }); + + edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); + } + + if (edgeTypeStore.requestStatus.deleteEdgeType === 'failed') { + Message.error({ + content: edgeTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + + // if failed, re-add edge + graphViewStore.visDataSet?.edges.add(edgeInfo); + } + }; + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + if (edgeTypeStore.selectedEdgeType === null) { + return null; + } + + return ( + { + if (!isEditEdge) { + graphViewStore.setCurrentDrawer('edit-edge'); + edgeTypeStore.validateEditEdgeType(); + } else { + const id = generateGraphModeId( + edgeTypeStore.selectedEdgeType!.name, + edgeTypeStore.selectedEdgeType!.source_label, + edgeTypeStore.selectedEdgeType!.target_label + ); + const updateInfo: Record = {}; + + if ( + !isEmpty(edgeTypeStore.editedSelectedEdgeType.append_properties) + ) { + const mappedProperties = mapMetadataProperties( + edgeTypeStore.selectedEdgeType!.properties, + metadataPropertyStore.metadataProperties + ); + + const newMappedProperties = mapMetadataProperties( + edgeTypeStore.editedSelectedEdgeType.append_properties, + metadataPropertyStore.metadataProperties + ); + + const mergedProperties = merge( + mappedProperties, + newMappedProperties + ); + + updateInfo.title = ` + + + ${Object.entries(mergedProperties) + .map(([key, value]) => { + const convertedValue = + value.toLowerCase() === 'text' + ? 'string' + : value.toLowerCase(); + + return ``; + }) + .join('')} + `; + } + + if (edgeTypeStore.editedSelectedEdgeType.style.color !== null) { + updateInfo.color = { + color: edgeTypeStore.editedSelectedEdgeType.style.color, + highlight: edgeTypeStore.editedSelectedEdgeType.style.color, + hover: edgeTypeStore.editedSelectedEdgeType.style.color + }; + } + + if ( + edgeTypeStore.editedSelectedEdgeType.style.with_arrow !== null + ) { + updateInfo.arrows = + edgeTypeStore.editedSelectedEdgeType.style.with_arrow === true + ? 'to' + : ''; + } + + if ( + edgeTypeStore.editedSelectedEdgeType.style.thickness !== null + ) { + updateInfo.value = + edgeWidthMapping[ + edgeTypeStore.editedSelectedEdgeType.style.thickness + ]; + } + + if (!isEmpty(updateInfo)) { + updateInfo.id = id; + + graphViewStore.visDataSet!.edges.update(updateInfo); + } + await edgeTypeStore.updateEdgeType(); + + if (edgeTypeStore.requestStatus.updateEdgeType === 'failed') { + Message.error({ + content: edgeTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + + return; + } + + if (edgeTypeStore.requestStatus.updateEdgeType === 'success') { + Message.success({ + content: t('addition.operate.modify-success'), + size: 'medium', + showCloseIcon: false + }); + } + + handleCloseDrawer(); + graphViewStore.visNetwork!.unselectAll(); + edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); + } + }} + key="drawer-manipulation" + > + {isEditEdge ? t('addition.common.save') : t('addition.common.edit')} + , + +

+ {t('addition.edge.confirm-del-edge-type')} +

+

{t('addition.edge.confirm-del-edge-careful-notice')}

+

{t('addition.message.long-time-notice')}

+
+
+ {t('addition.common.confirm')} +
+
{ + switchDeletePop(false); + }} + > + {t('addition.common.cancel')} +
+
+ + } + childrenProps={{ + onClick() { + if (isEditEdge) { + handleCloseDrawer(); + return; + } + + switchDeletePop(true); + } + }} + > + +
+ ]} + > +
+
+
+ {t('addition.menu.base-info')} +
+
+
+ {t('addition.common.edge-type-name')}: +
+
+ {edgeTypeStore.selectedEdgeType!.name} +
+
+ +
+
+ + {t('addition.common.edge-style')}: + +
+
+ +
+
+ +
+
+ +
+
+
+
+ {t('addition.common.source-type')}: +
+
+ {edgeTypeStore.selectedEdgeType!.source_label} +
+
+
+
+ {t('addition.common.target-type')}: +
+
+ {edgeTypeStore.selectedEdgeType!.target_label} +
+
+
+
+ {t('addition.common.allow-multiple-connections')}: +
+ +
+
+
+ {t('addition.common.association-property')}: +
+
+
+ {t('addition.common.property')} + {t('addition.common.allow-null')} +
+ {edgeTypeStore.selectedEdgeType!.properties.map( + ({ name, nullable }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditEdge && + edgeTypeStore.editedSelectedEdgeType.append_properties.map( + ({ name }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditEdge && ( +
{ + switchIsAddProperty(!isAddProperty); + }} + > + + {t('addition.common.add-property')} + + toogleAddProperties +
+ )} + {isEditEdge && isAddProperty && ( +
+ {metadataPropertyStore.metadataProperties + .filter( + (property) => + edgeTypeStore.selectedEdgeType!.properties.find( + ({ name }) => name === property.name + ) === undefined + ) + .map((property) => ( +
+ + + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesInSelectedVertextType = + edgeTypeStore.addedPropertiesInSelectedEdgeType; + + addedPropertiesInSelectedVertextType.has( + property.name + ) + ? addedPropertiesInSelectedVertextType.delete( + property.name + ) + : addedPropertiesInSelectedVertextType.add( + property.name + ); + + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_properties: [ + ...addedPropertiesInSelectedVertextType + ].map((propertyName) => { + const currentProperty = edgeTypeStore.newEdgeType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined(currentProperty) + ? currentProperty.nullable + : true + }; + }) + }); + }} + > + {property.name} + + +
+ ))} +
+ )} +
+
+ +
+
+ {t('addition.common.distinguishing-key-property')}: +
+
+ {edgeTypeStore.selectedEdgeType!.sort_keys.join(';')} +
+
+ +
+
+ + {t('addition.edge.display-content')}: + +
+ {isEditEdge ? ( + + ) : ( +
+ {edgeTypeStore.selectedEdgeType?.style.display_fields + .map((field) => + formatVertexIdText( + field, + t('addition.function-parameter.edge-type') + ) + ) + .join('-')} +
+ )} +
+ +
+ {t('addition.edge.index-info')} +
+
+
+ {t('addition.menu.type-index')}: +
+ +
+
+
+ {t('addition.common.property-index')}: +
+
+ {(edgeTypeStore.selectedEdgeType!.property_indexes.length !== 0 || + edgeTypeStore.editedSelectedEdgeType.append_property_indexes + .length !== 0) && ( +
+ {t('addition.edge.index-name')} + {t('addition.edge.index-type')} + {t('addition.common.property')} +
+ )} + {edgeTypeStore + .selectedEdgeType!.property_indexes.filter((propertyIndex) => + isUndefined( + edgeTypeStore.editedSelectedEdgeType.remove_property_indexes.find( + (removedPropertyName) => + removedPropertyName === propertyIndex.name + ) + ) + ) + .map(({ name, type, fields }, index) => { + return ( +
+
{name}
+
{propertyIndexTypeMappings[type]}
+
+ + {fields + .map((field, index) => index + 1 + '.' + field) + .join(';')} + + + {isEditEdge && ( + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const removedPropertyIndex = cloneDeep( + edgeTypeStore.editedSelectedEdgeType + .remove_property_indexes + ); + + removedPropertyIndex.push( + edgeTypeStore.selectedEdgeType! + .property_indexes[index].name + ); + + edgeTypeStore.mutateEditedSelectedEdgeType( + { + ...edgeTypeStore.editedSelectedEdgeType, + remove_property_indexes: removedPropertyIndex + } + ); + + setDeleteExistPopIndexInDrawer(null); + edgeTypeStore.validateEditEdgeType(true); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeleteExistPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteExistPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> + )} +
+
+ ); + })} + {edgeTypeStore.editedSelectedEdgeType.append_property_indexes.map( + ({ name, type, fields }, index) => { + return ( +
+
+ { + const propertyIndexEntities = cloneDeep( + edgeTypeStore.editedSelectedEdgeType + .append_property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + edgeTypeStore.validateEditEdgeType(); + } + }} + /> +
+
+ +
+
+ + + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const appendPropertyIndexes = cloneDeep( + edgeTypeStore.editedSelectedEdgeType! + .append_property_indexes + ); + + appendPropertyIndexes.splice(index, 1); + + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_property_indexes: appendPropertyIndexes + }); + + setDeleteAddedPopIndexInDrawer(null); + edgeTypeStore.validateEditEdgeType(true); + }} + > + {t('addition.common.confirm')} +
+
{ + edgeTypeStore.resetEditedSelectedEdgeType(); + setDeleteAddedPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteAddedPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> +
+
+ ); + } + )} + {isEditEdge && ( +
{ + if ( + edgeTypeStore.editedSelectedEdgeType + .append_property_indexes.length === 0 || + edgeTypeStore.isEditReady + ) { + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + append_property_indexes: [ + ...edgeTypeStore.editedSelectedEdgeType + .append_property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + edgeTypeStore.validateEditEdgeType(true); + } + }} + style={{ + cursor: 'pointer', + color: edgeTypeStore.isEditReady ? '#2b65ff' : '#999' + }} + > + {t('addition.edge.add-group')} +
+ )} +
+
+ + +
+ ); +}); + +export default CheckAndEditEdge; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx new file mode 100644 index 000000000..c8a064209 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckAndEditVertex.tsx @@ -0,0 +1,1310 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import classnames from 'classnames'; +import { cloneDeep, isUndefined, merge, isEmpty } from 'lodash-es'; +import { + Drawer, + Button, + Input, + Select, + Switch, + Checkbox, + Message +} from 'hubble-ui'; + +import { Tooltip } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import { + mapMetadataProperties, + formatVertexIdText, + vertexRadiusMapping +} from '../../../../stores/utils'; + +import type { + VertexTypeValidatePropertyIndexes, + VertexTypeProperty +} from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; +import i18next from '../../../../i18n'; +import { useTranslation } from 'react-i18next'; + +const IDStrategyMappings: Record = { + PRIMARY_KEY: i18next.t('addition.constant.primary-key-id'), + AUTOMATIC: i18next.t('addition.constant.automatic-generation'), + CUSTOMIZE_STRING: i18next.t('addition.constant.custom-string'), + CUSTOMIZE_NUMBER: i18next.t('addition.constant.custom-number'), + CUSTOMIZE_UUID: i18next.t('addition.constant.custom-uuid') +}; + +const propertyIndexTypeMappings: Record = { + SECONDARY: i18next.t('addition.menu.secondary-index'), + RANGE: i18next.t('addition.menu.range-index'), + SEARCH: i18next.t('addition.menu.full-text-index') +}; + +const CheckAndEditVertex: React.FC = observer(() => { + const { metadataPropertyStore, vertexTypeStore, graphViewStore } = useContext( + MetadataConfigsRootStore + ); + const { t } = useTranslation(); + const [isAddProperty, switchIsAddProperty] = useState(false); + const [isDeletePop, switchDeletePop] = useState(false); + const [ + deleteExistPopIndexInDrawer, + setDeleteExistPopIndexInDrawer + ] = useState(null); + const [ + deleteAddedPopIndexInDrawer, + setDeleteAddedPopIndexInDrawer + ] = useState(null); + + const deleteWrapperRef = useRef(null); + const dropdownWrapperRef = useRef(null); + const deleteWrapperInDrawerRef = useRef(null); + + const isEditVertex = graphViewStore.currentDrawer === 'edit-vertex'; + + const metadataDrawerOptionClass = classnames({ + 'metadata-drawer-options': true, + 'metadata-drawer-options-disabled': isEditVertex + }); + + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + const drawerWrapper = document.querySelector( + '.new-fc-one-drawer-content-wrapper' + ); + + if ( + graphViewStore.currentDrawer === 'check-vertex' && + drawerWrapper && + !drawerWrapper.contains(e.target as Element) + ) { + /* + handleOutSideClick is being called after the value assignment of data and drawer-name, + we need to judge whether a node or edge is being clicked + */ + if (graphViewStore.isNodeOrEdgeClicked) { + // if node/edge is clicked, reset state and prepare for next outside clicks + graphViewStore.switchNodeOrEdgeClicked(false); + } else { + graphViewStore.setCurrentDrawer(''); + } + } + + if ( + isAddProperty && + isEditVertex && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddProperty(false); + return; + } + + if ( + isDeletePop && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + switchDeletePop(false); + } + }, + [graphViewStore, isAddProperty, isEditVertex, isDeletePop] + ); + + const handleCloseDrawer = () => { + switchIsAddProperty(false); + graphViewStore.setCurrentDrawer(''); + vertexTypeStore.selectVertexType(null); + // clear mutations in + vertexTypeStore.resetEditedSelectedVertexType(); + }; + + const handleDeleteVertex = async () => { + // cache vertex name here before it gets removed + const vertexName = vertexTypeStore.selectedVertexType!.name; + const vertexInfo = graphViewStore.visDataSet?.nodes.get(vertexName); + const connectedEdgeInfos = graphViewStore.visDataSet?.edges.get( + graphViewStore.visNetwork?.getConnectedEdges(vertexName) + ); + + // close + handleCloseDrawer(); + switchDeletePop(false); + + // if node > 1, delete node on local before send request + if (graphViewStore.visDataSet!.nodes.length > 1) { + graphViewStore.visDataSet!.nodes.remove(vertexName); + } + + await vertexTypeStore.deleteVertexType([vertexName]); + + if (vertexTypeStore.requestStatus.deleteVertexType === 'success') { + Message.success({ + content: t('addition.common.del-success'), + size: 'medium', + showCloseIcon: false + }); + + vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); + + // if delete the last node, fetch graph data to trigger re-render to reveal + if (graphViewStore.visDataSet?.nodes.length === 1) { + graphViewStore.switchGraphDataEmpty(true); + graphViewStore.fetchGraphViewData(); + } + } + + if (vertexTypeStore.requestStatus.deleteVertexType === 'failed') { + Message.error({ + content: vertexTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + + // if failed, re-add vertex and edges + graphViewStore.visDataSet!.nodes.add(vertexInfo); + graphViewStore.visDataSet!.edges.add(connectedEdgeInfos); + } + }; + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + if (vertexTypeStore.selectedVertexType === null) { + return null; + } + + return ( + { + if (!isEditVertex) { + graphViewStore.setCurrentDrawer('edit-vertex'); + vertexTypeStore.validateEditVertexType(); + } else { + const id = vertexTypeStore.selectedVertexType!.name; + const updateInfo: Record = {}; + + if ( + !isEmpty( + vertexTypeStore.editedSelectedVertexType.append_properties + ) + ) { + const mappedProperties = mapMetadataProperties( + vertexTypeStore.selectedVertexType!.properties, + metadataPropertyStore.metadataProperties + ); + + const newMappedProperties = mapMetadataProperties( + vertexTypeStore.editedSelectedVertexType.append_properties, + metadataPropertyStore.metadataProperties + ); + + const mergedProperties = merge( + mappedProperties, + newMappedProperties + ); + + updateInfo.title = ` + + + ${Object.entries(mergedProperties) + .map(([key, value]) => { + const convertedValue = + value.toLowerCase() === 'text' + ? 'string' + : value.toLowerCase(); + + return ``; + }) + .join('')} + `; + } + + if ( + vertexTypeStore.editedSelectedVertexType.style.color !== null + ) { + updateInfo.color = { + background: + vertexTypeStore.editedSelectedVertexType.style.color, + border: vertexTypeStore.editedSelectedVertexType.style.color + }; + } + + if ( + vertexTypeStore.editedSelectedVertexType.style.size !== null + ) { + updateInfo.value = + vertexRadiusMapping[ + vertexTypeStore.editedSelectedVertexType.style.size + ]; + } + + if (!isEmpty(updateInfo)) { + updateInfo.id = id; + + graphViewStore.visDataSet!.nodes.update(updateInfo); + } + await vertexTypeStore.updateVertexType(); + + if (vertexTypeStore.requestStatus.updateVertexType === 'failed') { + Message.error({ + content: vertexTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + + return; + } + + if ( + vertexTypeStore.requestStatus.updateVertexType === 'success' + ) { + Message.success({ + content: t('addition.operate.modify-success'), + size: 'medium', + showCloseIcon: false + }); + } + + handleCloseDrawer(); + graphViewStore.visNetwork!.unselectAll(); + vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); + } + }} + key="drawer-manipulation" + > + {isEditVertex ? t('addition.common.save') : t('addition.common.edit')} + , + + {vertexTypeStore.vertexTypeUsingStatus && + vertexTypeStore.vertexTypeUsingStatus[ + vertexTypeStore.selectedVertexType!.name + ] ? ( +

+ {t('addition.vertex.using-cannot-delete')} +

+ ) : ( + <> +

+ {t('addition.vertex.del-vertex-confirm')} +

+

{t('addition.edge.confirm-del-edge-careful-notice')}

+

{t('addition.message.long-time-notice')}

+
+
+ {t('addition.common.confirm')} +
+
{ + switchDeletePop(false); + }} + > + {t('addition.common.cancel')} +
+
+ + )} + + } + childrenProps={{ + onClick() { + if (isEditVertex) { + handleCloseDrawer(); + return; + } + + switchDeletePop(true); + } + }} + > + +
+ ]} + > +
+
+ {t('addition.menu.base-info')} +
+
+
+ {t('addition.vertex.vertex-type-name')}: +
+
+ {vertexTypeStore.selectedVertexType!.name} +
+
+ +
+
+ + {t('addition.vertex.vertex-style')}: + +
+
+ +
+
+ +
+
+
+
+ {t('addition.common.id-strategy')}: +
+ {IDStrategyMappings[vertexTypeStore.selectedVertexType!.id_strategy]} +
+
+
+ {t('addition.common.association-property')}: +
+
+
+ {t('addition.common.property')} + {t('addition.common.allow-null')} +
+ {vertexTypeStore.selectedVertexType!.properties.map( + ({ name, nullable }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditVertex && + vertexTypeStore.editedSelectedVertexType.append_properties.map( + ({ name }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditVertex && ( +
{ + switchIsAddProperty(!isAddProperty); + }} + > + + {t('addition.common.add-property')} + + toogleAddProperties +
+ )} + {isEditVertex && isAddProperty && ( +
+ {metadataPropertyStore.metadataProperties + .filter( + (property) => + vertexTypeStore.selectedVertexType!.properties.find( + ({ name }) => name === property.name + ) === undefined + ) + .map((property) => ( +
+ + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesInSelectedVertextType = + vertexTypeStore.addedPropertiesInSelectedVertextType; + + addedPropertiesInSelectedVertextType.has( + property.name + ) + ? addedPropertiesInSelectedVertextType.delete( + property.name + ) + : addedPropertiesInSelectedVertextType.add( + property.name + ); + + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + append_properties: [ + ...addedPropertiesInSelectedVertextType + ].map((propertyName) => { + const currentProperty = vertexTypeStore.newVertexType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined(currentProperty) + ? currentProperty.nullable + : true + }; + }) + }); + }} + > + {property.name} + + +
+ ))} +
+ )} +
+
+
+
+ {t('addition.common.primary-key-property')}: +
+
+ {vertexTypeStore.selectedVertexType!.primary_keys.join(';')} +
+
+
+
+ + {t('addition.vertex.vertex-display-content')}: + +
+ {isEditVertex ? ( + + ) : ( +
+ {vertexTypeStore.selectedVertexType?.style.display_fields + .map((field) => + formatVertexIdText( + field, + t('addition.function-parameter.vertex-id') + ) + ) + .join('-')} +
+ )} +
+
+ {t('addition.edge.index-info')} +
+
+
+ {t('addition.menu.type-index')}: +
+ +
+
+
+ {t('addition.common.property-index')}: +
+
+ {(vertexTypeStore.selectedVertexType!.property_indexes.length !== + 0 || + vertexTypeStore.editedSelectedVertexType.append_property_indexes + .length !== 0) && ( +
+ {t('addition.edge.index-name')} + {t('addition.edge.index-type')} + {t('addition.common.property')} +
+ )} + {vertexTypeStore + .selectedVertexType!.property_indexes.filter((propertyIndex) => + isUndefined( + vertexTypeStore.editedSelectedVertexType.remove_property_indexes.find( + (removedPropertyName) => + removedPropertyName === propertyIndex.name + ) + ) + ) + .map(({ name, type, fields }, index) => { + return ( +
+
{name}
+
{propertyIndexTypeMappings[type]}
+
+ + {fields + .map((field, index) => index + 1 + '.' + field) + .join(';')} + + {isEditVertex && ( + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const removedPropertyIndexes = cloneDeep( + vertexTypeStore.editedSelectedVertexType + .remove_property_indexes + ); + + removedPropertyIndexes.push( + vertexTypeStore.selectedVertexType! + .property_indexes[index].name + ); + + vertexTypeStore.mutateEditedSelectedVertexType( + { + ...vertexTypeStore.editedSelectedVertexType, + remove_property_indexes: removedPropertyIndexes + } + ); + + setDeleteExistPopIndexInDrawer(null); + vertexTypeStore.validateEditVertexType( + true + ); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeleteExistPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteExistPopIndexInDrawer(index); + } + }} + /> + )} +
+
+ ); + })} + {vertexTypeStore.editedSelectedVertexType.append_property_indexes.map( + ({ name, type, fields }, index) => { + return ( +
+
+ { + const propertyIndexEntities = cloneDeep( + vertexTypeStore.editedSelectedVertexType + .append_property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + append_property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + vertexTypeStore.validateEditVertexType(); + } + }} + /> +
+
+ +
+
+ + + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const appendPropertyIndexes = cloneDeep( + vertexTypeStore.editedSelectedVertexType! + .append_property_indexes + ); + + appendPropertyIndexes.splice(index, 1); + + vertexTypeStore.mutateEditedSelectedVertexType( + { + ...vertexTypeStore.editedSelectedVertexType, + append_property_indexes: appendPropertyIndexes + } + ); + + setDeleteAddedPopIndexInDrawer(null); + vertexTypeStore.validateEditVertexType(true); + }} + > + {t('addition.common.confirm')} +
+
{ + vertexTypeStore.resetEditedSelectedVertexType(); + setDeleteAddedPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteAddedPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> +
+
+ ); + } + )} + {isEditVertex && ( +
{ + if ( + vertexTypeStore.editedSelectedVertexType + .append_property_indexes.length === 0 || + vertexTypeStore.isEditReady + ) { + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + append_property_indexes: [ + ...vertexTypeStore.editedSelectedVertexType + .append_property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + vertexTypeStore.validateEditVertexType(true); + } + }} + style={{ + cursor: 'pointer', + color: vertexTypeStore.isEditReady ? '#2b65ff' : '#999' + }} + > + {t('addition.edge.add-group')} +
+ )} +
+ + +
+ ); +}); + +export default CheckAndEditVertex; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx new file mode 100644 index 000000000..0bcef5713 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CheckProperty.tsx @@ -0,0 +1,239 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import { Drawer, Table, Message } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { Tooltip } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +import type { MetadataProperty } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; +import { signal } from 'codemirror'; + +const CheckProperty: React.FC = observer(() => { + const { metadataPropertyStore, graphViewStore } = useContext( + MetadataConfigsRootStore + ); + const { t } = useTranslation(); + const [popIndex, setPopIndex] = useState(null); + const deleteWrapperRef = useRef(null); + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // note: .new-fc-one-drawer-content-wrapper sometimes only contain one single element? + // however if you capture .new-fc-one-drawer-wrapper-body-container it still returns itself and contains all children + // thus here we capture body-container as drawer + const drawerWrapper = document.querySelector( + '.new-fc-one-drawer-wrapper-body-container' + ); + + const deleteWrapper = document.querySelector('.metadata-graph-tooltips'); + + if ( + graphViewStore.currentDrawer === 'check-property' && + drawerWrapper && + !drawerWrapper.contains(e.target as Element) + ) { + if ( + deleteWrapper === null && + (e.target as Element).className !== + 'metadata-graph-property-manipulation' + ) { + graphViewStore.setCurrentDrawer(''); + } + + if ( + deleteWrapper && + !deleteWrapper.contains(e.target as Element) && + (e.target as Element).className !== + 'metadata-graph-property-manipulation' + ) { + graphViewStore.setCurrentDrawer(''); + } + } + + if ( + popIndex !== null && + deleteWrapper && + !deleteWrapper.contains(e.target as Element) + ) { + setPopIndex(null); + } + }, + [graphViewStore, popIndex] + ); + + const handleCloseDrawer = () => { + graphViewStore.setCurrentDrawer(''); + }; + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, true); + + return () => { + document.removeEventListener('click', handleOutSideClick, true); + }; + }, [handleOutSideClick]); + + const columnConfigs = [ + { + title: t('addition.common.property-name'), + dataIndex: 'name' + }, + { + title: t('addition.common.data-type'), + dataIndex: 'data_type', + render(text: string) { + const realText = text === 'TEXT' ? 'string' : text.toLowerCase(); + + return realText; + } + }, + { + title: t('addition.common.cardinal-number'), + dataIndex: 'cardinality' + }, + { + title: t('addition.operate.operate'), + render(_: any, records: MetadataProperty, index: number) { + return ( + + {metadataPropertyStore.metadataPropertyUsingStatus && + metadataPropertyStore.metadataPropertyUsingStatus[ + records.name + ] ? ( +

+ {t('addition.message.property-using-cannot-delete')} +

+ ) : ( + <> +

{t('addition.message.property-del-confirm')}

+

{t('addition.edge.confirm-del-edge-careful-notice')}

+
+
{ + setPopIndex(null); + await metadataPropertyStore.deleteMetadataProperty([ + records.name + ]); + if ( + metadataPropertyStore.requestStatus + .deleteMetadataProperty === 'success' + ) { + Message.success({ + content: t('addition.common.del-success'), + size: 'medium', + showCloseIcon: false + }); + metadataPropertyStore.fetchMetadataPropertyList(); + } + if ( + metadataPropertyStore.requestStatus + .deleteMetadataProperty === 'failed' + ) { + Message.error({ + content: metadataPropertyStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('addition.common.confirm')} +
+
{ + setPopIndex(null); + }} + > + {t('addition.common.cancel')} +
+
+ + )} + + } + childrenProps={{ + className: 'metadata-graph-property-manipulation', + async onClick() { + await metadataPropertyStore.checkIfUsing([records.name]); + if ( + metadataPropertyStore.requestStatus.checkIfUsing === 'success' + ) { + setPopIndex(index); + } + } + }} + > + {t('addition.common.del')} +
+ ); + } + } + ]; + + return ( + +
+
+ + + ); +}); + +export default CheckProperty; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx new file mode 100644 index 000000000..87268d57b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateEdge.tsx @@ -0,0 +1,1177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import classnames from 'classnames'; +import { cloneDeep, isUndefined } from 'lodash-es'; +import { + Drawer, + Button, + Input, + Select, + Switch, + Checkbox, + Tooltip, + Message +} from 'hubble-ui'; + +import { Tooltip as CustomTooltip } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import { EdgeTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; +import { + mapMetadataProperties, + generateGraphModeId, + edgeWidthMapping, + formatVertexIdText +} from '../../../../stores/utils'; +import { useTranslation } from 'react-i18next'; + +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; +import SelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow_selected.svg'; +import NoSelectedSoilidArrowIcon from '../../../../assets/imgs/ic_arrow.svg'; +import SelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight_selected.svg'; +import NoSelectedSoilidStraightIcon from '../../../../assets/imgs/ic_straight.svg'; + +const CreateEdge: React.FC = observer(() => { + const { + metadataPropertyStore, + vertexTypeStore, + edgeTypeStore, + graphViewStore + } = useContext(MetadataConfigsRootStore); + const [isAddNewProperty, switchIsAddNewProperty] = useState(false); + const [deletePopIndex, setDeletePopIndex] = useState(null); + const deleteWrapperRef = useRef(null); + const dropdownWrapperRef = useRef(null); + const { t } = useTranslation(); + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // if clicked element is not on dropdown, collpase it + if ( + isAddNewProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddNewProperty(false); + } + + if ( + deletePopIndex && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + setDeletePopIndex(null); + } + }, + [deletePopIndex, isAddNewProperty] + ); + + const handleCloseDrawer = () => { + graphViewStore.setCurrentDrawer(''); + edgeTypeStore.resetNewEdgeType(); + edgeTypeStore.resetAddedPropertiesInSelectedEdgeType(); + }; + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( + { + edgeTypeStore.validateAllNewEdgeType(); + + if (!edgeTypeStore.isCreatedReady) { + return; + } + + const { + name, + source_label, + target_label, + properties, + sort_keys, + style, + ...rest + } = edgeTypeStore.newEdgeType; + + const mappedProperties = mapMetadataProperties( + properties, + metadataPropertyStore.metadataProperties + ); + + graphViewStore.visDataSet!.edges.add({ + ...rest, + id: generateGraphModeId(name, source_label, target_label), + label: name.length <= 15 ? name : name.slice(0, 15) + '...', + from: source_label, + to: target_label, + value: edgeWidthMapping[style.thickness], + font: { size: 16, strokeWidth: 0, color: '#666' }, + arrows: style.with_arrow === true ? 'to' : '', + title: ` + + + ${Object.entries(mappedProperties) + .map(([key, value]) => { + const convertedValue = + value.toLowerCase() === 'text' + ? 'string' + : value.toLowerCase(); + + const sortKeyIndex = sort_keys.findIndex( + (sortKey) => sortKey === key + ); + + return ``; + }) + .join('')} + `, + color: { + color: style.color, + highlight: style.color, + hover: style.color + } + }); + + await edgeTypeStore.addEdgeType(); + + if (edgeTypeStore.requestStatus.addEdgeType === 'success') { + edgeTypeStore.fetchEdgeTypeList(); + edgeTypeStore.resetNewEdgeType(); + edgeTypeStore.resetAddedPropertiesInSelectedEdgeType(); + graphViewStore.setCurrentDrawer(''); + + Message.success({ + content: t('addition.newGraphConfig.create-scuccess'), + size: 'medium', + showCloseIcon: false + }); + } + + if (edgeTypeStore.requestStatus.addEdgeType === 'failed') { + Message.error({ + content: edgeTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('addition.newGraphConfig.create')} + , + + ]} + > +
+
+
+
+ {t('addition.menu.base-info')} +
+
+
+ * + {t('addition.common.edge-type-name')}: +
+ { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + name: e.value + }); + }} + originInputProps={{ + onBlur() { + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType('name'); + } + }} + /> +
+
+
+ * + {t('addition.common.edge-style')}: +
+
+ +
+ +
+ +
+ +
+ +
+
+
+
+ * + {t('addition.common.source-type')}: +
+ +
+ +
+
+ * + {t('addition.common.target-type')}: +
+ +
+ +
+
+ * + {t('addition.common.allow-multiple-connections')}: + + hint + +
+ { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + link_multi_times: checked + }); + }} + /> +
+ +
+
+ {edgeTypeStore.newEdgeType.link_multi_times && ( + * + )} + {t('addition.common.association-property')}: +
+
+ {edgeTypeStore.newEdgeType.properties.length !== 0 && ( +
+
+
{t('addition.common.property')}
+
{t('addition.common.allow-null')}
+
+ {edgeTypeStore.newEdgeType.properties.map( + (property, index) => { + const currentProperties = cloneDeep( + edgeTypeStore.newEdgeType.properties + ); + + return ( +
+
{property.name}
+
+ { + currentProperties[index].nullable = + !currentProperties[index].nullable; + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + properties: currentProperties + }); + }} + size="large" + /> +
+
+ ); + } + )} +
+ )} +
{ + switchIsAddNewProperty(!isAddNewProperty); + }} + > + {t('addition.common.add-property')} + toggleAddProperty +
+
+
+ + {isAddNewProperty && ( +
+
+
+ {metadataPropertyStore.metadataProperties.map((property) => ( +
+ + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesIndexInSelectedEdgeType = + edgeTypeStore.addedPropertiesInSelectedEdgeType; + + addedPropertiesIndexInSelectedEdgeType.has( + property.name + ) + ? addedPropertiesIndexInSelectedEdgeType.delete( + property.name + ) + : addedPropertiesIndexInSelectedEdgeType.add( + property.name + ); + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + properties: [ + ...addedPropertiesIndexInSelectedEdgeType + ].map((propertyName) => { + const currentProperty = + edgeTypeStore.newEdgeType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined(currentProperty) + ? currentProperty.nullable + : true + }; + }) + }); + + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType('properties'); + }} + > + {property.name} + + +
+ ))} +
+
+ )} + + {edgeTypeStore.newEdgeType.link_multi_times && ( +
+
+ * + {t('addition.common.distinguishing-key')}: +
+ +
+ )} +
+
+ * + {t('addition.edge.display-content')}: +
+ +
+
+ + {t('addition.edge.index-info')} + + + hint + +
+ +
+
+ * + {t('addition.menu.type-index')}: +
+ { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + open_label_index: checked + }); + }} + /> +
+ +
+
+ {t('addition.common.property-index')}: +
+
+ {edgeTypeStore.newEdgeType.property_indexes.length !== 0 && ( +
+
+ {t('addition.edge.index-name')} +
+
+ {t('addition.edge.index-type')} +
+
{t('addition.common.property')}
+
+ )} + {edgeTypeStore.newEdgeType.property_indexes.map( + ({ name, type, fields }, index) => ( +
+
+ { + const propertyIndexEntities = cloneDeep( + edgeTypeStore.newEdgeType.property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType( + 'propertyIndexes' + ); + } + }} + /> +
+
+ +
+
+ +
+ + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const propertyIndexEntities = cloneDeep( + edgeTypeStore.newEdgeType.property_indexes + ); + + propertyIndexEntities.splice(index, 1); + + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + property_indexes: propertyIndexEntities + }); + + edgeTypeStore.validateAllNewEdgeType(true); + edgeTypeStore.validateNewEdgeType( + 'propertyIndexes' + ); + + setDeletePopIndex(null); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeletePopIndex(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: closeIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeletePopIndex(index); + } + }} + childrenWrapperElement="img" + /> +
+ ) + )} + { + if ( + edgeTypeStore.newEdgeType.property_indexes.length === 0 || + edgeTypeStore.isAddNewPropertyIndexReady + ) { + edgeTypeStore.mutateNewEdgeType({ + ...edgeTypeStore.newEdgeType, + property_indexes: [ + ...edgeTypeStore.newEdgeType.property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + edgeTypeStore.validateAllNewEdgeType(true); + // set isAddNewPropertyIndexReady to false + edgeTypeStore.validateNewEdgeType( + 'propertyIndexes', + true + ); + } + }} + style={{ + cursor: 'pointer', + color: edgeTypeStore.isAddNewPropertyIndexReady + ? '#2b65ff' + : '#999', + lineHeight: '32px' + }} + > + {t('addition.edge.add-group')} + +
+
+
+
+ +
+ ); +}); + +export default CreateEdge; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx new file mode 100644 index 000000000..b4b2d23c8 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateProperty.tsx @@ -0,0 +1,215 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext } from 'react'; +import { observer } from 'mobx-react'; +import { Drawer, Button, Input, Select, Message } from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +const dataTypeOptions = [ + 'string', + 'boolean', + 'byte', + 'int', + 'long', + 'float', + 'double', + 'date', + 'uuid', + 'blob' +]; + +const cardinalityOptions = ['single', 'list', 'set']; + +const CreateProperty: React.FC = observer(() => { + const { metadataPropertyStore, graphViewStore } = useContext( + MetadataConfigsRootStore + ); + const { t } = useTranslation(); + const handleCloseDrawer = () => { + graphViewStore.setCurrentDrawer(''); + metadataPropertyStore.resetNewProperties(); + metadataPropertyStore.resetValidateNewProperty(); + }; + + return ( + { + metadataPropertyStore.validateNewProperty(); + + if (!metadataPropertyStore.isCreatedReady) { + return; + } + + await metadataPropertyStore.addMetadataProperty(); + + if ( + metadataPropertyStore.requestStatus.addMetadataProperty === + 'success' + ) { + graphViewStore.setCurrentDrawer(''); + + Message.success({ + content: t('addition.newGraphConfig.create-scuccess'), + size: 'medium', + showCloseIcon: false + }); + } + + if ( + metadataPropertyStore.requestStatus.addMetadataProperty === + 'failed' + ) { + Message.error({ + content: metadataPropertyStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + + metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); + metadataPropertyStore.resetNewProperties(); + }} + > + {t('addition.newGraphConfig.create')} + , + + ]} + > +
+
+
+
+
+ * + {t('addition.common.property-name')}: +
+ { + metadataPropertyStore.mutateNewProperty({ + ...metadataPropertyStore.newMetadataProperty, + _name: e.value + }); + + metadataPropertyStore.validateNewProperty(); + }} + originInputProps={{ + // no autofocus here, it will automatically dispatch blur action + onBlur() { + metadataPropertyStore.validateNewProperty(); + } + }} + /> +
+
+
+ * + {t('addition.common.data-type')}: +
+ +
+
+
+ * + {t('addition.common.cardinal-number')}: +
+ +
+
+
+
+
+ ); +}); + +export default CreateProperty; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx new file mode 100644 index 000000000..9a40be4ee --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/CreateVertex.tsx @@ -0,0 +1,1142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import classnames from 'classnames'; +import { cloneDeep, isUndefined } from 'lodash-es'; +import { + Drawer, + Button, + Input, + Select, + Radio, + Switch, + Checkbox, + Tooltip, + Message +} from 'hubble-ui'; + +import { Tooltip as CustomTooltip } from '../../../common'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import { + vertexRadiusMapping, + mapMetadataProperties, + formatVertexIdText +} from '../../../../stores/utils'; +import { useTranslation } from 'react-i18next'; + +import type { VertexTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; +import { clearObserving } from 'mobx/lib/internal'; + +const CreateVertex: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { metadataPropertyStore, vertexTypeStore, graphViewStore } = useContext( + MetadataConfigsRootStore + ); + const { t } = useTranslation(); + const [isAddNewProperty, switchIsAddNewProperty] = useState(false); + const [deletePopIndex, setDeletePopIndex] = useState(null); + const deleteWrapperRef = useRef(null); + const dropdownWrapperRef = useRef(null); + + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // if clicked element is not on dropdown, collpase it + if ( + isAddNewProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddNewProperty(false); + } + + if ( + deletePopIndex && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + setDeletePopIndex(null); + } + }, + [deletePopIndex, isAddNewProperty] + ); + + const handleCloseDrawer = () => { + graphViewStore.setCurrentDrawer(''); + vertexTypeStore.resetNewVertextType(); + vertexTypeStore.resetAddedPropertiesInSelectedVertextType(); + }; + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( + { + vertexTypeStore.validateAllNewVertexType(); + + if (!vertexTypeStore.isCreatedReady) { + return; + } + + const { + name, + properties, + primary_keys, + style, + ...rest + } = vertexTypeStore.newVertexType; + + const mappedProperties = mapMetadataProperties( + properties, + metadataPropertyStore.metadataProperties + ); + + graphViewStore.visDataSet!.nodes.add({ + ...rest, + id: name, + label: name.length <= 15 ? name : name.slice(0, 15) + '...', + vLabel: name, + properties, + value: vertexRadiusMapping[style.size], + font: { size: 16 }, + title: ` + + + ${Object.entries(mappedProperties) + .map(([key, value]) => { + const convertedValue = + value.toLowerCase() === 'text' + ? 'string' + : value.toLowerCase(); + + const primaryKeyIndex = primary_keys.findIndex( + (primaryKey) => primaryKey === key + ); + + return ``; + }) + .join('')} + `, + color: { + background: style.color, + border: style.color, + highlight: { + background: '#fb6a02', + border: '#fb6a02' + }, + hover: { background: '#ec3112', border: '#ec3112' } + }, + // reveal label when zoom to max + scaling: { + label: { + max: Infinity, + maxVisible: Infinity + } + }, + chosen: { + node( + values: any, + id: string, + selected: boolean, + hovering: boolean + ) { + if (hovering || selected) { + values.shadow = true; + values.shadowColor = 'rgba(0, 0, 0, 0.6)'; + values.shadowX = 0; + values.shadowY = 0; + values.shadowSize = 25; + } + + if (selected) { + values.size += 5; + } + } + } + }); + + await vertexTypeStore.addVertexType(); + + if (vertexTypeStore.requestStatus.addVertexType === 'success') { + vertexTypeStore.fetchVertexTypeList(); + vertexTypeStore.resetNewVertextType(); + vertexTypeStore.resetAddedPropertiesInSelectedVertextType(); + graphViewStore.setCurrentDrawer(''); + + Message.success({ + content: t('addition.newGraphConfig.create-scuccess'), + size: 'medium', + showCloseIcon: false + }); + + // if vertex is empty before, trigger re-render here to reveal + if (graphViewStore.isGraphVertexEmpty) { + graphViewStore.switchGraphDataEmpty(false); + // need to get node colors again since fetchGraphViewData() will cause re-render in + // the graph use graphNode() rather than local added node + await dataAnalyzeStore.fetchAllNodeStyle(); + graphViewStore.fetchGraphViewData( + dataAnalyzeStore.colorMappings, + dataAnalyzeStore.vertexSizeMappings, + dataAnalyzeStore.vertexWritingMappings, + dataAnalyzeStore.edgeColorMappings, + dataAnalyzeStore.edgeThicknessMappings, + dataAnalyzeStore.edgeWithArrowMappings, + dataAnalyzeStore.edgeWritingMappings + ); + } + return; + } + + if (vertexTypeStore.requestStatus.addVertexType === 'failed') { + Message.error({ + content: vertexTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + }} + > + {t('addition.newGraphConfig.create')} + , + + ]} + > +
+
+
+
+ {t('addition.menu.base-info')} +
+
+
+ * + {t('addition.vertex.vertex-type-name')}: +
+ { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + name: e.value + }); + }} + originInputProps={{ + onBlur() { + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType('name'); + } + }} + /> +
+
+
+ * + {t('addition.vertex.vertex-style')}: +
+
+ +
+
+ +
+
+
+
+ * + {t('addition.common.id-strategy')}: +
+ ) => { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + id_strategy: e.target.value + }); + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType('primaryKeys'); + }} + > + + {t('addition.constant.primary-key-id')} + + + {t('addition.constant.automatic-generation')} + + + {t('addition.constant.custom-string')} + + + {t('addition.constant.custom-number')} + + + {t('addition.constant.custom-uuid')} + + +
+
+
+ {vertexTypeStore.newVertexType.id_strategy === + 'PRIMARY_KEY' && ( + * + )} + {t('addition.common.association-property')}: +
+
+ {vertexTypeStore.newVertexType.properties.length !== 0 && ( +
+
+
{t('addition.common.property')}
+
{t('addition.common.allow-null')}
+
+ {vertexTypeStore.newVertexType.properties.map( + (property, index) => { + const currentProperties = cloneDeep( + vertexTypeStore.newVertexType.properties + ); + + return ( +
+
{property.name}
+
+ { + currentProperties[ + index + ].nullable = !currentProperties[index] + .nullable; + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + properties: currentProperties + }); + }} + size="large" + /> +
+
+ ); + } + )} +
+ )} +
{ + switchIsAddNewProperty(!isAddNewProperty); + }} + > + {t('addition.common.add-property')} + toggleAddProperty +
+
+
+ + {isAddNewProperty && ( +
+
+
+ {metadataPropertyStore.metadataProperties.map((property) => ( +
+ + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesInSelectedVertextType = + vertexTypeStore.addedPropertiesInSelectedVertextType; + + addedPropertiesInSelectedVertextType.has( + property.name + ) + ? addedPropertiesInSelectedVertextType.delete( + property.name + ) + : addedPropertiesInSelectedVertextType.add( + property.name + ); + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + properties: [ + ...addedPropertiesInSelectedVertextType + ].map((propertyName) => { + const currentProperty = vertexTypeStore.newVertexType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined(currentProperty) + ? currentProperty.nullable + : true + }; + }) + }); + + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType('properties'); + }} + > + {property.name} + + +
+ ))} +
+
+ )} + + {vertexTypeStore.newVertexType.id_strategy === 'PRIMARY_KEY' && ( +
+
+ * + {t('addition.common.primary-key-property')}: +
+ +
+ )} + +
+
+ * + {t('addition.vertex.vertex-display-content')}: +
+ +
+ +
+ + {t('addition.edge.index-info')} + + + hint + +
+ +
+
+ * + {t('addition.menu.type-index')}: +
+ { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + open_label_index: !vertexTypeStore.newVertexType + .open_label_index + }); + }} + size="large" + /> +
+ +
+
+ {t('addition.common.property-index')}: +
+
+ {vertexTypeStore.newVertexType.property_indexes.length !== + 0 && ( +
+
+ {t('addition.edge.index-name')} +
+
+ {t('addition.edge.index-type')} +
+
{t('addition.common.property')}
+
+ )} + {vertexTypeStore.newVertexType.property_indexes.map( + ({ name, type, fields }, index) => ( +
+
+ { + const propertyIndexEntities = cloneDeep( + vertexTypeStore.newVertexType.property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType( + 'propertyIndexes' + ); + } + }} + /> +
+
+ +
+
+ +
+ + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const propertyIndexEntities = cloneDeep( + vertexTypeStore.newVertexType + .property_indexes + ); + + propertyIndexEntities.splice(index, 1); + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + property_indexes: propertyIndexEntities + }); + + vertexTypeStore.validateAllNewVertexType( + true + ); + vertexTypeStore.validateNewVertexType( + 'propertyIndexes' + ); + + setDeletePopIndex(null); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeletePopIndex(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: closeIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeletePopIndex(index); + } + }} + childrenWrapperElement="img" + /> +
+ ) + )} + { + if ( + vertexTypeStore.newVertexType.property_indexes.length === + 0 || + vertexTypeStore.isAddNewPropertyIndexReady + ) { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + property_indexes: [ + ...vertexTypeStore.newVertexType.property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + vertexTypeStore.validateAllNewVertexType(true); + // set isAddNewPropertyIndexReady to false + vertexTypeStore.validateNewVertexType( + 'propertyIndexes', + true + ); + } + }} + style={{ + cursor: 'pointer', + color: vertexTypeStore.isAddNewPropertyIndexReady + ? '#2b65ff' + : '#999', + lineHeight: '32px' + }} + > + {t('addition.edge.add-group')} + +
+
+
+
+ +
+ ); +}); + +export default CreateVertex; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/GraphView.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/GraphView.less new file mode 100644 index 000000000..3b01eb15e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/GraphView.less @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.metadata-graph { + &-drawer-wrapper { + .metadata-graph-drawer { + &-title { + font-family: + 'PingFangSC-Medium', + 'Microsoft YaHei Bold', + '微软雅黑', + Arial, + sans-serif; + width: 115px; + font-weight: bold; + margin-bottom: 16px; + text-align: right; + word-break: keep-all; + } + + &-manipulations, + &-options { + margin-bottom: 32px; + display: flex; + align-items: center; + + &-name { + width: 125px; + margin-right: 43.9px; + text-align: right; + color: #333; + font-size: 14px; + word-break: keep-all; + line-height: 32px; + } + + &-expands { + font-size: 14px; + color: #333; + } + } + } + } + + &-view-wrapper { + height: calc(100vh - 222px); + overflow: hidden; + } + + &-view { + margin: -1px; + } + + &-view-empty-wrapper { + height: calc(100vh - 222px); + display: flex; + justify-content: center; + align-items: center; + } + + &-view-empty { + display: flex; + flex-direction: column; + align-items: center; + font-size: 14px; + color: #333; + } + + &-loading { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + height: 100%; + } + + &-loading-bg { + width: 144px; + height: 144px; + position: relative; + margin-bottom: 10px; + } + + &-loading-back { + position: absolute; + left: 22px; + top: 20px; + } + + &-loading-front { + position: absolute; + left: 57.1px; + top: 52.1px; + animation: loading-rotate 2s linear infinite; + } + + @keyframes loading-rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } + } + + &-property-manipulation { + font-size: 14px; + color: #2b65ff; + cursor: pointer; + + &:hover { + color: #527dff; + } + + &:active { + color: #184bcc; + } + } + + &-tooltips { + background: #fff; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + border-radius: 3px; + padding: 16px; + font-size: 14px; + color: #333; + + &-title { + font-size: 16px; + font-weight: 900; + margin-bottom: 16px; + } + } +} + +/* override */ + +// refer to index.less in root dir, this should be fixed in future +.metadata-graph-drawer-wrapper { + .new-fc-one-input-all-container { + position: relative; + } +} + +.metadata-graph-drawer-options-colors { + margin-left: 12px; +} + +.metadata-graph-drawer-options-color { + width: 20px; + height: 20px; +} + +.metadata-graph-drawer-options .metadata-graph-drawer-options-color { + margin-top: 6px; +} + +// refer to NewVertexType.less, color option style in dropdown +.new-fc-one-select-dropdown-menu-container .metadata-graph-drawer-options-color { + width: 20px; + height: 20px; + margin: 6px auto; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx new file mode 100644 index 000000000..bc2c17536 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/GraphView.tsx @@ -0,0 +1,477 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import { isEmpty } from 'lodash-es'; +import vis from 'vis-network'; +import 'vis-network/styles/vis-network.min.css'; +import { Button } from 'hubble-ui'; + +import CreateProperty from './CreateProperty'; +import CreateVertex from './CreateVertex'; +import CreateEdge from './CreateEdge'; +import CheckAndEditVertex from './CheckAndEditVertex'; +import CheckAndEditEdge from './CheckAndEditEdge'; +import CheckProperty from './CheckProperty'; + +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import { generateGraphModeId } from '../../../../stores/utils'; + +import AddIcon from '../../../../assets/imgs/ic_add.svg'; +import LoadingBackIcon from '../../../../assets/imgs/ic_loading_back.svg'; +import LoadingFrontIcon from '../../../../assets/imgs/ic_loading_front.svg'; +import { useTranslation } from 'react-i18next'; + +import '../../data-analyze/DataAnalyze.less'; +import './GraphView.less'; + +const styles = { + marginLeft: '12px' +}; + +const GraphView: React.FC = observer(() => { + const { + metadataPropertyStore, + vertexTypeStore, + edgeTypeStore, + graphViewStore + } = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + useEffect(() => { + metadataPropertyStore.fetchMetadataPropertyList({ + fetchAll: true + }); + + vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); + edgeTypeStore.fetchEdgeTypeList({ fetchAll: true }); + + return () => { + metadataPropertyStore.dispose(); + vertexTypeStore.dispose(); + edgeTypeStore.dispose(); + }; + }, [edgeTypeStore, graphViewStore, metadataPropertyStore, vertexTypeStore]); + + return ( +
+
+ + + + {/* .outsideClick need id to specify logic here */} + {!isEmpty(metadataPropertyStore.metadataProperties) && ( +
+ +
+ )} +
+ {/* note: components below all have graphView.currentDrawer in render + * if use && at here it will dispatch re-render in this component + * which cause all components below to re-render either + */} + + + + + + + +
+ ); +}); + +const GraphDataView: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { + metadataPropertyStore, + vertexTypeStore, + edgeTypeStore, + graphViewStore + } = useContext(MetadataConfigsRootStore); + const [graph, setGraph] = useState(null); + const [showLoadingGraphs, switchShowLoadingGraphs] = useState(true); + const [isGraphDataLoaded, switchIsGraphLoaded] = useState(false); + const { t } = useTranslation(); + const graphWrapper = useRef(null); + const resultWrapper = useRef(null); + + const redrawGraphs = useCallback(() => { + if (graph) { + // list mode may has scrollbar + // when switch to graph mode, scrollbar hides quickly but resize event cannot dispatch + // at this scenario we have to manually calculate the width + // however when set resultWrapper style with overflow: hidden + // window.innerWidth equals to document.body.scrollWidth + // no need to write code below: + + // let width: string; + // if (window.innerWidth - document.body.scrollWidth > 0) { + // width = String(window.innerWidth - 126) + 'px'; + // } else { + // width = getComputedStyle(resultWrapper.current!).width as string; + // } + + if ( + graphViewStore.originalGraphViewData !== null && + graphViewStore.originalGraphViewData.vertices.length === 0 && + graphViewStore.originalGraphViewData.edges.length === 0 + ) { + graph.setSize('0', '0'); + graph.redraw(); + return; + } + + const width = + String( + Number( + (getComputedStyle(resultWrapper.current!).width as string).split( + 'px' + )[0] + ) + 2 + ) + 'px'; + const height = + String( + Number( + (getComputedStyle(resultWrapper.current!).height as string).split( + 'px' + )[0] + ) + 2 + ) + 'px'; + + graph.setSize(width, height); + graph.redraw(); + } + }, [graph, graphViewStore.originalGraphViewData]); + + useEffect(() => { + graphViewStore.fetchGraphViewData( + dataAnalyzeStore.colorMappings, + dataAnalyzeStore.vertexSizeMappings, + dataAnalyzeStore.vertexWritingMappings, + dataAnalyzeStore.edgeColorMappings, + dataAnalyzeStore.edgeThicknessMappings, + dataAnalyzeStore.edgeWithArrowMappings, + dataAnalyzeStore.edgeWritingMappings + ); + + return () => { + graphViewStore.dispose(); + }; + }, [ + dataAnalyzeStore.colorMappings, + dataAnalyzeStore.vertexSizeMappings, + dataAnalyzeStore.vertexWritingMappings, + dataAnalyzeStore.edgeColorMappings, + dataAnalyzeStore.edgeThicknessMappings, + dataAnalyzeStore.edgeWithArrowMappings, + dataAnalyzeStore.edgeWritingMappings, + graphViewStore + ]); + + useEffect(() => { + const graphNodes = new vis.DataSet(graphViewStore.graphNodes); + const graphEdges = new vis.DataSet(graphViewStore.graphEdges); + + if (!graph) { + const data = { + nodes: graphNodes, + edges: graphEdges + }; + + const layout: vis.Options = { + nodes: { + shape: 'dot' + }, + edges: { + arrowStrikethrough: false, + color: { + color: 'rgba(92, 115, 230, 0.8)', + hover: 'rgba(92, 115, 230, 1)', + highlight: 'rgba(92, 115, 230, 1)' + }, + scaling: { + min: 1, + max: 3, + label: { + enabled: false + } + } + }, + interaction: { + hover: true + }, + physics: { + maxVelocity: 50, + solver: 'forceAtlas2Based', + forceAtlas2Based: { + avoidOverlap: 0 + }, + timestep: 0.3, + stabilization: { iterations: 150 } + } + }; + + if (graphWrapper.current !== null) { + const network = new vis.Network(graphWrapper!.current, data, layout); + + network.on('click', ({ nodes, edges }) => { + // click on node, note that edges(related) also has value + if (!isEmpty(nodes)) { + // note: cannot abstract switchClickOn...() and clearTimeout + // as common callings with node and edge, since click event + // would be dispatched even if click is not on node and edge + // dataAnalyzeStore.switchClickOnNodeOrEdge(true); + // clearTimeout(timer); + + // caution: nodeId is automatically converted to number + const nodeId = nodes[0]; + + if (graphViewStore.graphViewData !== null) { + const index = vertexTypeStore.vertexTypes.findIndex( + (vertex) => vertex.name === String(nodeId) + ); + + if (index === -1) { + return; + } + + vertexTypeStore.selectVertexType(index); + + // check also needs style infos + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + style: { + color: vertexTypeStore.selectedVertexType!.style.color, + icon: null, + size: vertexTypeStore.selectedVertexType!.style.size, + display_fields: vertexTypeStore.selectedVertexType!.style + .display_fields + } + }); + + graphViewStore.setCurrentDrawer('check-vertex'); + graphViewStore.switchNodeOrEdgeClicked(true); + + // check if vertex type being used + vertexTypeStore.checkIfUsing([ + vertexTypeStore.selectedVertexType!.name + ]); + } + + return; + } + + if (!isEmpty(edges)) { + const edgeId = edges[0]; + + if (graphViewStore.graphViewData !== null) { + const index = edgeTypeStore.edgeTypes.findIndex( + (edge) => + generateGraphModeId( + edge.name, + edge.source_label, + edge.target_label + ) === edgeId + ); + + if (index === -1) { + return; + } + + edgeTypeStore.selectEdgeType(index); + // check also needs style infos + edgeTypeStore.mutateEditedSelectedEdgeType({ + ...edgeTypeStore.editedSelectedEdgeType, + style: { + color: edgeTypeStore.selectedEdgeType!.style.color, + icon: null, + with_arrow: edgeTypeStore.selectedEdgeType!.style.with_arrow, + thickness: edgeTypeStore.selectedEdgeType!.style.thickness, + display_fields: edgeTypeStore.selectedEdgeType!.style + .display_fields + } + }); + + graphViewStore.setCurrentDrawer('check-edge'); + graphViewStore.switchNodeOrEdgeClicked(true); + } + } + }); + + network.on('dragEnd', (e) => { + if (!isEmpty(e.nodes)) { + network.unselectAll(); + } + }); + + network.once('stabilizationIterationsDone', () => { + switchShowLoadingGraphs(false); + }); + + setGraph(network); + graphViewStore.setVisNetwork(network); + } + } else { + // if graph view data arrives, init to graph + if (graphViewStore.originalGraphViewData !== null && !isGraphDataLoaded) { + // switchIsGraphLoaded(true); + + graph.setData({ + nodes: graphNodes, + edges: graphEdges + }); + + graphViewStore.setVisDataSet({ + nodes: graphNodes, + edges: graphEdges + }); + } + + redrawGraphs(); + } + }, [ + graph, + graphViewStore.graphEdges, + graphViewStore.graphNodes, + redrawGraphs, + vertexTypeStore, + edgeTypeStore, + graphViewStore, + isGraphDataLoaded + ]); + + useEffect(() => { + window.addEventListener('resize', redrawGraphs, false); + + return () => { + window.removeEventListener('resize', redrawGraphs); + }; + }, [redrawGraphs]); + + return ( + <> +
+
+ {graphViewStore.requestStatus.fetchGraphViewData === 'pending' && ( +
+
+ {t('addition.operate.load-background')} + {t('addition.operate.load-spinner')} +
+ {t('addition.message.data-loading')}... +
+ )} + {graphViewStore.requestStatus.fetchGraphViewData === 'success' && + showLoadingGraphs && + (!isEmpty(graphViewStore.originalGraphViewData!.vertices) || + !isEmpty(graphViewStore.originalGraphViewData!.edges)) && ( +
+
+ {t('addition.operate.load-background')} + {t('addition.operate.load-spinner')} +
+ {t('addition.operate.rendering')}... +
+ )} + {graphViewStore.requestStatus.fetchGraphViewData === 'success' && + graphViewStore.isGraphVertexEmpty && + isEmpty(graphViewStore.originalGraphViewData!.vertices) && + isEmpty(graphViewStore.originalGraphViewData!.edges) && ( + + )} +
+ + ); +}); + +const EmptyGraphDataView: React.FC<{ hasProeprties: boolean }> = observer( + ({ hasProeprties }) => { + const { t } = useTranslation(); + return ( +
+
+ {t('addition.message.no-metadata-notice')} +
+ {hasProeprties + ? t('addition.message.no-vertex-or-edge-notice') + : t('addition.message.no-metadata-notice')} +
+
+
+ ); + } +); + +export default GraphView; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/index.ts new file mode 100644 index 000000000..22850d2f3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/graph-view/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import GraphView from './GraphView'; + +export { GraphView }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/index.ts new file mode 100644 index 000000000..b242a5f99 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import MetadataConfigs from './MetadataConfigs'; + +export { MetadataConfigs }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less new file mode 100644 index 000000000..a3329baee --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/PropertyIndex.less @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.vertex-index-wrapper { + width: 100%; + background: #fff; + border-radius: 0 3px 3px 3px; + padding: 16px; +} + +.vertex-index-tab-wrapper { + display: flex; + width: 100%; + margin-top: 16px; + + & > .vertex-index-tab-index { + padding: 10px 25px; + height: 40px; + color: #333; + font-size: 14px; + text-align: center; + line-height: 20px; + cursor: pointer; + + &.active { + background-color: #fff; + color: #2b65ff; + border-radius: 3px 3px 0 0; + } + } +} + +.vertex-index-search-highlights { + background: transparent; + color: #2b65ff; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx new file mode 100644 index 000000000..02502337d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/PropertyIndex.tsx @@ -0,0 +1,307 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useState, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import Highlighter from 'react-highlight-words'; +import { motion } from 'framer-motion'; +import { Input, Table } from 'hubble-ui'; + +import { LoadingDataView } from '../../../common'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import './PropertyIndex.less'; +import i18next from '../../../../i18n'; +import { useTranslation } from 'react-i18next'; + +const variants = { + initial: { + opacity: 0 + }, + animate: { + opacity: 1, + transition: { + duration: 0.7 + } + }, + exit: { + opacity: 0, + transition: { + duration: 0.3 + } + } +}; + +const IndexTypeMappings: Record = { + SECONDARY: i18next.t('addition.menu.secondary-index'), + RANGE: i18next.t('addition.menu.range-index'), + SEARCH: i18next.t('addition.menu.full-text-index') +}; + +const PropertyIndex: React.FC = observer(() => { + const { metadataPropertyIndexStore } = useContext(MetadataConfigsRootStore); + const [preLoading, switchPreLoading] = useState(true); + const [currentTab, switchCurrentTab] = useState<'vertex' | 'edge'>('vertex'); + const { t } = useTranslation(); + const isLoading = + preLoading || + metadataPropertyIndexStore.requestStatus.fetchMetadataPropertIndexes === + 'pending'; + + const handleSearchChange = (e: React.ChangeEvent) => { + metadataPropertyIndexStore.mutateSearchWords(e.target.value); + }; + + const handleSearch = () => { + metadataPropertyIndexStore.mutatePageNumber(1); + metadataPropertyIndexStore.switchIsSearchedStatus(true); + metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); + }; + + const handleClearSearch = () => { + metadataPropertyIndexStore.mutateSearchWords(''); + metadataPropertyIndexStore.mutatePageNumber(1); + metadataPropertyIndexStore.switchIsSearchedStatus(false); + metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); + }; + + const handlePageNumberChange = (e: React.ChangeEvent) => { + metadataPropertyIndexStore.mutatePageNumber(Number(e.target.value)); + metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); + }; + + useEffect(() => { + setTimeout(() => { + switchPreLoading(false); + }, 500); + }, [currentTab]); + + useEffect(() => { + metadataPropertyIndexStore.fetchMetadataPropertIndexes(currentTab); + + return () => { + metadataPropertyIndexStore.dispose(); + }; + }, [currentTab, metadataPropertyIndexStore]); + + const columnConfigs = [ + { + title: + currentTab === 'vertex' + ? t('addition.vertex.vertex-type-name') + : t('addition.common.edge-type-name'), + dataIndex: 'owner', + render(text: string, records: any[], index: number) { + if (metadataPropertyIndexStore.collpaseInfo === null) { + // need highlighter here since searched result could be one row + return ( + + ); + } + + const [collpaseStartIndexes, collpaseNumbers] = + metadataPropertyIndexStore.collpaseInfo; + + const startIndex = collpaseStartIndexes.findIndex( + (indexNumber) => indexNumber === index + ); + + return startIndex !== -1 + ? { + children: ( +
+ +
+ ), + props: { + rowSpan: collpaseNumbers[startIndex] + } + } + : { + children: ( +
+ +
+ ), + props: { + rowSpan: 0 + } + }; + } + }, + { + title: t('addition.edge.index-name'), + dataIndex: 'name', + render(text: string) { + return ( +
+ +
+ ); + } + }, + { + title: t('addition.edge.index-type'), + dataIndex: 'type', + render(text: string) { + return IndexTypeMappings[text]; + } + }, + { + title: t('addition.common.property'), + dataIndex: 'fields', + render(properties: string[]) { + return ( +
+ +
+ ); + } + } + ]; + + return ( + +
+
{ + if (currentTab !== 'vertex') { + metadataPropertyIndexStore.fetchMetadataPropertIndexes('vertex'); + } + + metadataPropertyIndexStore.mutateSearchWords(''); + metadataPropertyIndexStore.mutatePageNumber(1); + metadataPropertyIndexStore.switchIsSearchedStatus(false); + switchCurrentTab('vertex'); + switchPreLoading(true); + }} + className={ + currentTab === 'vertex' + ? 'vertex-index-tab-index active' + : 'vertex-index-tab-index' + } + > + {t('addition.vertex.vertex-index')} +
+
{ + if (currentTab !== 'edge') { + metadataPropertyIndexStore.fetchMetadataPropertIndexes('edge'); + } + + metadataPropertyIndexStore.mutateSearchWords(''); + metadataPropertyIndexStore.mutatePageNumber(1); + metadataPropertyIndexStore.switchIsSearchedStatus(false); + switchCurrentTab('edge'); + switchPreLoading(true); + }} + className={ + currentTab === 'edge' + ? 'vertex-index-tab-index active' + : 'vertex-index-tab-index' + } + > + {t('addition.edge.edge-index')} +
+
+
+
+ +
+
{t('addition.common.no-result')} + ) : ( + {t('addition.message.no-index-notice')} + ) + } + /> + ) + }} + dataSource={ + isLoading ? [] : metadataPropertyIndexStore.metadataPropertyIndexes + } + pagination={ + isLoading + ? null + : { + hideOnSinglePage: false, + pageNo: + metadataPropertyIndexStore.metadataPropertyIndexPageConfig + .pageNumber, + pageSize: 10, + showSizeChange: false, + showPageJumper: false, + total: + metadataPropertyIndexStore.metadataPropertyIndexPageConfig + .pageTotal, + onPageNoChange: handlePageNumberChange + } + } + /> + + + ); +}); + +export default PropertyIndex; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/index.ts new file mode 100644 index 000000000..e851e9b3d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property-index/index.ts @@ -0,0 +1,20 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import PropertyIndex from './PropertyIndex'; + +export { PropertyIndex }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/MetadataProperties.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/MetadataProperties.less new file mode 100644 index 000000000..cdcdbff7f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/MetadataProperties.less @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.metadata-configs { + .metadata-properties { + &-selected-reveals { + width: 100%; + height: 40px; + padding: 0 16px; + display: flex; + background: #2b65ff; + border-radius: 3px 3px 0 0; + font-size: 14px; + align-items: center; + color: #fff; + + & > div { + margin-right: 12px; + } + + & > img { + margin-left: auto; + cursor: pointer; + } + } + + &-manipulation { + font-size: 14px; + color: #2b65ff; + cursor: pointer; + + &:hover { + color: #527dff; + } + + &:active { + color: #184bcc; + } + } + + &-search-highlights { + background: transparent; + color: #2b65ff; + cursor: pointer; + } + } +} + +.metadata-properties-modal { + &-title { + display: flex; + justify-content: space-between; + margin-bottom: 20px; + + & > img { + cursor: pointer; + } + } + + &-description { + margin-bottom: 16px; + color: #333; + } +} + +.property-status-not-used { + width: 58px; + height: 28px; + background: #f2fff4; + border: 1px solid #7ed988; + border-radius: 2px; + font-size: 14px; + color: #39bf45; + letter-spacing: 0; + line-height: 28px; + text-align: center; +} + +.property-status-is-using { + width: 58px; + height: 28px; + background: #fff2f2; + border: 1px solid #ff9499; + border-radius: 2px; + font-size: 14px; + color: #e64552; + letter-spacing: 0; + line-height: 28px; + text-align: center; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx new file mode 100644 index 000000000..52537647b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/MetadataProperties.tsx @@ -0,0 +1,912 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import { intersection, size, without, values } from 'lodash-es'; +import { motion } from 'framer-motion'; +import { + Input, + Button, + Table, + Modal, + Select, + Message, + Loading +} from 'hubble-ui'; +import Highlighter from 'react-highlight-words'; + +import { Tooltip, LoadingDataView } from '../../../common'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +import type { MetadataProperty } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import AddIcon from '../../../../assets/imgs/ic_add.svg'; +import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; +import WhiteCloseIcon from '../../../../assets/imgs/ic_close_white.svg'; +import './MetadataProperties.less'; +import ReuseProperties from './ReuseProperties'; +import { useTranslation } from 'react-i18next'; + +const styles = { + button: { + marginLeft: '12px', + width: 78 + }, + extraMargin: { + marginRight: 4 + }, + deleteWrapper: { + display: 'flex', + justifyContent: 'flex-end' + }, + loading: { + padding: 0, + marginRight: 4 + } +}; + +const dataTypeOptions = [ + 'string', + 'boolean', + 'byte', + 'int', + 'long', + 'float', + 'double', + 'date', + 'uuid', + 'blob' +]; + +const cardinalityOptions = ['single', 'list', 'set']; + +const variants = { + initial: { + opacity: 0 + }, + animate: { + opacity: 1, + transition: { + duration: 0.7 + } + }, + exit: { + opacity: 0, + transition: { + duration: 0.3 + } + } +}; + +const MetadataProperties: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { t } = useTranslation(); + const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); + const { metadataPropertyStore, graphViewStore } = metadataConfigsRootStore; + const [preLoading, switchPreLoading] = useState(true); + const [sortOrder, setSortOrder] = useState(''); + const [selectedRowKeys, mutateSelectedRowKeys] = useState([]); + const [isShowModal, switchShowModal] = useState(false); + + const isLoading = + preLoading || + metadataPropertyStore.requestStatus.fetchMetadataPropertyList === 'pending'; + + const currentSelectedRowKeys = intersection( + selectedRowKeys, + metadataPropertyStore.metadataProperties.map(({ name }) => name) + ); + + const printError = () => { + Message.error({ + content: metadataPropertyStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + }; + + const handleSearchChange = (e: React.ChangeEvent) => { + metadataPropertyStore.mutateSearchWords(e.target.value); + }; + + const handleSearch = async () => { + metadataPropertyStore.mutatePageNumber(1); + metadataPropertyStore.switchIsSearchedStatus(true); + await metadataPropertyStore.fetchMetadataPropertyList(); + + if ( + metadataPropertyStore.requestStatus.fetchMetadataPropertyList === 'failed' + ) { + printError(); + } + }; + + const handleClearSearch = () => { + metadataPropertyStore.mutateSearchWords(''); + metadataPropertyStore.mutatePageNumber(1); + metadataPropertyStore.switchIsSearchedStatus(false); + metadataPropertyStore.fetchMetadataPropertyList(); + }; + + const handleSelectedTableRow = ( + newSelectedRowKeys: string[], + selectedRows: MetadataProperty[] + ) => { + mutateSelectedRowKeys(newSelectedRowKeys); + // mutateSelectedRowKeys(selectedRows.map(({ name }) => name)); + }; + + const handleSortClick = () => { + switchPreLoading(true); + + if (sortOrder === 'descend') { + metadataPropertyStore.mutatePageSort('asc'); + setSortOrder('ascend'); + } else { + metadataPropertyStore.mutatePageSort('desc'); + setSortOrder('descend'); + } + + metadataPropertyStore.fetchMetadataPropertyList(); + }; + + const handlePageChange = async (e: React.ChangeEvent) => { + // mutateSelectedRowKeys([]); + metadataPropertyStore.mutatePageNumber(Number(e.target.value)); + await metadataPropertyStore.fetchMetadataPropertyList(); + + if ( + metadataPropertyStore.requestStatus.fetchMetadataPropertyList === 'failed' + ) { + printError(); + } + }; + + const batchDeleteProperties = async () => { + if ( + values(currentSelectedRowKeys).every( + (key) => metadataPropertyStore.metadataPropertyUsingStatus?.[key] + ) + ) { + Message.error({ + content: t('addition.message.no-property-can-delete'), + size: 'medium', + showCloseIcon: false + }); + + return; + } + + switchShowModal(false); + // need to set a copy in store since local row key state would be cleared + metadataPropertyStore.mutateSelectedMetadataProperyNames( + currentSelectedRowKeys + ); + // mutateSelectedRowKeys([]); + await metadataPropertyStore.deleteMetadataProperty(currentSelectedRowKeys); + // metadataPropertyStore.mutateSelectedMetadataProperyNames([]); + + if ( + metadataPropertyStore.requestStatus.deleteMetadataProperty === 'success' + ) { + Message.success({ + content: t('addition.common.del-success'), + size: 'medium', + showCloseIcon: false + }); + + mutateSelectedRowKeys( + without(selectedRowKeys, ...currentSelectedRowKeys) + ); + + await metadataPropertyStore.fetchMetadataPropertyList(); + + // fetch previous page data if it's empty + if ( + metadataPropertyStore.requestStatus.fetchMetadataPropertyList === + 'success' && + size(metadataPropertyStore.metadataProperties) === 0 && + metadataPropertyStore.metadataPropertyPageConfig.pageNumber > 1 + ) { + metadataPropertyStore.mutatePageNumber( + metadataPropertyStore.metadataPropertyPageConfig.pageNumber - 1 + ); + + metadataPropertyStore.fetchMetadataPropertyList(); + } + + return; + } + + if ( + metadataPropertyStore.requestStatus.deleteMetadataProperty === 'failed' + ) { + printError(); + } + }; + + // hack: need to call @observable at here to dispatch re-render by mobx + // since @action in onBlur() in doesn't dispatch re-render + metadataPropertyStore.validateNewPropertyErrorMessage.name.toLowerCase(); + + const columnConfigs = [ + { + title: t('addition.common.property-name'), + dataIndex: 'name', + width: '45%', + sorter: true, + sortOrder, + render(text: string, records: any, index: number) { + if (metadataPropertyStore.isCreateNewProperty === true && index === 0) { + return ( + { + metadataPropertyStore.mutateNewProperty({ + ...metadataPropertyStore.newMetadataProperty, + _name: e.value + }); + + metadataPropertyStore.validateNewProperty(); + }} + originInputProps={{ + autoFocus: 'autoFocus', + onBlur() { + metadataPropertyStore.validateNewProperty(); + } + }} + /> + ); + } + + return ( +
+ {metadataPropertyStore.isSearched.status ? ( + + ) : ( + {text} + )} +
+ ); + } + }, + { + title: t('addition.common.data-type'), + dataIndex: 'data_type', + width: '20%', + render(text: string, records: any, index: number) { + if (metadataPropertyStore.isCreateNewProperty === true && index === 0) { + return ( + + ); + } + + const realText = text === 'TEXT' ? 'string' : text.toLowerCase(); + + return ( +
+ {realText} +
+ ); + } + }, + { + title: t('addition.common.cardinal-number'), + dataIndex: 'cardinality', + width: '20%', + render(text: string, records: any, index: number) { + if (metadataPropertyStore.isCreateNewProperty === true && index === 0) { + return ( + + ); + } + + return ( +
+ {text.toLowerCase()} +
+ ); + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '15%', + align: 'right', + render(_: any, records: any, index: number) { + return ( + + ); + } + } + ]; + + useEffect(() => { + setTimeout(() => { + switchPreLoading(false); + }, 500); + }, [sortOrder]); + + useEffect(() => { + if (metadataConfigsRootStore.currentId !== null) { + metadataPropertyStore.fetchMetadataPropertyList(); + } + + return () => { + metadataPropertyStore.dispose(); + }; + }, [ + metadataPropertyStore, + metadataConfigsRootStore.currentId, + graphViewStore + ]); + + // these would be called before rendered, pre-load some data here + // useEffect(() => { + // dataAnalyzeStore.fetchAllNodeStyle(); + // dataAnalyzeStore.fetchAllEdgeStyle(); + // }, [dataAnalyzeStore]); + + if (metadataPropertyStore.currentTabStatus === 'reuse') { + return ; + } + + return ( + +
+
+ + + +
+ {size(currentSelectedRowKeys) !== 0 && ( +
+
+ {t('addition.message.selected')} + {size(currentSelectedRowKeys)} + {t('addition.common.term')} +
+ + {t('addition.common.close')} { + mutateSelectedRowKeys([]); + }} + /> +
+ )} +
rowData.name} + locale={{ + emptyText: ( + {t('addition.common.no-result')} + ) : ( + + ) + } + /> + ) + }} + rowSelection={{ + selectedRowKeys, + onChange: handleSelectedTableRow + }} + onSortClick={handleSortClick} + dataSource={ + isLoading + ? [] + : metadataPropertyStore.isCreateNewProperty + ? metadataPropertyStore.reunionMetadataProperty + : metadataPropertyStore.metadataProperties + } + pagination={ + isLoading + ? null + : { + hideOnSinglePage: false, + pageNo: + metadataPropertyStore.metadataPropertyPageConfig.pageNumber, + pageSize: 10, + showSizeChange: false, + showPageJumper: false, + total: + metadataPropertyStore.metadataPropertyPageConfig.pageTotal, + onPageNoChange: handlePageChange + } + } + /> + { + switchShowModal(false); + }} + > +
+
+ {t('addition.common.del-comfirm')} + {t('addition.common.close')} { + switchShowModal(false); + }} + /> +
+
+ {t('addition.message.del-unused-property-notice')} +
+
) { + return ( + + {text} + + ); + } + }, + { + title: t('addition.common.status'), + dataIndex: 'status', + render(isUsing: boolean) { + return ( +
+ {isUsing + ? t('addition.common.in-use') + : t('addition.common.not-used')} +
+ ); + } + } + ]} + dataSource={currentSelectedRowKeys.map((name) => { + return { + name, + status: + metadataPropertyStore.metadataPropertyUsingStatus !== + null && + // data may have some delay which leads to no matching propety value + !!metadataPropertyStore.metadataPropertyUsingStatus[name] + }; + })} + pagination={false} + /> + + + + + ); +}); + +export interface MetadataPropertiesManipulationProps { + propertyName: string; + propertyIndex: number; + // allSelectedKeys: number[]; +} + +const MetadataPropertiesManipulation: React.FC = + observer(({ propertyName, propertyIndex }) => { + const { metadataPropertyStore } = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + const [isPopDeleteModal, switchPopDeleteModal] = useState(false); + const [isDeleting, switchDeleting] = useState(false); + const deleteWrapperRef = useRef(null); + const isDeleteOrBatchDeleting = + isDeleting || + (metadataPropertyStore.requestStatus.deleteMetadataProperty === + 'pending' && + metadataPropertyStore.selectedMetadataPropertyNames.includes( + propertyName + )); + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + if ( + isPopDeleteModal && + deleteWrapperRef && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + switchPopDeleteModal(false); + } + }, + [deleteWrapperRef, isPopDeleteModal] + ); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + if ( + metadataPropertyStore.isCreateNewProperty === true && + propertyIndex === 0 + ) { + return ( +
+ { + metadataPropertyStore.validateNewProperty(); + + if (!metadataPropertyStore.isCreatedReady) { + return; + } + + metadataPropertyStore.switchIsCreateNewProperty(false); + await metadataPropertyStore.addMetadataProperty(); + + if ( + metadataPropertyStore.requestStatus.addMetadataProperty === + 'success' + ) { + Message.success({ + content: t('addition.newGraphConfig.create-scuccess'), + size: 'medium', + showCloseIcon: false + }); + } + + if ( + metadataPropertyStore.requestStatus.addMetadataProperty === + 'failed' + ) { + Message.error({ + content: metadataPropertyStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + + metadataPropertyStore.fetchMetadataPropertyList(); + metadataPropertyStore.resetNewProperties(); + }} + > + {t('addition.newGraphConfig.create')} + + { + metadataPropertyStore.switchIsCreateNewProperty(false); + metadataPropertyStore.resetNewProperties(); + metadataPropertyStore.resetValidateNewProperty(); + + if (metadataPropertyStore.metadataProperties.length === 0) { + metadataPropertyStore.changeCurrentTabStatus('empty'); + } + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ {isDeleteOrBatchDeleting && ( + + )} + + {metadataPropertyStore.metadataPropertyUsingStatus && + metadataPropertyStore.metadataPropertyUsingStatus[ + propertyName + ] ? ( +

+ {t('addition.message.property-using-cannot-delete')} +

+ ) : ( + <> +

+ {t('addition.message.property-del-confirm')} +

+

{t('addition.message.property-del-confirm-again')}

+

{t('addition.message.long-time-notice')}

+
+ + +
+ + )} +
+ } + childrenProps={{ + className: 'metadata-properties-manipulation no-line-break', + style: styles.extraMargin, + title: isDeleteOrBatchDeleting + ? t('addition.operate.del-ing') + : t('addition.common.del'), + async onClick() { + if (isDeleteOrBatchDeleting) { + return; + } + + await metadataPropertyStore.checkIfUsing([propertyName]); + + if ( + metadataPropertyStore.requestStatus.checkIfUsing === 'success' + ) { + switchPopDeleteModal(true); + } + } + }} + > + {isDeleteOrBatchDeleting + ? t('addition.operate.del-ing') + : t('addition.common.del')} + + + ); + }); + +const EmptyPropertyHints: React.FC = observer(() => { + const { metadataPropertyStore } = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + return ( +
+ Add new property +
+ {t('addition.message.property-create-desc')} +
+
+ + +
+
+ ); +}); + +export default MetadataProperties; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/ReuseProperties.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/ReuseProperties.less new file mode 100644 index 000000000..71698137e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/ReuseProperties.less @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.reuse-properties-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 16px; + + .reuse-steps { + width: 860px; + margin: 16px auto 18px; + } + + .reuse-properties { + &-row { + display: flex; + align-items: center; + margin: 18px 0 32px; + font-size: 14px; + color: #333; + + &:last-child { + margin-bottom: 24px; + } + + &-name { + width: 98px; + text-align: right; + margin-right: 13.9px; + } + } + + &-manipulations { + display: flex; + justify-content: center; + margin-bottom: 88px; + } + + &-validate { + &-duplicate, + &-exist, + &-pass { + width: 58px; + margin: 0 auto; + border-radius: 2px; + letter-spacing: 0; + line-height: 22px; + text-align: center; + } + + &-duplicate { + background: #fff2f2; + border: 1px solid #ff9499; + color: #e64552; + } + + &-exist, + &-pass { + background: #f2fff4; + border: 1px solid #7ed988; + color: #39bf45; + } + } + + &-complete-hint { + display: flex; + flex-direction: column; + justify-content: center; + margin: 88px auto 327px; + + &-description { + display: flex; + justify-content: center; + + & > div { + margin-left: 20px; + } + } + + &-manipulations { + margin: 42px auto 0; + } + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx new file mode 100644 index 000000000..032257db3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/ReuseProperties.tsx @@ -0,0 +1,542 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useState, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { + Select, + Steps, + Transfer, + Button, + Table, + Input, + Message +} from 'hubble-ui'; +import { cloneDeep } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; + +import { GraphManagementStoreContext } from '../../../../stores'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +import PassIcon from '../../../../assets/imgs/ic_pass.svg'; + +import './ReuseProperties.less'; + +const ReuseProperties: React.FC = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); + const { metadataPropertyStore } = metadataConfigsRootStore; + const { t } = useTranslation(); + const [currentStatus, setCurrentStatus] = useState(1); + // acutally the name, not id in database + const [selectedId, mutateSelectedId] = useState<[] | string>([]); + const [selectedList, mutateSelectedList] = useState([]); + + // step 2 + const [editIndex, setEditIndex] = useState(null); + + // hack: need to call @observable at here to dispatch re-render by mobx + // since @action in onBlur() in doesn't dispatch re-render + metadataPropertyStore.validateRenameReusePropertyErrorMessage.name.toUpperCase(); + + const columnConfigs = [ + { + title: t('addition.common.property-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (editIndex !== index) { + return ( +
+ {text} +
+ ); + } + + return ( + { + const editedCheckedReusableProperties = cloneDeep( + metadataPropertyStore.editedCheckedReusableProperties! + ); + + editedCheckedReusableProperties.propertykey_conflicts[ + index + ].entity.name = e.value; + + metadataPropertyStore.mutateEditedReusableProperties( + editedCheckedReusableProperties + ); + }} + originInputProps={{ + onBlur() { + metadataPropertyStore.validateRenameReuseProperty(index); + } + }} + /> + ); + } + }, + { + title: t('addition.common.data-type'), + dataIndex: 'data_type', + width: '15%', + render(text: string) { + if (text === 'TEXT') { + return ( +
+ string +
+ ); + } + + return ( +
+ {text.toLowerCase()} +
+ ); + } + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + align: 'center', + width: '15%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if ( + metadataPropertyStore.reusablePropertyNameChangeIndexes.has(index) + ) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return
{text}
; + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + if (index === editIndex) { + return ( +
+ { + const isReady = metadataPropertyStore.validateRenameReuseProperty( + index + ); + + if (isReady) { + setEditIndex(null); + + metadataPropertyStore.mutateReusablePropertyNameChangeIndexes( + index + ); + } + }} + > + {t('addition.common.save')} + + { + setEditIndex(null); + metadataPropertyStore.resetValidateRenameReuseProperty(); + metadataPropertyStore.resetEditedReusablePropertyName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (editIndex !== null) { + return; + } + + setEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (editIndex !== null) { + return; + } + + setEditIndex(null); + + const editedCheckedReusableProperties = cloneDeep( + metadataPropertyStore.editedCheckedReusableProperties! + ); + + editedCheckedReusableProperties.propertykey_conflicts.splice( + index, + 1 + ); + + // remove selected status of the property in + mutateSelectedList( + [...selectedList].filter( + (property) => + property !== + metadataPropertyStore.editedCheckedReusableProperties! + .propertykey_conflicts[index].entity.name + ) + ); + + // remove property in Table + metadataPropertyStore.mutateEditedReusableProperties( + editedCheckedReusableProperties + ); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + useEffect(() => { + return () => { + // reset validate error message before unmount to avoid conflict with other component validation + metadataPropertyStore.resetValidateRenameReuseProperty(); + }; + }, [metadataPropertyStore]); + + return ( +
+
+ {t('addition.operate.reuse-property')} +
+
+ + {[ + t('addition.menu.select-reuse-item'), + t('addition.menu.confirm-reuse-item'), + t('addition.menu.complete-reuse') + ].map((title: string, index: number) => ( + index + 1 + ? 'finish' + : 'wait' + } + key={title} + /> + ))} + + + {currentStatus === 1 && ( + <> +
+
+ * + {t('addition.newGraphConfig.id')}: +
+ +
+
+
+ * + {t('addition.operate.reuse-property')}: +
+ name + )} + selectedList={selectedList} + showSearchBox={false} + candidateTreeStyle={{ + width: 359, + fontSize: 14 + }} + selectedTreeStyle={{ + width: 359, + fontSize: 14 + }} + handleSelect={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleSelectAll={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleDelete={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleDeleteAll={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + /> +
+
+ + +
+ + )} + + {currentStatus === 2 && ( + <> +
+ {t('addition.common.selected-property')} +
+
({ + name: entity.name, + data_type: entity.data_type, + status + }) + ) + : [] + } + pagination={false} + /> +
+ + +
+ + )} + + {currentStatus === 3 && ( +
+
+ {t('addition.message.reuse-complete')} +
+
{t('addition.message.reuse-complete')}
+
{t('addition.message.reuse-property-success')}
+
+
+
+ + +
+
+ )} + + + ); +}); + +export default ReuseProperties; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/index.ts new file mode 100644 index 000000000..f83cd5d41 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/property/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import MetadataProperties from './MetadataProperties'; +import ReuseProperties from './ReuseProperties'; + +export { MetadataProperties, ReuseProperties }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less new file mode 100644 index 000000000..362db1ec2 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.less @@ -0,0 +1,1637 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.new-vertex-type-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 30px 0; + display: flex; + flex-direction: column; + align-items: center; + + .new-vertex-type { + &-title { + // prettier-ignore + font-family: + 'PingFangSC-Medium', + 'Microsoft YaHei Bold', + '微软雅黑', + Arial, + sans-serif; + width: 115px; + font-weight: bold; + margin-bottom: 16px; + text-align: right; + word-break: keep-all; + } + + &-manipulations, + &-options { + margin-bottom: 32px; + display: flex; + align-items: center; + + &-name { + width: 125px; + margin-right: 43.9px; + text-align: right; + color: #333; + font-size: 14px; + word-break: keep-all; + line-height: 32px; + } + + &-expands { + font-size: 14px; + color: #333; + } + } + } +} + +.metadata-drawer-options-name-edit { + line-height: 34px; +} + +// retrive from parent since drawer doesn't hangs on body element +.new-vertex-type-options-colors, +.new-vertex-type-options-sizes, +.new-vertex-type-options-arrows { + margin-right: 12px; +} + +.new-vertex-type-options-color { + width: 23px; + height: 23px; + line-height: 23px; +} + +.new-vertex-type-select { + width: 20px; + height: 20px; + line-height: 20px; +} + +.new-vertex-type-options-border { + border: #dae7fb solid 2px; +} + +.new-vertex-type-options-no-border { + border: white solid 2px; +} + +.new-vertex-type-options-no-border:hover { + border: #f5f5f5 solid 2px; +} + +.new-vertex-type-options { + margin-top: 5px; +} + +.new-fc-one-select-dropdown-menu-container .new-vertex-type-options-color { + width: 14px; + height: 14px; + margin: auto; +} + +/* override */ +.new-vertex-type-options-sizes .new-fc-one-select-dropdown-menu-container { + padding: 4px 0; +} + +/* stylelint-disable */ + +/** + * Colors + */ + +/* Brand colors */ + +/* Contextual colors */ + +/* Gray scale colors */ + +/** + * Typography + */ + +/** + * Spacing + */ + +/** + * Background colors + */ + +/** + * Borders + */ + +/* Border colors */ + +/* Separator colors */ + +/* Border radii */ + +/* Shadows */ + +/* Icons */ + +/* Font sizes */ + +/* Metrics */ + +/* Stylistic variants */ + +/* Focus rings */ + +/* Button group separator */ + +/* Font sizes */ + +/* Text decorations */ + +/* Stylistic variants */ + +/* Typography */ + +/* Metrics */ + +/* Colors */ + +/* Focus ring */ + +/* Checkbox group */ + +/* Typography */ + +/* Metrics */ + +/* Colors */ + +/* Focus ring */ + +/* Strong variant */ + +/* Checkbox group */ + +/* Metrics */ + +/* Colors */ + +/* Typography */ + +/* Font sizes */ + +/* Metrics */ + +/* Colors & states */ + +/* Focus rings */ + +/* Typography */ + +/* Metrics */ + +/* Character count */ + +/* Metrics */ + +/* Font sizes */ + +/* Metrics */ + +/* States */ + +/* Option group title */ + +/* Option dropdown */ + +/* Widths */ + +/* Metrics */ + +/* Colors */ + +/* Metrics */ + +/* Colors */ + +/* Typography */ + +/* Markers */ + +/* Spacing */ + +/* Statuses */ + +/* Metrics */ + +/* Colors */ + +/* Typography */ + +/* Metrics */ + +/* Colors */ + +/* Metrics */ + +/* Colors & States */ + +/* Metrics */ + +/* Headers */ + +/* Colors */ + +/* Metrics */ + +/* Typography */ + +/* Container */ + +/* Metrics */ + +/* Colors */ + +/* Indicators */ + +/* Stylistic variants */ + +/* Metrics */ + +/* Colors */ + +/* Metrics */ + +/* Colors */ + +/* Metrics */ + +/* Stylistic variants */ + +/* Metrics */ + +/* Colors */ + +/* Metrics */ + +/* Colors */ + +/* Pages */ + +/* Indicators */ + +/* Controls */ + +/* Pages */ +button::-moz-focus-inner, +input[type='reset']::-moz-focus-inner, +input[type='button']::-moz-focus-inner, +input[type='submit']::-moz-focus-inner, +input[type='file'] > input[type='button']::-moz-focus-inner { + border: none; +} + +@keyframes loadingCircle { + 0% { + transform-origin: 50% 50%; + transform: rotate(0deg); + } + + 100% { + transform-origin: 50% 50%; + transform: rotate(360deg); + } +} + +@font-face { + font-family: 'new-fc-one-icon'; + src: url('data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBk0AAAC8AAAAYGNtYXDSvtNiAAABHAAAAGxnYXNwAAAAEAAAAYgAAAAIZ2x5ZgPgaIMAAAGQAAAuDGhlYWQWOP+LAAAvnAAAADZoaGVhCAsEPgAAL9QAAAAkaG10eMUSBrgAAC/4AAAA0GxvY2EkaxgIAAAwyAAAAGptYXhwAD8BCQAAMTQAAAAgbmFtZV3n5/sAADFUAAABenBvc3QAAwAAAAAy0AAAACAAAwPxAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpMgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAUAAAABAAEAADAAAAAQAg6SHpI+kr6TL//f//AAAAAAAg6QDpI+kl6S3//f//AAH/4xcEFwMXAhcBAAMAAQAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACAEv/wAPLA6sAGwApAAABERQGIyImNREBBiYnJjY3ATYyFwEeAQcOAScBJSImNTQ2MyEyFhUUBiMCNRkREhn+pw4jCwwCDgGgDCAMAaANAgsMIw3+pv5LEhkZEgMVEhkZEgK4/TMSGRkSAs3+0wwCDg0jDAFqCwv+lgwjDQ4CDAEtnRkSEhkZEhIZAAMAAAA9BAADqwBEAHkAngAANxYUBwYiJyYnLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgcGIicmNDc2Nz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxYXNx4BBw4BJy4BNTQ3PgE3NjMyFx4BFxYVFAYHBiYnJjY3PgE1NCcuAScmIyIHDgEHBhUUFhc3FgYHBiYnLgE1NDYzMhYVFAYHDgEnLgE3PgE1NCYjIgYVFBYX0wwMDSMNJBscJwoKKCiLXl1qal1eiygoCgonHRwlDCQMDAwfFxghCAkiIXROTlhYTk50ISIJCCAXGB58DQENDCMNMjcbGl0+PkdHPj5dGhs4NA0jDAwCDCcqFBRGLi81NS8uRhQUKSZyCwIODSQLFRZkR0dkGRYMJA0MAgwMDDIjIzILC3wNIw0MDCQqKlwyMTRqXl2LKCkpKItdXmo0MjJdKiokDA0MJAweIyNNKiorWU1OdCIhISJ0Tk1ZKykqTSMiHn0MIw0NAQwwfkZGPT5bGxoaG1s+PUZHgC8MAQ0NJAwjXzU0Li5EFBQUFEQuLjQ0XiRxDSMMCwIOFzwgSWZmSSI+GA0BDAwjDQwhESY0NCYRHg0AAAMAKwFzA9UCFQALABgAJAAAASImNTQ2MzIWFRQGISImNTQ2MzIWFRQGIyEiJjU0NjMyFhUUBgOEITAwISIvL/5aIi8vIiIvLyL+fCIvLyIhMDABczAhIi8vIiEwMCEiLy8iITAwISIvLyIhMAAAAAADAAAAQAQAA0AADgAVACUAABMRFBYzITI2NREBBiInASUhARYyNwElITIWFREUBiMhIiY1ETQ2VRkSAwASGf6oJF4k/qgDFP0uAU4MHgwBTv0XAwA1S0s1/QA1S0sCsv4OEhkZEgHy/tgfHwEoOf7fCgoBIVVLNf4ANUtLNQIANUsAAAADAAD/wAQAA8AAIAA8AFkAAAE3NjIXFhQPARcWFAcGIi8BBwYiJyY0PwEnJjQ3NjIfAQMiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMwILrA0jDQwMra0MDA0jDaytDCQMDQ2srA0NDCQMrQtqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpYTk50ISIiIXROTlhYTk50ISIiIXROTlgB8qwNDQwkDK2sDSMNDAytrQwMDSMNrK0MJAwNDaz9zigoi15dampdXosoKCgoi15dampdXosoKFUiIXROTlhYTk50ISIiIXROTlhYTk50ISIABAAA/8AEAAPAABsAOABHAFYAAAUiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMwM0NjMyFhURFAYjIiY1ERE0NjMyFh0BFAYjIiY9AQIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YKxkSEhkZEhIZGRISGRkSEhlAKCiLXl1qal1eiygoKCiLXl1qal1eiygoVSIhdE5OWFhOTnQhIiIhdE5OWFhOTnQhIgKrEhkZEv6rEhkZEgFV/isRGRkRFhEZGREWAAAABQAr/8AD1QPAABIAGQAuAD0ASwAAASEiBhURFBYzITI2NREjIiY9AQUnFRQWOwEBITIWFwUeARURFAYjISImNRE0NjMTIiY1NDYzITIWFRQGIyETIiY1NDY7ATIWFRQGIwJV/lYSGRkSAqoSGcQrPAEAqgoHmf1WAdwIDgYBJAcHSzX9VjVLSzViERkZEQH7EhkZEv4FAxIZGRLjERkZEQNrGRL9ABIZGRICFTwrr8CTggcKARUFBf0GEQn9pzVLSzUDADVL/Y4ZEhIZGRISGQEAGRISGRkSEhkAAAIAQP/AA8ADwAApADgAADcVMzIWFRQGKwEiJjU0NjMRNDYzMhYVITIWHwEzMhYVERQGKwEiJi8BITUhMhYfATMRIyImLwEhEcAVEhkZEmoSGRkSGRESGQG+BQoEPZ0jMjIjpwUKBD3+TAG+BQoEPZ2nBQoEPf5MzbgZERIZGRIRGQOAEhkZEgICHjIk/eMjMgICHlYCAx4CHQIDHv3jAAADAAAAAAP+A2sAIwA6AEIAAAEzMhYVFAYHAw4BIyEiJjU8ATcuATURNDY7ATIWHwEhMhYdASM1NCYjISImLwEuASsBIgYVETc+ATMhAR4BMyETIQMDlSkbJQEBegYiFv0HGyUBBgZLNbcbOhFAATg1S1UZEv60CREGTAYYCLcSGSkFIxYChP0oBQwHArNv/StlAlUlGwQIBP4rFRslGwMFAg0bDgJrNUsbFElLNR4eERkIB1gGCxkR/pGoFhv+CAQEAav+XQAAAAIAAAAABAADawAYAC4AABMRFBYzITI2NRE0JiMhIiYvAS4BIyEiBhUlITIWFREUBiMhIiY1ETQ2MyEyFh8BVRkSAwASGRkS/rQJEQZMBhgJ/t8SGQHzATg1S0s1/QA1S0s1ASEbOhJAAuv9lRIZGRIB8hIZCAdYBgsZEQhMNf4ONUtLNQJrNUsbFEkAAgAO/+sD8gNwAB0APgAAJTI2NRE0NjsBCQEzMhYVERQWOwE1NDY7ATIWHQEzExEUBisBIiY9ASMVFAYrASImNREjIiY3ATYyFwEWBisBAwASGRkREv6Z/pkSERkZEmsyI4AjMmuASzWVEhmAGRKVNUtVHhUWAbkYQhgBuRYVHlVAGRIBVRIZAUb+uhkS/qsSGasjMjIjqwFV/tY1SxkR1tYRGUs1ASo3FAGQFhb+cBQ3AAAABAAA/8AEAAPAABsAOABHAFYAAAEiBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYHMhceARcWFRQHDgEHBiMiJy4BJyY1NDc+ATc2MwMUFjMyNjURNCYjIgYVEREUFjMyNj0BNCYjIgYdAQIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YKxkSEhkZEhIZGRISGRkSEhkDwCgoi15dampdXosoKCgoi15dampdXosoKFUiIXROTlhYTk50ISIiIXROTlhYTk50ISL9VRIZGRIBVRIZGRL+qwHVERkZERYRGRkRFgAAAQHVAZUEAAPAABoAAAEUBiMiJjU0Jy4BJyYjIiY1NDYzMhceARcWFQQAGRIRGSIhdE5OWBIZGRJqXV6LKCgBwBIZGRJYTk50ISIZERIZKCiLXl1qAAAAAAEAKwGVA9UB6wAOAAATIiY1NDYzITIWFRQGIyFVERkZEQNWERkZEfyqAZUZEhIZGRISGQABABX/1QPrA6sAIAAAARE0NjMyFhURITIWFRQGIyERFAYjIiY1ESEiJjU0NjMhAdUZEhIZAZUSGRkS/msZEhIZ/msSGRkSAZUB6wGVEhkZEv5rGRISGf5rEhkZEgGVGRISGQAABAAA/8AEAAPAABsAOABcAGsAAAUiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMxMVFAYjIiY9ATQ2MzI2NTQmIyIGFRQGIyImNTQ2MzIWFRQGBwc0NjMyFh0BFAYjIiY9AQIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YKxkSEhkZEiw/PywsPxkREhlxT09xVUBWGRISGRkSEhlAKCiLXl1qal1eiygoKCiLXl1qal1eiygoVSIhdE5OWFhOTnQhIiIhdE5OWFhOTnQhIgF6VhIZGRJ8ERk8Kio8PCoSGRkSTm1tTkNlDs8SGRkSFRIZGRIVAAAAAgAA/8wD9APAACsASAAAJRcWFAcGIi8BBgcOAQcGIyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgcFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMwNQpAwMDSMNox8kI04qKixjWFeDJSYmJYNXWGNjWFeDJSYIBx0VFRr+kFJISGsfHx8fa0hIUlJISGsfHx8fa0hIUqyjDSMNDAykGhUVHQcIJiWDV1hjY1hXgyUmJiWDV1hjLCoqTiMkH1cfH2tISFJSSEhrHx8fH2tISFJSSEhrHx8AAAMAAP/ABAADwAAbADgASwAABSInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBicyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxYzAwE2MhcWFAcBBiIvASY0NzYyFwIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5YVQE3DCQMDQ3+qw0jDaoNDQwkDEAoKIteXWpqXV6LKCgoKIteXWpqXV6LKChVIiF0Tk5YWE5OdCEiIiF0Tk5YWE5OdCEiAT0BNwwMDSMN/qsMDKsMJAwNDQACAAv/1QP1A6sANgBtAAA3FRQGIyImNRE0NjM6ARc2MjMyFhUUFx4BFxYzMjc+ATc2Nz4BFx4BBwYHDgEHBiMiJy4BJyYnATU0NjMyFhURFAYjKgEnBiIjIiY1NCcuAScmIyIHDgEHBgcOAScuATc2Nz4BNzYzMhceARcWF2AZEhEZGRECAgIBAwESGSAfbkpKVDw5OGAmJxgHIRARDAceLi51RERJQj09aywsIQNAGRIRGRkRAgICAQMBEhkgH25KSlQ8OThgJicYByEQEQwHHi4udURESUI9PWssLCG8ZxEZGREBaxIZAQEZElRKSm4fIBERPywsNhANBwghEEE2NUwVFREQPSorNAIIZxEZGRH+lRIZAQEZElRKSm4fIBERPywsNhANBwghEEE2NUwVFREQPSorNAAIAAD/wAQAA8AAGwA3ADsAQABOAFwAagB5AAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgEhESETESERIRczMjY1NCYrASIGFRQWFzMyNjU0JisBIgYVFBYXMzI2NTQmKwEiBhUUFhczMjY1NCYrASIGFRQWMwIAal1eiygoKCiLXl1qal1eiygoKCiLXl1qY1dYgiUmJiWCWFdjY1dYgiUmJiWCWFf+1wGM/nQhAUr+tkLGBwoKB8YHCgoHxgcKCgfGBwoKB8YHCgoHxgcKCgd3BwkJB3cHCgoHQCgoi15dampdXosoKCgoi15dampdXosoKCEmJYJYV2NjV1iCJSYmJYJYV2NjV1iCJSYC1/4QAc/+UgGubgkHBwoKBwcJVwoHBwkJBwcKVgoHBgoKBgcKVgkHBwoKBwcJAAAIAAD/wAQAA8AAGwA3AEsAWgBpAHgAlACwAAAlMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgMuAQcOAR8BFjI/ATYmJyYGDwEnBzMyNjU0JisBIgYVFBYzFTMyNjU0JisBIgYVFBYzNxUUFjMyNj0BNCYjIgYVEzI3PgE3NjU0Jy4BJyYjIgcOAQcGFRQXHgEXFjciJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYCADMtLkMTFBQTQy4tMzMtLkMTFBQTQy4tMywoJzoREREROicoLCwoJzoREREROicodAQOBQUBBVQFDgVUBQEFBQ4ESEgXvgYKCga+BgoKBr4GCgoGvgYKCgZOCgcHCgoHBwoRal1eiygoKCiLXl1qal1eiygoKCiLXl1qY1dYgiUmJiWCWFdjY1dYgiUmJiWCWFfIFBNDLi0zMy0uQxMUFBNDLi0zMy0uQxMUIREROicoLCwoJzoREREROicoLCwoJzoREQFrBQEFBQ0FXwUFXwUNBQUBBVFRegkHBwoKBwcJVQoHBwkJBwcKZb0HCgoHvQcKCgf91igoi15dampdXosoKCgoi15dampdXosoKCEmJYJYV2NjV1iCJSYmJYJYV2NjV1iCJSYAAAAHAAD/wAQAA8AAJgAqAC4AMgBKAGYAggAAJSImNRE0NjMhMhYdARQGIyImPQE0JiMhIgYVERQWOwEyFhUUBisBEzMVIxUzFSM1MxUjFyImLwEmNDc2Mh8BNz4BFx4BDwEOASsBAzI3PgE3NjU0Jy4BJyYjIgcOAQcGFRQXHgEXFjciJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYBRxMbGxMBMRMbCQYGCQkH/s8GCQkGTAcJCQdML9jYPj6amsgDBQNcBAQFDAVPjwQNBQUCBJkCBgQBPmpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhX2RsTAXITGxsTfQcJCQd9BgkJBv6OBgkJBwYJAXIfmh57H/YCA1wEDQUEBFDJBQIEBAwF2AIE/uYoKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAAcAAP/ABAADwAAbADcAbgB4AIoAmgCrAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBhMhIgYVFBY7ARUUFjsBBwYWFxQyMxY2PwE+ATUzFBYfAR4BNz4BJzA0IyczMjY9ATMyNjU0JiMDFAYjISImPQEhBSMiJj0BNDY7ATIWHQEUBiMxMyMiJj0BNDY7ATIWHQEUBisBIiY9ATQ2OwEyFh0BFAYjAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpjV1iCJSYmJYJYV2NjV1iCJSYmJYJYV2z+WAYICAYOEAx6IwMCBQEBBQwEJwEBHQEBJwQMBgQEAgEjegwQDwYICAYrCAb+yQYIAVP++gYEBgYEBgUGBgW8BgQHBwQGBAcHYgYEBwcEBgUGBgVAKCiLXl1qal1eiygoKCiLXl1qal1eiygoISYlglhXY2NXWIIlJiYlglhXY2NXWIIlJgKlCQYFCP8MEEEECgMBAwMFSAEDAgIDAUgFAwMCCQUCQRAM/wgGBgj+8wYICAbx+gUDVQQEBARVAwUGBKMEBQUEowQGBQO+AwUFA74DBQAFAAD/wAQAA8AAGwA3AFwAgQC8AAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgEVFAYjIiY9ATQ2MzIWFRQXHgEXFjMyNjc+ARceAQcOASMiJiclNTQ2MzIWHQEUBiMiJjU0Jy4BJyYjIgYHDgEnLgE3PgEzMhYXByMiJjU0NjsBJyY0NzYWHwE3PgEXHgEPATMyFhUUBisBFTMyFhUUBisBFRQGIyImPQEjIiY1NDY7ATUCAGpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhX/sYJBwcKCgcHCREROicoLEBqGgMNBgYFAx56SkVyIAGuCQcHCgoHBwkRETonKCxAahoDDQYGBQMeekpFciDfUAcKCgc7PQQFBQ4FSUoEDgUFAQU9PAcJCQdQUAcJCQdQCgcHCVAHCgoHUEAoKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAXQ6BwoKB7YGCgoGLScnOhERRToGBQMDDQZCUEQ49zoHCgoHtQcKCgcsJyc6ERFFOgYFAwMNBkJQRDhyCgYHCkQFDgQFAQVSUgUBBQQOBUQKBwYKNAoGBwpaBgoKBloKBwYKNAAFAAD/wAQAA8AAGwBLAIsAyAEGAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmEw4BBw4BIyImJy4BJy4BJy4BNTQ2Nz4BNz4BNz4BMzIWFx4BFx4BFx4BFRQGBw4BAQczLgEnLgE1MxQGBzMuATczHgEXNQ4BKwE1NDY3PgE1LgEnHgEdASM1NDY3PgE1LgEnHgEdASMGJicVPgE7AQE1PgE3PgEzNQ4BJyMiJicuASMVMz4BOwEOAQcVIwYmJxU+ATM+ATsBFRYGJx4BFz4BNzUzMhYXNQ4BKwElPgE3BjY/ATMyFhc1DgEnIz4BNz4BNycuAScOAQcjBiYnIiY1FTM+ATsBDgEHHgEXMz4BNxUUBgczLgE3NQIAal1eiygoKCiLXl1qal1eiygoKCiLXl3SH0coKVgtLVgpKEcfHzARERISEREwHx9HKClYLS1YKShHHx8wERESEhERMP4gBUMBAwECAZEDA0MEAwJbGykPCykfWwMCAgEDIyADA5EEBAECBCMfAwJDHS0REi0cQwEaGCQMCx4VESkZtAsZDwkOBAgTJBKWEicVYB4pDAYPCAcbFGADJyoKDQQzNAJNGCkQCCkgTf75AwsICxAMH/waKxAQLR7bBAwIAgQCJgYPCAMNC3sYKhECAQUSKBdgL2Q2DRYKAR8tDwMCQwQDAQPAKCiLXl1qal1eiygoKCiLXl1qal1eiygo/MQfMBEREhIRETAfH0coKVgtLVgpKEcfHzARERISEREwHx9HKClYLS1YKShHAec1AQcFCxQJFRsFDBoPAQMBNQIDDQsTCAMEAQEDAQUYExAQCREGAgICAQQDCxgODQECBDUCA/7SEg8UBQYFOAQCAQECAQE1AwIKFQklAgMENgIBAQJOEQsHDyISBhYPewMDNgMCWwQMCA8VDygCAzYEAwEIDgUBBAMLAgYCCRwTAQEDAQI2AwI/WxwLFgwYLRamHCcLByUf3AAAAAAKAAD/wAQAA8AAFwAlADwASgBeAG0AfACKAKYAwgAAJTI3PgE3NjU0Ji8BIwcOARUUFx4BFxYzAzMeARUUBiMiJjU0Njc/ATYWDwEOASsBIiYvASY2HwE3NjIfAQczNwcGIi8BBwYiLwEXFyYiBwYUHwEWMj8BNiYnJiIPAScHMzI2NTQmKwEiBhUUFjMVMzI2NTQmKwEiBhUUFjM3FRQWMzI2PQE0JiMiBhMyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxY3IicuAScmNTQ3PgE3NjMyFx4BFxYVFAcOAQcGAgA1Li1CExNVVASVBFRWExNCLS41QYFMS3leXnlLS3xECw4FMgIIBJUFCAIxBQ4KRSwDBwMsc4AcJgIGAysrAgYDJhwTBQ0FBgQ6BQ8FOQUBBQUOBC4tHZUGCgoGlQcKCgeVBgoKBpUHCgoHOgkHBwoKBwcJCGpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhXuA4ONCUkLTFyQQMCNnI9LSQlNA4OAYw7ZCdKW1tKMmQwbxUDEQpjBAUFBGMKEQMVFAEBFE44CwECExMCAQs4aQYEBQ0FQgYGQgUNBQQGMzNlCQcHCgoHBwlTCgcGCgoGBwpbhAcKCgeEBwkJ/hooKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAAAFAAD/wAQAA8AAGwA3AFIAfQCbAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBhMHBiInJjQ/ASMiJjU0NjsBMhYdARQGIyImNScyFhUUBiMiBhUUFjMyNjU0NjMyFhUUBw4BBwYjIicuAScmNTQ3PgE3NjMHNhYXFAYHDgEVFBYzMjY3PgEXHgEHDgEjIiY1NDYCAGpdXosoKCgoi15dampdXosoKCgoi15damNXWIIlJiYlglhXY2NXWIIlJiYlglhXPowFDwUFBYo+CAoKCGsHCwsHCAqhBwsLB0ppaUpKaQoIBwsRETonKCwsKCc6ERERETonKCwNBwwBCQcbJCoeGykDAQwHBwoBBT0pLD81QCgoi15dampdXosoKCgoi15dampdXosoKCEmJYJYV2NjV1iCJSYmJYJYV2NjV1iCJSYCaIwFBQUPBYsLBwcLCwdsBwsLB5ALBwgKaUpKaWlKBwsLBywoJzoREREROicoLCwoJzoREWwBCQcICwEEKBseKiQbBwkBAQsIKDY/LSg9AAAABQAA/8AEAAPAABwAPwBKAFkAaAAAARUUBiMiJj0BIRUUBiMiJj0BIyIGHQEhNTQmKwE1MzIWFREUBiMhIiY1ETQ2OwE1NDYzMhYdASE1NDYzMhYdAQERFBYzITI2NREhBSImNTQ2MyEyFhUUBiMhFSImNTQ2MyEyFhUUBiMhAuAZEhEZ/uoZERIZoBIZA1YZEqCgNUtLNf0ANUtLNaAZEhEZARYZERIZ/XUZEgMAEhn8qgEAERkZEQFWERkZEf6qERkZEQFWERkZEf6qAxUqEhkZEioqEhkZEioZEaCgERlWSzX9VTVLSzUCqzVLKhIZGRIqKhIZGRIq/or+SxIZGRIBtdUZEhEZGRESGZUZERIZGRIRGQAAAAEAOv/AA8YDqwAiAAAbAR4BFREUBiMiJjURAyY2MyEyFgcDERQGIyImNRE0NjcTIaXDAwMZEREZ4AwYGANEGBgM4BkRERkDA8P9SgNY/qIFCgX+8REZGREBBAGSFSkpFf5u/g8SGBgSAfwFCgUBXgAIAAD/wAQAA8AAGwA3AEcAWABoAHkAiQCZAAAFMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWNyInLgEnJjU0Nz4BNzYzMhceARcWFRQHDgEHBgMiBhURFBY7ATI2NRE0JiMnMzIWFREUBisBIiY1ETQ2MyEzMhYdARQGKwEiJj0BNDYXIgYdARQWOwEyNj0BNCYrARMzMhYdARQGKwEiJj0BNDYXIgYdARQWOwEyNj0BNCYjAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpjV1iCJSYmJYJYV2NjV1iCJSYmJYJYVw0IDAwIXAgMDAhYVRchIRdVGCEhGP73ZhggIBhmFyEhFAkLCwltCAsLCG0DZhggIBhmFyEhFAkLCwltCAsLCEAoKIteXWpqXV6LKCgoKIteXWpqXV6LKCghJiWCWFdjY1dYgiUmJiWCWFdjY1dYgiUmAqULCf6cCQsLCQFkCQshIhj+phgiIhgBWhgiIhikGSIiGaQYIiEMCK4JDAwJrggM/uciGR4YIyMYHhkiIQ0KJAkODgkkCg0AAAEAAP/AA9QDvwBQAAABNDYzMhYVMRUUBicmJy4BJyYjIgcOAQcGFRQXHgEXFjMyNz4BNzY/AT4BMzIWFRQGBzEGBw4BBwYjIicuAScmNTQ3PgE3NjMyFx4BFxYfATUDixUPEBU5DRopKWc9PEJbUFB3IiMjIndQUFtAOztmKCkbAQURCw8VAgIgLzB2RUVLal1diygpKSiLXV1qPDc4ZSssIwEDUg8VFQ/LHQ0bOS8uRBISIiJ4T1BbW1BQdyIjEhFALC01AwkLFRAECARANDRLFRQoKIteXWpqXV2LKCgNDTAiIisBTQADAAD/wAQAA8AAGwA4AEwAAAUiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYnMjc+ATc2NTQnLgEnJiMiBw4BBwYVFBceARcWMxMzMhYVFAYrASImNRE0NjMyFh0BAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpYTk50ISIiIXROTlhYTk50ISIiIXROTlgVlhEZGRHAEhkZEhEZQCgoi15dampdXosoKCgoi15dampdXosoKFUiIXROTlhYTk50ISIiIXROTlhYTk50ISIBqxkSERkZEQEWERkZEesAAAIADP/AA/QDwAAYADEAAAUxIiYnASY0NzYyHwERNDYzMhYVERQGIzEBMTIWFwEWFAcGIi8BERQGIyImNRE0NjMxAUwJEAb+3wwNDSMM2BkSERkZEQFoCRAGASEMDQ0jDNgZEhEZGRFABgcBKwwkDAwN3wNBEhkZEvxWEhkEAAYH/tUMJAwMDd/8vxIZGRIDqhIZAAABAAH/xgRHA8AALgAAASIGBy4BIyIHDgEHBhUUFhcWFx4BFxYXHgEzMjY3Njc+ATc2Nz4BNTQnLgEnJiMDE0Z+Kyt+Rz84OFMZGDseLEVFhDIyBQgVCgoUCQUxMoVFRSsePBkYUzg4QAPAQzs7QxsaXD09RlN5L0RISHkoKAMHBwcHAygoeUhIRC95U0Y9PVwaGwAABAAA/8AD1wOoAAcADQARABUAACUhESMRIREjARc3JwcXNzMRIxMRIxEDhfzNUgPXUv5nrzrp6jqHUVFRURIBcf49AcMBsbA66uo6wf1xAo/9cQKPAAAAAAEACwCjA/UC3wATAAATLgEHDgEXARYyNwE2JicmBgcJAUoMIw0NAgwB1gwmDAHWDAINDSMM/kr+SgLdDQEMCyQN/gAODgIADSQLDAEN/iIB3gAAAAEA4//LAx8DtQATAAAlHgEHDgEnASY0NwE2FhcWBgcJAQMdDQEMCyQN/gAODgIADSQLDAEN/iIB3goMIw0NAgwB1gwmDAHWDAINDSMM/kr+SgAAAAEA4f/LAx0DtQATAAA3DgEXHgE3ATY0JwEmBgcGFhcJAeMNAQwLJA0CAA4O/gANJAsMAQ0B3v4iCgwjDQ0CDAHWDCYMAdYMAg0NIwz+Sv5KAAAAAAEACwChA/UC3QATAAA3DgEnLgE3ATYyFwEWBgcGJicJAUoMIw0NAgwB1gwmDAHWDAINDSMM/kr+SqMNAQwLJA0CAA4O/gANJAsMAQ0B3v4iAAAAAAEAUwA7A6QDKwBRAAABMQEGBwYUFxYXFhcWMjc2NwE2NCcmIgcBBhQXFjY3ATYyFxYUBzEBBiInJjQ3ATY3NjIXFhcWFxYUBwYHAQYHBiInJicmJyY0NzY3ATYyFx4BAdP+6B4QDw8QHh4mJ08mJh8BbCgoKXIp/qAUFBU6FAEMCRoJCQj+9CduJycnAWAdJSVNJiUdHg4PDw4e/pQnMjJnMjIoJxQUFBQnARgKGQkJAQLg/ugeJyZPJiceHg8QEA8eAWwocygpKf6hFToUFQEUAQwICQkZCv70JiYnbicBYB0PDw8PHR4lJU0lJR7+lSgUExMUKCcyMmcyMigBFwkJCRoAAQAM/80CiQPAABsAACURNDYzMhYVETc2MhceAQcBBiInASY0NzYyHwEBIBkSERnXDCQMDQEN/t8MJA3+4QwNDSMM11MDQhIZGRL8wN4NDAwkDP7VDQ0BKQwkDAwN3gAAAQC3/8ADNAOzABsAAAERFAYjIiY1EQcGIicuATcBNjIXARYUBwYiLwECIBkSERnXDCQMDQENASEMJA0BHwwNDSMM1wMt/L4SGRkSA0DeDQwMJAwBKw0N/tcMJAwMDd4AAQAMAHgD9AMJABMAAAE+ARcWFAcBBiInASY0NzYWFwkBA7cMIw0NDP27DSQM/poMDQ0jDAFHAicDCA0BDQwjDf2rDQ0Bbw0jDA0BDP6vAjYAAAAAAQA3//cDyQOJACAAAAkBJjQ3NjIXCQE2MhcWFAcJARYUBwYiJwkBBiInJjQ3AQHE/nMMDA0jDAGNAY0MIw0MDP5zAY0MDA0jDP5z/nMMIw0MDAGNAcABjQwjDQwM/nMBjQwMDSMM/nP+cwwjDQwMAY3+cwwMDSMMAY0AAAMAL//fA9EDggAUACkAWgAAEyIGFTERFBYzMSEyNjUxETQmIzEhNSEyFhUxERQGIzEhIiY1MRE0NjMxBRQGIyImNTE1NDYzITIWFREUBisBIiY1NDY7ATgBMTI2NRE0JiM4ATEhMCIxIgYdAYwNEhINAbINEhIN/k4Bsic2Nif+Tic2NicBFxINDRIwIgHJITAwIU0MExMMTQgLCwj+NwEICwJrEwz98A0SEg0CEAwTPjcm/fAmNzcmAhAmNw8MExMMlyEwMCH92CEwEg0NEgsIAigICwsIlwAAAAAJAAD/wAQAA8AAGwA3AEcAVwBoAHkAhQCRAJ0AAAUyNz4BNzY1NCcuAScmIyIHDgEHBhUUFx4BFxY3IicuAScmNTQ3PgE3NjMyFx4BFxYVFAcOAQcGEzI2PQE0JiMhIgYdARQWMyU1NCYjISIGHQE+ATMhMhYlITIWFREUBiMhIiY1ETQ2MxEiBh0BFBYzITI2PQE0JiMhNyImNTQ2MzIWFRQGByImNTQ2MzIWFRQGByImNTQ2MzIWFRQGAgBqXV6LKCgoKIteXWpqXV6LKCgoKIteXWpjV1iCJSYmJYJYV2NjV1iCJSYmJYJYV3QHCQkH/mMHCgoHAa0JB/5jBwoECAUBnQQI/lcBnRQdHRT+YxUdHRUHCgoHAZ0HCQkH/mNCDhMTDg4TEw4OExMODhMTDg4TEw4OExNAKCiLXl1qal1eiygoKCiLXl1qal1eiygoISYlglhXY2NXWIIlJiYlglhXY2NXWIIlJgGdCgZkBgoKBmQGCqJ3BwkJB3cCAQGmHRT+UhQdHRQBrhQd/pUKB2MHCQkHYwcK5xMODhMTDg4TpRMODhMTDg4TpRMODhMTDg4TAAAAAAQAAP/ABAADwAAgAFIAYQBwAAABERQGIyEiJjURNCYjIgYVMREUFjMhMjY1ETQmIyIGFTEDLgEjOAEjISIGDwEjIgYVFBYzMSEyNjcxNz4BMyEyFh8BHgEzOAExITI2NTQmIzEhJwERFBYzMjY1ETQmIyIGFSERFBYzMjY1ETQmIyIGFQOgLCD9eCAsEw0NE1I6Aog6UhMNDRPUBi8fAf73Hy8GCPINExMNAQ4MEgEMAQwIAQoHDAILAhIMASgNExMN/vQI/okTDQ4SEg4NEwEgEw0OEhIODRMCYP3rHywsHwIVDRMTDf3rOlFROgIVDRMTDQEaHigmHjwTDQ0TEAxWBQkJB1QMEBMNDRM6/s7+ZA4SEg4BnA4SEg7+ZA4SEg4BnA4SEg4AAgAA/8AESQPAADwAggAAASIHDgEHBhUUFhcWFx4BFxYXHgEfAR4BFx4BMzI2Nz4BNz4BNwc2Nz4BNzY3PgE1NCcuAScmIyIGBy4BIwUyFx4BFxYVFAYHBgcOAQcGBw4BDwEOAQ8BDgEjMTAiMSImJzEuAScXLgEnFyYnLgEnJicuATU0Nz4BNzYzMhYfATc+ATMBQ0M7O1caGSovExkZPCMkJxk1GwYRHQYMHhAPHg0FHREgNxoCJyQjPBkZEy8qGRpXOztDQHQtLXVAAcM0Li9FFBQjKxEYFzoiIiUYNBsFChcNBAMJBAEECAMQGgwDHjYaAiYhIjoXGBEqJBQURS8uNDpoJBscJWg5A8AcG2A/QEhHbUoeHx9DIiMjFy4WBQ4XBAoKCgoEFw8ZMBgCJCIjQh8fHkptR0hAP2AbHDQvLzRFFhZMMzQ6Ol1CGx4dPyEhIhYtFgQIEwoDAwMDAgwVCgIZLhgDIyEhPx0eG0JdOjo0M0wWFjYxJiUyNgAAAQAAAAEAAKb8EWdfDzz1AAsEAAAAAADZaF2HAAAAANloXYcAAP/ABEkDwAAAAAgAAgAAAAAAAAABAAADwP/AAAAESQAAAAAESQABAAAAAAAAAAAAAAAAAAAANAQAAAAAAAAAAAAAAAIAAAAEAABLBAAAAAQAACsEAAAABAAAAAQAAAAEAAArBAAAQAQAAAAEAAAABAAADgQAAAAEAAHVBAAAKwQAABUEAAAABAAAAAQAAAAEAAALBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAOgQAAAAEAAAABAAAAAQAAAwESQABA+AAAAQAAAsEAADjBAAA4QQAAAsEAABTAqAADAQAALcEAAAMBAAANwQAAC8EAAAABAAAAARJAAAAAAAAAAoAFAAeAGQBSAGAAcICSALGAzQDhAPoBC4EiAUGBTIFTAV+BhQGggb2B5IIQAk8CfQK2gvcDVAOZA8+D8oQAhDSEUYRthIAEkoSdhKgEsoS9BMeE6AT0BQAFCoUaBTWFbIWRhcGAAAAAQAAADQBBwAKAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAYAAAABAAAAAAACAAcAVwABAAAAAAADAAYAMwABAAAAAAAEAAYAbAABAAAAAAAFAAsAEgABAAAAAAAGAAYARQABAAAAAAAKABoAfgADAAEECQABAAwABgADAAEECQACAA4AXgADAAEECQADAAwAOQADAAEECQAEAAwAcgADAAEECQAFABYAHQADAAEECQAGAAwASwADAAEECQAKADQAmG9uZXVpSQBvAG4AZQB1AGkASVZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMG9uZXVpSQBvAG4AZQB1AGkASW9uZXVpSQBvAG4AZQB1AGkASVJlZ3VsYXIAUgBlAGcAdQBsAGEAcm9uZXVpSQBvAG4AZQB1AGkASUZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=') + format('truetype'); + font-weight: normal; + font-style: normal; +} + +.new-fc-one-icon { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'new-fc-one-icon' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.new-fc-one-icon-arrow-to-top::before { + content: '\e900'; +} + +.new-fc-one-icon-bullseye::before { + content: '\e901'; +} + +.new-fc-one-icon-calendar::before { + content: '\e91b'; +} + +.new-fc-one-icon-time::before { + content: '\e91f'; +} + +.new-fc-one-icon-ellipsis::before { + content: '\e902'; +} + +.new-fc-one-icon-envelope::before { + content: '\e903'; +} + +.new-fc-one-icon-fail::before { + content: '\e904'; +} + +.new-fc-one-icon-warning::before { + content: '\e905'; +} + +.new-fc-one-icon-file::before { + content: '\e906'; +} + +.new-fc-one-icon-flag::before { + content: '\e907'; +} + +.new-fc-one-icon-folder-open::before { + content: '\e908'; +} + +.new-fc-one-icon-folder::before { + content: '\e909'; +} + +.new-fc-one-icon-home::before { + content: '\e90a'; +} + +.new-fc-one-icon-info::before { + content: '\e90b'; +} + +.new-fc-one-icon-loading::before { + content: '\e90c'; +} + +.new-fc-one-icon-minus::before { + content: '\e90d'; +} + +.new-fc-one-icon-plus::before { + content: '\e90e'; +} + +.new-fc-one-icon-question::before { + content: '\e90f'; +} + +.new-fc-one-icon-search::before { + content: '\e910'; +} + +.new-fc-one-icon-success::before { + content: '\e911'; +} + +.new-fc-one-icon-sync-alt::before { + content: '\e912'; +} + +.new-fc-one-icon-heart-active::before { + content: '\e921'; + color: #f85d5d; +} + +.new-fc-one-icon-recommend::before { + content: '\e918'; +} + +.new-fc-one-icon-material::before { + content: '\e91d'; +} + +.new-fc-one-icon-delete::before { + content: '\e931'; + color: #666; +} + +.new-fc-one-icon-heart-o::before { + content: '\e932'; + color: #999; +} + +.new-fc-one-icon-fund::before { + content: '\e917'; +} + +.new-fc-one-icon-volume::before { + content: '\e930'; +} + +.new-fc-one-icon-suggest::before { + content: '\e913'; +} + +.new-fc-one-icon-budget::before { + content: '\e914'; +} + +.new-fc-one-icon-verify::before { + content: '\e915'; +} + +.new-fc-one-icon-accumulate::before { + content: '\e916'; +} + +.new-fc-one-icon-cost::before { + content: '\e919'; +} + +.new-fc-one-icon-transform::before { + content: '\e91a'; +} + +.new-fc-one-icon-filter::before { + content: '\e91c'; +} + +.new-fc-one-icon-refresh::before { + content: '\e91e'; +} + +.new-fc-one-icon-sorting::before { + content: '\e920'; +} + +.new-fc-one-icon-upload::before { + content: '\e923'; +} + +.new-fc-one-icon-angle-down::before { + content: '\e925'; +} + +.new-fc-one-icon-angle-left::before { + content: '\e926'; +} + +.new-fc-one-icon-angle-right::before { + content: '\e927'; +} + +.new-fc-one-icon-angle-up::before { + content: '\e928'; +} + +.new-fc-one-icon-append::before { + content: '\e929'; +} + +.new-fc-one-icon-arrow-down::before { + content: '\e92a'; +} + +.new-fc-one-icon-arrow-up::before { + content: '\e92b'; +} + +.new-fc-one-icon-check::before { + content: '\e92d'; +} + +.new-fc-one-icon-close::before { + content: '\e92e'; +} + +.new-fc-one-icon-copy::before { + content: '\e92f'; +} + +.new-fc-one-select-another-xsmall { + font-size: 12px; + border-radius: 2px; +} + +.new-fc-one-select-another-xsmall .new-fc-one-select-another-selection { + border-radius: 2px; +} + +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection-text-error { + font-size: 12px; +} + +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection__rendered { + line-height: 22px; +} + +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection--multiple { + min-height: 22px; +} + +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__choice { + height: 16px; + line-height: 16px; + margin-top: 4px; + margin-bottom: 4px; +} + +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__clear, +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-arrow { + top: 12px; +} + +.new-fc-one-select-another-xsmall + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-search__field__wrap + input { + font-size: 12px; +} + +.new-fc-one-select-another-dropdown-xsmall + .new-fc-one-select-another-dropdown-menu-item { + height: 24px; + line-height: 24px; + font-size: 12px; +} + +.new-fc-one-select-another-dropdown-xsmall + .new-fc-one-select-another-dropdown-menu-item + .new-fc-one-checkbox-wrapper + + span { + font-size: 12px; +} + +.new-fc-one-select-another-dropdown-xsmall + .new-fc-one-select-another-dropdown-menu-item-group-title { + height: 24px; + line-height: 24px; + font-size: 12px; +} + +.new-fc-one-select-another-small { + font-size: 12px; + border-radius: 2px; +} + +.new-fc-one-select-another-small .new-fc-one-select-another-selection { + border-radius: 2px; +} + +.new-fc-one-select-another-small + .new-fc-one-select-another-selection-text-error { + font-size: 12px; +} + +.new-fc-one-select-another-small + .new-fc-one-select-another-selection__rendered { + line-height: 26px; +} + +.new-fc-one-select-another-small + .new-fc-one-select-another-selection--multiple { + min-height: 26px; +} + +.new-fc-one-select-another-small + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__choice { + height: 20px; + line-height: 20px; + margin-top: 4px; + margin-bottom: 4px; +} + +.new-fc-one-select-another-small + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__clear, +.new-fc-one-select-another-small + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-arrow { + top: 14px; +} + +.new-fc-one-select-another-small + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-search__field__wrap + input { + font-size: 12px; +} + +.new-fc-one-select-another-dropdown-small + .new-fc-one-select-another-dropdown-menu-item { + height: 28px; + line-height: 28px; + font-size: 12px; +} + +.new-fc-one-select-another-dropdown-small + .new-fc-one-select-another-dropdown-menu-item + .new-fc-one-checkbox-wrapper + + span { + font-size: 12px; +} + +.new-fc-one-select-another-dropdown-small + .new-fc-one-select-another-dropdown-menu-item-group-title { + height: 28px; + line-height: 28px; + font-size: 12px; +} + +.new-fc-one-select-another-medium { + font-size: 14px; + border-radius: 3px; +} + +.new-fc-one-select-another-medium .new-fc-one-select-another-selection { + border-radius: 3px; +} + +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection-text-error { + font-size: 14px; +} + +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection__rendered { + line-height: 30px; +} + +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection--multiple { + min-height: 30px; +} + +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__choice { + height: 24px; + line-height: 24px; + margin-top: 4px; + margin-bottom: 4px; +} + +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__clear, +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-arrow { + top: 16px; +} + +.new-fc-one-select-another-medium + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-search__field__wrap + input { + font-size: 14px; +} + +.new-fc-one-select-another-dropdown-medium + .new-fc-one-select-another-dropdown-menu-item { + height: 32px; + line-height: 32px; + font-size: 14px; +} + +.new-fc-one-select-another-dropdown-medium + .new-fc-one-select-another-dropdown-menu-item + .new-fc-one-checkbox-wrapper + + span { + font-size: 14px; +} + +.new-fc-one-select-another-dropdown-medium + .new-fc-one-select-another-dropdown-menu-item-group-title { + height: 32px; + line-height: 32px; + font-size: 14px; +} + +.new-fc-one-select-another-large { + font-size: 16px; + border-radius: 4px; +} + +.new-fc-one-select-another-large .new-fc-one-select-another-selection { + border-radius: 4px; +} + +.new-fc-one-select-another-large + .new-fc-one-select-another-selection-text-error { + font-size: 16px; +} + +.new-fc-one-select-another-large + .new-fc-one-select-another-selection__rendered { + line-height: 34px; +} + +.new-fc-one-select-another-large + .new-fc-one-select-another-selection--multiple { + min-height: 34px; +} + +.new-fc-one-select-another-large + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__choice { + height: 28px; + line-height: 28px; + margin-top: 4px; + margin-bottom: 4px; +} + +.new-fc-one-select-another-large + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__clear, +.new-fc-one-select-another-large + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-arrow { + top: 18px; +} + +.new-fc-one-select-another-large + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-search__field__wrap + input { + font-size: 16px; +} + +.new-fc-one-select-another-dropdown-large + .new-fc-one-select-another-dropdown-menu-item { + height: 36px; + line-height: 36px; + font-size: 16px; +} + +.new-fc-one-select-another-dropdown-large + .new-fc-one-select-another-dropdown-menu-item + .new-fc-one-checkbox-wrapper + + span { + font-size: 16px; +} + +.new-fc-one-select-another-dropdown-large + .new-fc-one-select-another-dropdown-menu-item-group-title { + height: 36px; + line-height: 36px; + font-size: 16px; +} + +.new-fc-one-select-another-disabled { + border: 1px solid #eee; + background-color: #fafafa; + color: #ccc; + cursor: not-allowed; +} + +.new-fc-one-select-another-disabled:hover, +.new-fc-one-select-another-disabled:active, +.new-fc-one-select-another-disabled:focus { + border-color: #eee; +} + +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple[type='list'] { + cursor: not-allowed; +} + +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice { + cursor: not-allowed; + background-color: #fafafa; + border: 1px solid #eee; +} + +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice:hover, +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice:active, +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice:focus { + background-color: #fafafa; +} + +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice__remove { + cursor: not-allowed; +} + +.new-fc-one-select-another:not(.new-fc-one-select-another-disabled) { + border: 1px solid #e0e0e0; + background-color: #fff; + color: #333; + cursor: pointer; +} + +.new-fc-one-select-another:not(.new-fc-one-select-another-disabled):hover, +.new-fc-one-select-another:not(.new-fc-one-select-another-disabled):active { + border-color: #999; +} + +.new-fc-one-select-another:not(.new-fc-one-select-another-disabled):focus { + border-color: #3d88f2; +} + +.new-fc-one-select-another { + line-height: 1; + box-sizing: border-box; + margin: 0; + padding: 0; + list-style: none; + display: inline-block; + position: relative; + outline: 0; + width: 120px; + padding: 0 12px; +} + +.new-fc-one-select-another-focused { + border-color: #3d88f2; +} + +.new-fc-one-select-another-open { + border-color: #999; +} + +.new-fc-one-select-another-open .new-fc-one-select-another-arrow { + transform: scale(0.7, 0.7) rotate(180deg); +} + +.new-fc-one-select-another ul, +.new-fc-one-select-another ol { + margin: 0; + padding: 0; + list-style: none; +} + +.new-fc-one-select-another > ul > li > a { + padding: 0; + background-color: #fff; +} + +.new-fc-one-select-another-error-line { + border: 1px solid #e64552 !important; +} + +.new-fc-one-select-another-error-line:hover, +.new-fc-one-select-another-error-line:focus, +.new-fc-one-select-another-error-line:active { + border-color: #e64552 !important; +} + +.new-fc-one-select-another-error-line:focus { + box-shadow: 0 0 0 2px rgba(230, 69, 82, 0.2); +} + +.new-fc-one-select-another-selection__clear, +.new-fc-one-select-another-custom-key, +.new-fc-one-select-another-arrow { + position: absolute; + top: 50%; + right: 0; + line-height: 1; + margin-top: -6px; + color: #666; + font-size: calc(1em - 4px); + transition: transform 0.3s; + width: 1em; + height: 1em; + background: #fff; +} + +.new-fc-one-select-another-arrow { + transform: scale(0.7, 0.7); +} + +.new-fc-one-select-another-selection__clear { + transform: scale(1); + color: #999; + z-index: 1; + opacity: 0; +} + +.new-fc-one-select-another-selection { + position: relative; + outline: none; + user-select: none; + box-sizing: border-box; + display: block; + border-radius: 0; + transition: all 0.3s ease-in-out; +} + +.new-fc-one-select-another-selection:hover + .new-fc-one-select-another-selection__clear { + opacity: 1; +} + +.new-fc-one-select-another-selection-selected-value { + float: left; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 100%; +} + +.new-fc-one-select-another-selection-text-error { + color: #e64552; + margin-top: 4px; +} + +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection__clear { + display: none; + visibility: hidden; + pointer-events: none; +} + +.new-fc-one-select-another-disabled + .new-fc-one-select-another-selection--multiple + .new-fc-one-select-another-selection__choice__remove { + display: none; +} + +.new-fc-one-select-another-selection--single { + position: relative; +} + +.new-fc-one-select-another-selection__rendered { + display: block; + position: relative; + padding-right: 14px; +} + +.new-fc-one-select-another-selection__rendered::after { + content: '.'; + visibility: hidden; + pointer-events: none; + display: inline-block; + width: 0; + height: 0; +} + +.new-fc-one-select-another-selection__placeholder, +.new-fc-one-select-another-search__field__placeholder { + position: absolute; + left: 0; + right: 14px; + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: left; + color: #999; +} + +.new-fc-one-select-another-search__field__placeholder { + left: 8px; +} + +.new-fc-one-select-another-search__field__mirror { + position: absolute; + top: -2px; + left: 0; + white-space: pre; + pointer-events: none; + opacity: 0; + color: #333; +} + +.new-fc-one-select-another-search--inline { + position: absolute; + height: 100%; + width: 100%; +} + +.new-fc-one-select-another-search--inline + .new-fc-one-select-another-search__field__wrap { + width: 100%; + height: 100%; +} + +.new-fc-one-select-another-search--inline + .new-fc-one-select-another-search__field { + border-width: 0; + height: 100%; + width: calc(100% - 12px); + background: transparent; + outline: 0; + border-radius: 0; + line-height: 1; + color: #333; +} + +.new-fc-one-select-another-search--inline > i { + float: right; +} + +.new-fc-one-select-another-selection--multiple[type='list'] { + cursor: text; + zoom: 1; + position: relative; +} + +.new-fc-one-select-another-selection--multiple[type='list']::before, +.new-fc-one-select-another-selection--multiple[type='list']::after { + content: ' '; + display: table; +} + +.new-fc-one-select-another-selection--multiple[type='list']::after { + clear: both; + visibility: hidden; + font-size: 0; + height: 0; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-search--inline { + float: left; + position: relative; + top: 1px; + left: 0; + width: auto; + padding: 0; + max-width: calc(100% - 12px); +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-search--inline + .new-fc-one-select-another-search__field { + max-width: 100%; + width: 0.75em; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-search-hidden { + height: 0; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-search-ul { + padding: 0; + margin: 0; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-search-ul::after { + content: ' '; + display: table; + clear: both; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__rendered { + height: auto; + padding-right: 40px; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__rendered::after { + display: none; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice { + color: #333; + background-color: #f5f5f5; + border-radius: 2px; + float: left; + margin-right: 4px; + max-width: 99%; + position: relative; + overflow: hidden; + transition: padding 0.3s ease-in-out; + padding: 0 26px 0 8px; + cursor: pointer; + border: 1px solid #e0e0e0; + box-sizing: border-box; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice:hover { + background-color: #eee; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice:focus { + background-color: #eee; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice:active { + background-color: #e0e0e0; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice__disabled { + cursor: not-allowed; + background-color: #fafafa; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice__content { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + transition: margin 0.3s ease-in-out; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__choice__remove { + color: #666; + line-height: inherit; + cursor: pointer; + display: inline-block; + font-weight: bold; + transition: all 0.3s; + position: absolute; + right: 8px; + transform: scale(0.7, 0.7); + top: 1px; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__clear { + top: 16px; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__total_count { + right: 0; + position: absolute; + color: #999; + bottom: 4px; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__total_count-error { + color: #e64552; +} + +.new-fc-one-select-another-selection--multiple[type='list'] + .new-fc-one-select-another-selection__total_count-min { + right: 20px; + top: 50%; + transform: translateY(-50%); + height: 20px; + line-height: 20px; +} + +.new-fc-one-select-another-hidden { + display: none; +} + +.new-fc-one-select-another-multiple .new-fc-one-select-another { + width: 300px; +} + +.new-fc-one-select-another-dropdown { + line-height: 1; + margin: 0; + padding: 0; + list-style: none; + font-variant: initial; + background-color: #fff; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); + border-radius: 3px; + box-sizing: border-box; + z-index: 1051; + left: -9999px; + top: -9999px; + position: absolute; + outline: none; +} + +.new-fc-one-select-another-dropdown.slide-up-enter.slide-up-enter-active.new-fc-one-select-another-dropdown-placement-topLeft, +.new-fc-one-select-another-dropdown.slide-up-appear.slide-up-appear-active.new-fc-one-select-another-dropdown-placement-topLeft { + animation-name: oneUISlideDownInEffect; +} + +.new-fc-one-select-another-dropdown.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-dropdown-placement-bottomLeft { + animation-name: oneUISlideUpOutEffect; +} + +.new-fc-one-select-another-dropdown.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-dropdown-placement-topLeft { + animation-name: oneUISlideDownOutEffect; +} + +.new-fc-one-select-another-dropdown-hidden { + display: none; +} + +.new-fc-one-select-another-dropdown-menu { + outline: none; + margin: 0; + padding-left: 0; + list-style: none; + overflow: auto; +} + +.new-fc-one-select-another-dropdown-menu-item-group-list { + margin: 0; + padding: 0; +} + +.new-fc-one-select-another-dropdown-menu-item-group-list + > .new-fc-one-select-another-dropdown-menu-item { + padding-left: 8px; +} + +.new-fc-one-select-another-dropdown-menu-item-group-title { + color: #999; + padding: 0 8px; +} + +.new-fc-one-select-another-dropdown-menu-item-group-list + .new-fc-one-select-another-dropdown-menu-item:first-child:not(:last-child), +.new-fc-one-select-another-dropdown-menu-item-group:not(:last-child) + .new-fc-one-select-another-dropdown-menu-item-group-list + .new-fc-one-select-another-dropdown-menu-item:last-child { + border-radius: 0; +} + +.new-fc-one-select-another-dropdown-menu-item-group:not(:last-child) { + padding-bottom: 2px; + border-bottom: 1px solid #999; +} + +.new-fc-one-select-another-dropdown-menu-item[type='custom'] { + position: relative; + display: block; + padding: 0 8px; +} + +.new-fc-one-select-another-dropdown-menu-item { + position: relative; + display: block; + padding: 0 8px; + white-space: nowrap; + cursor: pointer; + overflow: hidden; + text-overflow: ellipsis; + transition: background 0.3s ease; + background-color: #fff; + color: #333; +} + +.new-fc-one-select-another-dropdown-menu-item:hover { + background-color: #f5f5f5; + color: #000; +} + +.new-fc-one-select-another-dropdown-menu-item:active { + background-color: #eee; + color: #000; +} + +.new-fc-one-select-another-dropdown-menu-item:focus { + background-color: #f2f7ff; + color: #000; +} + +.new-fc-one-select-another-dropdown-menu-item-selected { + background-color: #fff; + color: #3d88f2; +} + +.new-fc-one-select-another-dropdown-menu-item-selected:hover { + background-color: #f5f5f5; + color: #3d88f2; +} + +.new-fc-one-select-another-dropdown-menu-item-selected:active { + background-color: #eee; + color: #3d88f2; +} + +.new-fc-one-select-another-dropdown-menu-item-selected:focus { + background-color: #f2f7ff; + color: #3d88f2; +} + +.new-fc-one-select-another-dropdown-menu-item-divider { + height: 1px; + margin: 1px 0; + overflow: hidden; + background-color: #eee; + line-height: 0; +} + +.new-fc-one-select-another-dropdown-menu-item-disabled { + background-color: #fafafa; + color: #ccc; + cursor: not-allowed; +} + +.new-fc-one-select-another-dropdown-menu-item-disabled:hover { + background-color: #fafafa; + color: #ccc; +} + +.new-fc-one-select-another-dropdown-menu-item-disabled:active { + background-color: #fafafa; + color: #ccc; +} + +.new-fc-one-select-another-dropdown-menu-item-disabled:focus { + background-color: #fafafa; + color: #ccc; +} + +.new-fc-one-select-another-dropdown-menu-container { + width: 172px; + height: 152px; + overflow: auto; +} + +.new-fc-one-select-another-dropdown-menu .new-fc-one-checkbox-wrapper { + font-size: inherit; +} + +.new-fc-one-select-another-dropdown--multiple + .new-fc-one-select-another-dropdown-menu-item-selected + .new-fc-one-checkbox-wrapper + + span { + background-color: transparent; + color: #333; +} + +.new-fc-one-select-another-dropdown--multiple + .new-fc-one-select-another-dropdown-menu-item-selected + .new-fc-one-checkbox-wrapper + + span:hover { + background-color: transparent; + color: #000; +} + +.new-fc-one-select-another-dropdown--multiple + .new-fc-one-select-another-dropdown-menu-item-selected + .new-fc-one-checkbox-wrapper + + span:active { + background-color: transparent; + color: #000; +} + +.new-fc-one-select-another-dropdown--multiple + .new-fc-one-select-another-dropdown-menu-item-selected + .new-fc-one-checkbox-wrapper + + span:focus { + background-color: transparent; + color: #000; +} + +.new-fc-one-select-another-dropdown-xsmall + .new-fc-one-select-another-dropdown-menu { + max-height: 248px; +} + +.new-fc-one-select-another-dropdown-small + .new-fc-one-select-another-dropdown-menu { + max-height: 288px; +} + +.new-fc-one-select-another-dropdown-medium + .new-fc-one-select-another-dropdown-menu { + max-height: 328px; +} + +.new-fc-one-select-another-dropdown-large + .new-fc-one-select-another-dropdown-menu { + max-height: 368px; +} + +.new-fc-one-select-another-search-text-highlight { + color: #f27c49; +} + +.new-fc-one-single-select { + background: #fff; + cursor: pointer; + position: relative; + color: #333; + border: 1px solid #dbdbdb; + padding-right: 20px; + box-sizing: border-box; + height: 32px; + line-height: 1; + display: inline-block; + vertical-align: middle; +} + +.new-fc-one-single-select-text { + font-size: 12px; + padding: 0 10px; + display: inline-block; + line-height: 30px; + height: 30px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; +} + +.new-fc-one-single-select:hover { + border: 1px solid #999; +} + +.new-fc-one-select-another-focused .new-fc-one-single-select, +.new-fc-one-single-select:focus, +.new-fc-one-single-select:active { + border: 1px solid #999; +} + +.new-fc-one-single-select-open .new-fc-one-icon { + transform: rotate(180deg) scale(0.7); +} + +.new-fc-one-single-select-disabled { + background: #eee; + cursor: not-allowed; + color: #b8b8b8; +} + +.new-fc-one-single-select-disabled:hover { + border: 1px solid #dbdbdb; +} + +.new-fc-one-select-another-focused .new-fc-one-single-select-disabled, +.new-fc-one-single-select-disabled:focus, +.new-fc-one-single-select-disabled:active { + border: 1px solid #dbdbdb; +} + +.new-fc-one-multiple-select { + position: relative; +} + +.new-fc-one-multiple-select-open .new-fc-one-icon { + transform: rotate(180deg) scale(0.7); +} + +.new-fc-one-multiple-select-text-label { + display: inline-block; +} + +.new-fc-one-select-another-popover { + line-height: 1; + margin: 0; + padding: 0; + list-style: none; + padding: 8px; + font-variant: initial; + background-color: #fff; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); + border-radius: 0; + box-sizing: border-box; + z-index: 1051; + left: -9999px; + top: -9999px; + position: absolute; + outline: none; +} + +.new-fc-one-select-another-popover.slide-up-enter.slide-up-enter-active.new-fc-one-select-another-popover-placement-topLeft, +.new-fc-one-select-another-popover.slide-up-appear.slide-up-appear-active.new-fc-one-select-another-popover-placement-topLeft { + animation-name: oneUISlideDownInEffect; +} + +.new-fc-one-select-another-popover.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-popover-placement-bottomLeft { + animation-name: oneUISlideUpOutEffect; +} + +.new-fc-one-select-another-popover.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-popover-placement-topLeft { + animation-name: oneUISlideDownOutEffect; +} + +.new-fc-one-select-another-popover-hidden { + display: none; +} + +.new-fc-one-select-another-popover-container { + width: 288px; +} + +.new-fc-one-select-another-popover-container-open + .new-fc-one-select-another-arrow { + transform: scale(0.7, 0.7) rotate(180deg); +} + +.new-fc-one-select-another-popover-container + .new-fc-one-select-another-selection__total { + top: 0 !important; + left: 8px !important; +} + +.new-fc-one-select-another-popover-container + .new-fc-one-select-another-selection { + cursor: auto; +} + +.new-fc-one-select-another-popover-inner { + width: 100%; +} + +.new-fc-one-select-another-popover-inner-container { + display: inline-block; + width: 100%; +} + +.new-fc-one-select-another-popover-inner-container-custom { + margin-bottom: 8px; +} + +.new-fc-one-select-another-popover-inner-container-button-item { + margin-right: 8px; +} + +.new-fc-one-select-another-pop { + line-height: 1; + margin: 0; + padding: 0; + list-style: none; + font-variant: initial; + background-color: #fff; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.15); + border-radius: 0; + box-sizing: border-box; + z-index: 1051; + left: -9999px; + top: -9999px; + position: absolute; + outline: none; +} + +.new-fc-one-select-another-pop.slide-up-enter.slide-up-enter-active.new-fc-one-select-another-pop-placement-topLeft, +.new-fc-one-select-another-pop.slide-up-appear.slide-up-appear-active.new-fc-one-select-another-pop-placement-topLeft { + animation-name: oneUISlideDownInEffect; +} + +.new-fc-one-select-another-pop.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-pop-placement-bottomLeft { + animation-name: oneUISlideUpOutEffect; +} + +.new-fc-one-select-another-pop.slide-up-leave.slide-up-leave-active.new-fc-one-select-another-pop-placement-topLeft { + animation-name: oneUISlideDownOutEffect; +} + +.new-fc-one-select-another-pop-hidden { + display: none; +} + +.new-fc-one-select-another-container { + display: inline-block; +} + +.new-fc-one-select-another-selection-item { + position: relative; + top: -10px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx new file mode 100644 index 000000000..7bf17bd6d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/NewVertexType.tsx @@ -0,0 +1,1023 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import classnames from 'classnames'; +import { cloneDeep, isUndefined } from 'lodash-es'; +import { + Input, + Radio, + Select, + Button, + Switch, + Tooltip, + Checkbox, + Message +} from 'hubble-ui'; +import { useTranslation } from 'react-i18next'; + +import { Tooltip as CustomTooltip } from '../../../common/'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { formatVertexIdText } from '../../../../stores/utils'; + +import type { VertexTypeValidatePropertyIndexes } from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import HintIcon from '../../../../assets/imgs/ic_question_mark.svg'; +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import closeIcon from '../../../../assets/imgs/ic_close_16.svg'; + +import './NewVertexType.less'; + +const NewVertexType: React.FC = observer(() => { + const dataAnalyzeStore = useContext(DataAnalyzeStore); + const { metadataPropertyStore, vertexTypeStore } = useContext( + MetadataConfigsRootStore + ); + const { t } = useTranslation(); + const [isAddNewProperty, switchIsAddNewProperty] = useState(false); + const [deletePopIndex, setDeletePopIndex] = useState(null); + const deleteWrapperRef = useRef(null); + const dropdownWrapperRef = useRef(null); + + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // if clicked element is not on dropdown, collpase it + if ( + isAddNewProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddNewProperty(false); + } + + if ( + deletePopIndex && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + setDeletePopIndex(null); + } + }, + [deletePopIndex, isAddNewProperty] + ); + + useEffect(() => { + metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); + vertexTypeStore.validateAllNewVertexType(true); + }, [metadataPropertyStore, vertexTypeStore]); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( +
+
+
+ {t('addition.menu.base-info')} +
+
+
+ * + {t('addition.vertex.vertex-type-name')}: +
+ { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + name: e.value + }); + }} + originInputProps={{ + onBlur() { + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType('name'); + } + }} + /> +
+ +
+
+ * + {t('addition.vertex.vertex-style')}: +
+
+ +
+
+ +
+
+ +
+
+ * + {t('addition.common.id-strategy')}: +
+ ) => { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + id_strategy: e.target.value + }); + + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType('primaryKeys'); + }} + > + + {t('addition.constant.primary-key-id')} + + + {t('addition.constant.automatic-generation')} + + + {t('addition.constant.custom-string')} + + + {t('addition.constant.custom-number')} + + + {t('addition.constant.custom-uuid')} + + +
+
+
+ {vertexTypeStore.newVertexType.id_strategy === 'PRIMARY_KEY' && ( + * + )} + {t('addition.common.association-property')}: +
+
+ {vertexTypeStore.newVertexType.properties.length !== 0 && ( +
+
+
{t('addition.common.property')}
+
{t('addition.common.allow-null')}
+
+ {vertexTypeStore.newVertexType.properties.map( + (property, index) => { + const currentProperties = cloneDeep( + vertexTypeStore.newVertexType.properties + ); + + return ( +
+
{property.name}
+
+ { + currentProperties[index].nullable = checked; + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + properties: currentProperties + }); + + // remove primary keys since it could be empty value + if (checked) { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + primary_keys: + vertexTypeStore.newVertexType.primary_keys.filter( + (key) => key !== property.name + ) + }); + } + }} + size="large" + /> +
+
+ ); + } + )} +
+ )} +
{ + switchIsAddNewProperty(!isAddNewProperty); + }} + > + {t('addition.common.add-property')} + toggleAddProperty +
+
+
+ {isAddNewProperty && ( +
+
+
+ {metadataPropertyStore.metadataProperties.map((property) => ( +
+ + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesInSelectedVertextType = + vertexTypeStore.addedPropertiesInSelectedVertextType; + + addedPropertiesInSelectedVertextType.has(property.name) + ? addedPropertiesInSelectedVertextType.delete( + property.name + ) + : addedPropertiesInSelectedVertextType.add( + property.name + ); + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + properties: [ + ...addedPropertiesInSelectedVertextType + ].map((propertyName) => { + const currentProperty = + vertexTypeStore.newVertexType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined(currentProperty) + ? currentProperty.nullable + : true + }; + }) + }); + + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType('properties'); + }} + > + {property.name} + + +
+ ))} +
+
+ )} + {vertexTypeStore.newVertexType.id_strategy === 'PRIMARY_KEY' && ( +
+
+ * + {t('addition.common.primary-key-property')}: +
+ +
+ )} + +
+
+ * + {t('addition.vertex.vertex-display-content')}: +
+ +
+ +
+ + {t('addition.edge.index-info')} + + + hint + +
+
+
+ * + {t('addition.menu.type-index')}: +
+ { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + open_label_index: + !vertexTypeStore.newVertexType.open_label_index + }); + }} + size="large" + /> +
+
+
+ {t('addition.common.property-index')}: +
+
+ {vertexTypeStore.newVertexType.property_indexes.length !== 0 && ( +
+
+ {t('addition.edge.index-name')} +
+
+ {t('addition.edge.index-type')} +
+
{t('addition.common.property')}
+
+ )} + {vertexTypeStore.newVertexType.property_indexes.map( + ({ name, type, fields }, index) => ( +
+
+ { + const propertyIndexEntities = cloneDeep( + vertexTypeStore.newVertexType.property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType( + 'propertyIndexes' + ); + } + }} + /> +
+
+ +
+
+ +
+ + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const propertyIndexEntities = cloneDeep( + vertexTypeStore.newVertexType.property_indexes + ); + + propertyIndexEntities.splice(index, 1); + + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + property_indexes: propertyIndexEntities + }); + + vertexTypeStore.validateAllNewVertexType(true); + vertexTypeStore.validateNewVertexType( + 'propertyIndexes' + ); + + setDeletePopIndex(null); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeletePopIndex(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: closeIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeletePopIndex(index); + } + }} + childrenWrapperElement="img" + /> +
+ ) + )} + { + if ( + vertexTypeStore.newVertexType.property_indexes.length === 0 || + vertexTypeStore.isAddNewPropertyIndexReady + ) { + vertexTypeStore.mutateNewProperty({ + ...vertexTypeStore.newVertexType, + property_indexes: [ + ...vertexTypeStore.newVertexType.property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + vertexTypeStore.validateAllNewVertexType(true); + // set isAddNewPropertyIndexReady to false + vertexTypeStore.validateNewVertexType( + 'propertyIndexes', + true + ); + } + }} + style={{ + cursor: 'pointer', + color: vertexTypeStore.isAddNewPropertyIndexReady + ? '#2b65ff' + : '#999', + lineHeight: '32px' + }} + > + {t('addition.edge.add-group')} + +
+
+ +
+
+ + +
+
+ + ); +}); + +export default NewVertexType; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less new file mode 100644 index 000000000..71698137e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.less @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.reuse-properties-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 16px; + + .reuse-steps { + width: 860px; + margin: 16px auto 18px; + } + + .reuse-properties { + &-row { + display: flex; + align-items: center; + margin: 18px 0 32px; + font-size: 14px; + color: #333; + + &:last-child { + margin-bottom: 24px; + } + + &-name { + width: 98px; + text-align: right; + margin-right: 13.9px; + } + } + + &-manipulations { + display: flex; + justify-content: center; + margin-bottom: 88px; + } + + &-validate { + &-duplicate, + &-exist, + &-pass { + width: 58px; + margin: 0 auto; + border-radius: 2px; + letter-spacing: 0; + line-height: 22px; + text-align: center; + } + + &-duplicate { + background: #fff2f2; + border: 1px solid #ff9499; + color: #e64552; + } + + &-exist, + &-pass { + background: #f2fff4; + border: 1px solid #7ed988; + color: #39bf45; + } + } + + &-complete-hint { + display: flex; + flex-direction: column; + justify-content: center; + margin: 88px auto 327px; + + &-description { + display: flex; + justify-content: center; + + & > div { + margin-left: 20px; + } + } + + &-manipulations { + margin: 42px auto 0; + } + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx new file mode 100644 index 000000000..ba1540f2f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/ReuseVertexTypes.tsx @@ -0,0 +1,1052 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { useContext, useState, useEffect } from 'react'; +import { observer } from 'mobx-react'; +import { + Select, + Steps, + Transfer, + Button, + Table, + Input, + Message +} from 'hubble-ui'; + +import { GraphManagementStoreContext } from '../../../../stores'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; + +import PassIcon from '../../../../assets/imgs/ic_pass.svg'; + +import './ReuseVertexTypes.less'; +import { cloneDeep } from 'lodash-es'; +import { useTranslation } from 'react-i18next'; + +const ReuseVertexTypes: React.FC = observer(() => { + const graphManagementStore = useContext(GraphManagementStoreContext); + const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); + const { vertexTypeStore } = metadataConfigsRootStore; + const { t } = useTranslation(); + const [currentStatus, setCurrentStatus] = useState(1); + // acutally the name, not id in database + const [selectedId, mutateSelectedId] = useState<[] | string>([]); + const [selectedList, mutateSelectedList] = useState([]); + + // step 2 + const [vertexTypeEditIndex, setVertexTypeEditIndex] = useState( + null + ); + const [propertyEditIndex, setPropertyEditIndex] = useState( + null + ); + const [propertyIndexEditIndex, setPropertyIndexEditIndex] = useState< + number | null + >(null); + + // hack: need to call @observable at here to dispatch re-render by mobx + // since @action in onBlur() in doesn't dispatch re-render + vertexTypeStore.validateReuseErrorMessage.vertexType.toUpperCase(); + vertexTypeStore.validateReuseErrorMessage.property.toUpperCase(); + vertexTypeStore.validateReuseErrorMessage.property_index.toUpperCase(); + + const vertexTypeColumnConfigs = [ + { + title: t('addition.common.vertex-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (index !== vertexTypeEditIndex) { + return ( +
+ {text} +
+ ); + } + + return ( + { + // remove validate message after user input changes + vertexTypeStore.resetValidateReuseErrorMessage('vertexType'); + + const editedCheckedReusableData = cloneDeep( + vertexTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.vertexlabel_conflicts[ + index + ].entity.name = e.value; + + vertexTypeStore.mutateEditedReusableData( + editedCheckedReusableData + ); + }} + originInputProps={{ + onBlur() { + vertexTypeStore.validateReuseData( + 'vertexType', + vertexTypeStore.checkedReusableData!.vertexlabel_conflicts[ + index + ].entity.name, + vertexTypeStore.editedCheckedReusableData! + .vertexlabel_conflicts[index].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + width: '30%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (vertexTypeStore.reusableVertexTypeNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return ( +
+ {text} +
+ ); + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + if (index === vertexTypeEditIndex) { + const originalName = vertexTypeStore.checkedReusableData! + .vertexlabel_conflicts[index].entity.name; + const changedName = vertexTypeStore.editedCheckedReusableData! + .vertexlabel_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + return ( +
+ { + if ( + !isChanged || + !vertexTypeStore.validateReuseData( + 'vertexType', + originalName, + changedName + ) + ) { + return; + } + + vertexTypeStore.mutateReuseData( + 'vertexType', + originalName, + changedName + ); + setVertexTypeEditIndex(null); + vertexTypeStore.mutateReusableVertexTypeChangeIndexes(index); + }} + > + {t('addition.common.save')} + + { + vertexTypeStore.resetValidateReuseErrorMessage('vertexType'); + setVertexTypeEditIndex(null); + vertexTypeStore.resetEditedReusableVertexTypeName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (vertexTypeEditIndex !== null) { + return; + } + + setVertexTypeEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (vertexTypeEditIndex !== null) { + return; + } + + setPropertyEditIndex(null); + + // remove selected status of the property in + const newSelectedList = [...selectedList].filter( + (property) => + property !== + vertexTypeStore.editedCheckedReusableData! + .vertexlabel_conflicts[index].entity.name + ); + + mutateSelectedList(newSelectedList); + + // notice: useState hooks cannot sync updated state value, so the length is still 1 + if (selectedList.length === 1) { + setCurrentStatus(1); + // remove edit status after return previous + vertexTypeStore.clearReusableNameChangeIndexes(); + return; + } + + vertexTypeStore.deleteReuseData('vertexlabel_conflicts', index); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + const metadataPropertyColumnConfigs = [ + { + title: t('addition.common.property-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (index !== propertyEditIndex) { + return text; + } + + return ( + { + // remove validate message after user input changes + vertexTypeStore.resetValidateReuseErrorMessage('property'); + + const editedCheckedReusableData = cloneDeep( + vertexTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.propertykey_conflicts[ + index + ].entity.name = e.value; + + vertexTypeStore.mutateEditedReusableData( + editedCheckedReusableData + ); + }} + originInputProps={{ + onBlur() { + vertexTypeStore.validateReuseData( + 'property', + vertexTypeStore.checkedReusableData!.propertykey_conflicts[ + index + ].entity.name, + vertexTypeStore.editedCheckedReusableData! + .propertykey_conflicts[index].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.common.data-type'), + dataIndex: 'data_type', + width: '15%', + render(text: string) { + if (text === 'TEXT') { + return 'string'; + } + + return text.toLowerCase(); + } + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + align: 'center', + width: '15%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (vertexTypeStore.reusablePropertyNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return
{text}
; + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + if (index === propertyEditIndex) { + const originalName = vertexTypeStore.checkedReusableData! + .propertykey_conflicts[index].entity.name; + const changedName = vertexTypeStore.editedCheckedReusableData! + .propertykey_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + return ( +
+ { + if ( + !isChanged || + !vertexTypeStore.validateReuseData( + 'property', + originalName, + changedName + ) + ) { + return; + } + + vertexTypeStore.mutateReuseData( + 'property', + originalName, + changedName + ); + + setPropertyEditIndex(null); + vertexTypeStore.mutateReusablePropertyNameChangeIndexes( + index + ); + }} + > + {t('addition.common.save')} + + { + vertexTypeStore.resetValidateReuseErrorMessage('property'); + setPropertyEditIndex(null); + vertexTypeStore.resetEditedReusablePropertyName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (propertyEditIndex !== null) { + return; + } + + setPropertyEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (propertyEditIndex !== null) { + return; + } + + setPropertyEditIndex(null); + + vertexTypeStore.deleteReuseData('propertykey_conflicts', index); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + const metadataPropertyIndexColumnConfigs = [ + { + title: t('addition.common.property-index-name'), + dataIndex: 'name', + width: '50%', + render(text: string, records: any, index: number) { + if (index !== propertyIndexEditIndex) { + return text; + } + + return ( + { + vertexTypeStore.resetValidateReuseErrorMessage('property_index'); + + const editedCheckedReusableData = cloneDeep( + vertexTypeStore.editedCheckedReusableData! + ); + + editedCheckedReusableData.propertyindex_conflicts[ + index + ].entity.name = e.value; + + vertexTypeStore.mutateEditedReusableData( + editedCheckedReusableData + ); + }} + originInputProps={{ + onBlur() { + vertexTypeStore.validateReuseData( + 'property_index', + vertexTypeStore.checkedReusableData!.propertyindex_conflicts[ + index + ].entity.name, + vertexTypeStore.editedCheckedReusableData! + .propertyindex_conflicts[index].entity.name + ); + } + }} + /> + ); + } + }, + { + title: t('addition.vertex.corresponding-vertex-type'), + dataIndex: 'owner', + width: '15%' + }, + { + title: t('addition.edge.verification-result'), + dataIndex: 'status', + align: 'center', + width: '15%', + render(value: string, records: any, index: number) { + let classname = ''; + let text = ''; + + if (vertexTypeStore.reusablePropertyIndexNameChangeIndexes.has(index)) { + return ( +
+ {t('addition.edge.be-verified')} +
+ ); + } + + switch (value) { + case 'DUPNAME': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.duplicate-name'); + break; + + case 'DEP_CONFLICT': + classname = 'reuse-properties-validate-duplicate'; + text = t('addition.message.dependency-conflict'); + break; + + case 'EXISTED': + classname = 'reuse-properties-validate-exist'; + text = t('addition.message.already-exist'); + break; + + case 'PASSED': + classname = 'reuse-properties-validate-pass'; + text = t('addition.message.pass'); + break; + } + + return
{text}
; + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '20%', + render(_: never, records: any, index: number) { + if (index === propertyIndexEditIndex) { + const originalName = vertexTypeStore.checkedReusableData! + .propertyindex_conflicts[index].entity.name; + const changedName = vertexTypeStore.editedCheckedReusableData! + .propertyindex_conflicts[index].entity.name; + const isChanged = changedName !== originalName; + + return ( +
+ { + if ( + !isChanged || + !vertexTypeStore.validateReuseData( + 'property_index', + originalName, + changedName + ) + ) { + return; + } + + vertexTypeStore.mutateReuseData( + 'property_index', + originalName, + changedName + ); + + setPropertyIndexEditIndex(null); + vertexTypeStore.mutateReusablePropertyIndexNameChangeIndexes( + index + ); + }} + > + {t('addition.common.save')} + + { + vertexTypeStore.resetValidateReuseErrorMessage( + 'property_index' + ); + setPropertyIndexEditIndex(null); + vertexTypeStore.resetEditedReusablePropertyIndexName(index); + }} + > + {t('addition.common.cancel')} + +
+ ); + } + + return ( +
+ { + if (propertyIndexEditIndex !== null) { + return; + } + + setPropertyIndexEditIndex(index); + }} + > + {t('addition.operate.rename')} + + { + if (propertyIndexEditIndex !== null) { + return; + } + + setPropertyIndexEditIndex(null); + + vertexTypeStore.deleteReuseData( + 'propertyindex_conflicts', + index + ); + }} + > + {t('addition.common.del')} + +
+ ); + } + } + ]; + + useEffect(() => { + // unlike metadata properties, all vertex types only needs here(in reuse) + vertexTypeStore.fetchVertexTypeList({ fetchAll: true }); + }, [vertexTypeStore]); + + return ( +
+
+ {t('addition.operate.reuse-vertex-type')} +
+
+ {t('addition.message.reuse-vertex-type-notice')} +
+
+ + {[ + t('addition.menu.select-reuse-item'), + t('addition.menu.confirm-reuse-item'), + t('addition.menu.complete-reuse') + ].map((title: string, index: number) => ( + index + 1 + ? 'finish' + : 'wait' + } + key={title} + /> + ))} + + + {currentStatus === 1 && ( + <> +
+
+ * + {t('addition.newGraphConfig.id')}: +
+ +
+
+
+ * + {t('addition.operate.reuse-vertex-type')}: +
+ name + )} + selectedList={selectedList} + showSearchBox={false} + candidateTreeStyle={{ + width: 355, + fontSize: 14 + }} + selectedTreeStyle={{ + width: 355, + fontSize: 14 + }} + handleSelect={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleSelectAll={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleDelete={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + handleDeleteAll={(selectedList: string[]) => { + mutateSelectedList(selectedList); + }} + /> +
+
+ + +
+ + )} + + {currentStatus === 2 && ( + <> +
+ {t('addition.common.selected-vertex-type')} +
+
({ + name: entity.name, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ {t('addition.common.selected-property')} +
+
({ + name: entity.name, + data_type: entity.data_type, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ {t('addition.common.selected-property-index')} +
+
({ + name: entity.name, + owner: entity.owner, + status + }) + ) + : [] + } + pagination={false} + /> + +
+ + +
+ + )} + + {currentStatus === 3 && ( +
+
+ {t('addition.message.reuse-complete')} +
+
{t('addition.message.reuse-complete')}
+
{t('addition.message.vertex-type-reuse-success')}
+
+
+
+ + +
+
+ )} + + + ); +}); + +export default ReuseVertexTypes; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less new file mode 100644 index 000000000..20b083faa --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.less @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +.vertex-type-list-wrapper { + width: 100%; + background: #fff; + margin-top: 16px; + padding: 16px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx new file mode 100644 index 000000000..eaa7197c6 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/VertexTypeList.tsx @@ -0,0 +1,1888 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React, { + useContext, + useState, + useEffect, + useRef, + useCallback +} from 'react'; +import { observer } from 'mobx-react'; +import { + cloneDeep, + intersection, + size, + without, + isEmpty, + isUndefined, + values +} from 'lodash-es'; +import { useLocation } from 'wouter'; +import classnames from 'classnames'; +import { motion } from 'framer-motion'; +import { + Button, + Table, + Switch, + Modal, + Drawer, + Input, + Select, + Checkbox, + Message, + Loading +} from 'hubble-ui'; + +import { Tooltip, LoadingDataView } from '../../../common'; +import NewVertexType from './NewVertexType'; +import ReuseVertexTypes from './ReuseVertexTypes'; +import MetadataConfigsRootStore from '../../../../stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore'; +import DataAnalyzeStore from '../../../../stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import { formatVertexIdText } from '../../../../stores/utils'; + +import type { + VertexTypeValidatePropertyIndexes, + VertexType +} from '../../../../stores/types/GraphManagementStore/metadataConfigsStore'; + +import AddIcon from '../../../../assets/imgs/ic_add.svg'; +import BlueArrowIcon from '../../../../assets/imgs/ic_arrow_blue.svg'; +import WhiteCloseIcon from '../../../../assets/imgs/ic_close_white.svg'; +import CloseIcon from '../../../../assets/imgs/ic_close_16.svg'; +import i18next from '../../../../i18n'; +import { useTranslation } from 'react-i18next'; + +import './VertexTypeList.less'; + +const styles = { + button: { + marginLeft: 12, + width: 78 + }, + header: { + marginBottom: 16 + }, + manipulation: { + marginRight: 12 + }, + deleteWrapper: { + display: 'flex', + justifyContent: 'flex-end' + }, + loading: { + padding: 0, + marginRight: 4 + } +}; + +const variants = { + initial: { + opacity: 0 + }, + animate: { + opacity: 1, + transition: { + duration: 0.7 + } + }, + exit: { + opacity: 0, + transition: { + duration: 0.3 + } + } +}; + +const IDStrategyMappings: Record = { + PRIMARY_KEY: i18next.t('addition.constant.primary-key-id'), + AUTOMATIC: i18next.t('addition.constant.automatic-generation'), + CUSTOMIZE_STRING: i18next.t('addition.constant.custom-string'), + CUSTOMIZE_NUMBER: i18next.t('addition.constant.custom-number'), + CUSTOMIZE_UUID: i18next.t('addition.constant.custom-uuid') +}; + +const propertyIndexTypeMappings: Record = { + SECONDARY: i18next.t('addition.menu.secondary-index'), + RANGE: i18next.t('addition.menu.range-index'), + SEARCH: i18next.t('addition.menu.full-text-index') +}; + +const VertexTypeList: React.FC = observer(() => { + const metadataConfigsRootStore = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + const { metadataPropertyStore, vertexTypeStore } = metadataConfigsRootStore; + const [preLoading, switchPreLoading] = useState(true); + const [sortOrder, setSortOrder] = useState(''); + const [selectedRowKeys, mutateSelectedRowKeys] = useState([]); + const [isShowModal, switchShowModal] = useState(false); + const [isAddProperty, switchIsAddProperty] = useState(false); + const [isEditVertex, switchIsEditVertex] = useState(false); + const [ + deleteExistPopIndexInDrawer, + setDeleteExistPopIndexInDrawer + ] = useState(null); + const [ + deleteAddedPopIndexInDrawer, + setDeleteAddedPopIndexInDrawer + ] = useState(null); + const [, setLocation] = useLocation(); + + const dropdownWrapperRef = useRef(null); + const deleteWrapperInDrawerRef = useRef(null); + + const isLoading = + preLoading || + vertexTypeStore.requestStatus.fetchVertexTypeList === 'pending'; + + const currentSelectedRowKeys = intersection( + selectedRowKeys, + vertexTypeStore.vertexTypes.map(({ name }) => name) + ); + + // need useCallback to stop infinite callings of useEffect + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + // if clicked element is not on dropdown, collpase it + if ( + isEditVertex && + isAddProperty && + dropdownWrapperRef.current && + !dropdownWrapperRef.current.contains(e.target as Element) + ) { + switchIsAddProperty(false); + } + + if ( + (deleteExistPopIndexInDrawer || deleteAddedPopIndexInDrawer) && + deleteWrapperInDrawerRef.current && + !deleteWrapperInDrawerRef.current.contains(e.target as Element) + ) { + setDeleteExistPopIndexInDrawer(null); + setDeleteAddedPopIndexInDrawer(null); + } + }, + [deleteExistPopIndexInDrawer, deleteAddedPopIndexInDrawer, isAddProperty] + ); + + const handleSelectedTableRow = (newSelectedRowKeys: string[]) => { + mutateSelectedRowKeys(newSelectedRowKeys); + }; + + const handleCloseDrawer = () => { + switchIsAddProperty(false); + switchIsEditVertex(false); + vertexTypeStore.selectVertexType(null); + // clear mutations in + vertexTypeStore.resetEditedSelectedVertexType(); + }; + + const handleSortClick = () => { + switchPreLoading(true); + + if (sortOrder === 'descend') { + vertexTypeStore.mutatePageSort('asc'); + setSortOrder('ascend'); + } else { + vertexTypeStore.mutatePageSort('desc'); + setSortOrder('descend'); + } + + vertexTypeStore.fetchVertexTypeList(); + }; + + const batchDeleteProperties = async () => { + if ( + values(currentSelectedRowKeys).every( + (key) => vertexTypeStore.vertexTypeUsingStatus?.[key] + ) + ) { + Message.error({ + content: t('addition.message.no-can-delete-vertex-type'), + size: 'medium', + showCloseIcon: false + }); + + return; + } + + switchShowModal(false); + // need to set a copy in store since local row key state would be cleared + vertexTypeStore.mutateSelectedVertexTypeNames(currentSelectedRowKeys); + // mutateSelectedRowKeys([]); + await vertexTypeStore.deleteVertexType(currentSelectedRowKeys); + + if (vertexTypeStore.requestStatus.deleteVertexType === 'success') { + Message.success({ + content: t('addition.common.del-success'), + size: 'medium', + showCloseIcon: false + }); + + mutateSelectedRowKeys( + without(selectedRowKeys, ...currentSelectedRowKeys) + ); + + await vertexTypeStore.fetchVertexTypeList(); + + // fetch previous page data if it's empty + if ( + vertexTypeStore.requestStatus.fetchVertexTypeList === 'success' && + size(vertexTypeStore.vertexTypes) === 0 && + vertexTypeStore.vertexListPageConfig.pageNumber > 1 + ) { + vertexTypeStore.mutatePageNumber( + vertexTypeStore.vertexListPageConfig.pageNumber - 1 + ); + + vertexTypeStore.fetchVertexTypeList(); + } + + return; + } + + if (vertexTypeStore.requestStatus.deleteVertexType === 'failed') { + Message.error({ + content: vertexTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + } + }; + + const columnConfigs = [ + { + title: t('addition.vertex.vertex-type-name'), + dataIndex: 'name', + sorter: true, + sortOrder, + width: '20%', + render(text: string, records: any[], index: number) { + return ( +
{ + vertexTypeStore.selectVertexType(index); + + // check also need style infos + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + style: { + color: vertexTypeStore.selectedVertexType!.style.color, + icon: null, + size: vertexTypeStore.selectedVertexType!.style.size, + display_fields: vertexTypeStore.selectedVertexType!.style + .display_fields + } + }); + }} + > + {text} +
+ ); + } + }, + { + title: t('addition.common.association-property'), + dataIndex: 'properties', + width: '20%', + render(properties: { name: string; nullable: boolean }[]) { + const joinedProperties = + properties.length !== 0 + ? properties.map(({ name }) => name).join('; ') + : '-'; + + return ( +
+ {joinedProperties} +
+ ); + } + }, + { + title: t('addition.common.id-strategy'), + dataIndex: 'id_strategy', + width: '10%', + render(text: string) { + return ( +
+ {IDStrategyMappings[text]} +
+ ); + } + }, + { + title: t('addition.common.primary-key-property'), + dataIndex: 'primary_keys', + width: '10%', + render(properties: string[]) { + const joinedProperties = + properties.length !== 0 ? properties.join('; ') : '-'; + + return ( +
+ {joinedProperties} +
+ ); + } + }, + { + title: t('addition.menu.type-index'), + dataIndex: 'open_label_index', + width: '10%', + render(value: boolean) { + return ( + + ); + } + }, + { + title: t('addition.common.property-index'), + dataIndex: 'property_indexes', + width: '17%', + render(indexes: { name: string; type: string; fields: string[] }[]) { + const joindedIndexes = + indexes.length !== 0 + ? indexes.map(({ name }) => name).join('; ') + : '-'; + + return ( +
+ {joindedIndexes} +
+ ); + } + }, + { + title: t('addition.operate.operate'), + dataIndex: 'manipulation', + width: '13%', + render(_: any, records: VertexType, index: number) { + return ( + + ); + } + } + ]; + + const metadataDrawerOptionClass = classnames({ + 'metadata-drawer-options': true, + 'metadata-drawer-options-disabled': isEditVertex + }); + + useEffect(() => { + setTimeout(() => { + switchPreLoading(false); + }, 500); + }, [sortOrder]); + + useEffect(() => { + return () => { + const messageComponents = document.querySelectorAll( + '.new-fc-one-message' + ) as NodeListOf; + + messageComponents.forEach((messageComponent) => { + messageComponent.style.display = 'none'; + }); + }; + }); + + useEffect(() => { + if (metadataConfigsRootStore.currentId !== null) { + metadataPropertyStore.fetchMetadataPropertyList({ fetchAll: true }); + vertexTypeStore.fetchVertexTypeList(); + } + + return () => { + vertexTypeStore.dispose(); + }; + }, [ + metadataPropertyStore, + metadataConfigsRootStore.currentId, + vertexTypeStore + ]); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + if (vertexTypeStore.currentTabStatus === 'new') { + return ; + } + + if (vertexTypeStore.currentTabStatus === 'reuse') { + return ; + } + + return ( + +
+
+ + +
+ {size(currentSelectedRowKeys) !== 0 && ( +
+
+ {t('addition.message.selected')} + {size(currentSelectedRowKeys)} + {t('addition.common.term')} +
+ + {t('addition.common.close')} { + mutateSelectedRowKeys([]); + }} + /> +
+ )} +
rowData.name} + locale={{ + emptyText: ( + } + /> + ) + }} + rowSelection={{ + selectedRowKeys, + onChange: handleSelectedTableRow + }} + onSortClick={handleSortClick} + dataSource={isLoading ? [] : vertexTypeStore.vertexTypes} + pagination={ + isLoading + ? null + : { + hideOnSinglePage: false, + pageNo: vertexTypeStore.vertexListPageConfig.pageNumber, + pageSize: 10, + showSizeChange: false, + showPageJumper: false, + total: vertexTypeStore.vertexListPageConfig.pageTotal, + onPageNoChange: (e: React.ChangeEvent) => { + // mutateSelectedRowKeys([]); + vertexTypeStore.mutatePageNumber(Number(e.target.value)); + vertexTypeStore.fetchVertexTypeList(); + } + } + } + /> + + { + switchShowModal(false); + }} + > +
+
+ {t('addition.common.del-comfirm')} + {t('addition.common.close')} { + switchShowModal(false); + }} + /> +
+
+ {t('addition.vertex.using-cannot-delete-confirm')} +
+
+ {t('addition.message.long-time-notice')} +
+
) { + return ( + + {text} + + ); + } + }, + { + title: t('addition.common.status'), + dataIndex: 'status', + render(isUsing: boolean) { + return ( +
+ {isUsing + ? t('addition.common.in-use') + : t('addition.common.not-used')} +
+ ); + } + } + ]} + dataSource={currentSelectedRowKeys.map((name) => { + return { + name, + status: + vertexTypeStore.vertexTypeUsingStatus !== null && + // data may have some delay which leads to no matching propety value + !!vertexTypeStore.vertexTypeUsingStatus[name] + }; + })} + pagination={false} + /> + + + + { + if (!isEditVertex) { + switchIsEditVertex(true); + vertexTypeStore.validateEditVertexType(); + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + style: { + color: vertexTypeStore.selectedVertexType!.style.color, + icon: null, + size: vertexTypeStore.selectedVertexType!.style.size, + display_fields: vertexTypeStore.selectedVertexType!.style + .display_fields + } + }); + } else { + await vertexTypeStore.updateVertexType(); + + if ( + vertexTypeStore.requestStatus.updateVertexType === 'failed' + ) { + Message.error({ + content: vertexTypeStore.errorMessage, + size: 'medium', + showCloseIcon: false + }); + + return; + } + + if ( + vertexTypeStore.requestStatus.updateVertexType === 'success' + ) { + if ( + isEmpty( + vertexTypeStore.editedSelectedVertexType + .append_property_indexes + ) + ) { + Message.success({ + content: t('addition.operate.modify-success'), + size: 'medium', + showCloseIcon: false + }); + } else { + Message.success({ + content: ( +
+
+ {t('addition.common.save-scuccess')} +
+
+ {t('addition.message.index-long-time-notice')} +
+
{ + setLocation( + `/graph-management/${metadataConfigsRootStore.currentId}/async-tasks` + ); + }} + > + {t('addition.operate.view-task-management')} +
+
+ ), + duration: 60 * 60 * 24 + }); + } + } + + switchIsEditVertex(false); + vertexTypeStore.selectVertexType(null); + vertexTypeStore.fetchVertexTypeList(); + vertexTypeStore.resetEditedSelectedVertexType(); + } + }} + key="drawer-manipulation" + > + {isEditVertex + ? t('addition.common.save') + : t('addition.common.edit')} + , + + ]} + > + {!isEmpty(vertexTypeStore.selectedVertexType) && ( +
+
+ {t('addition.menu.base-info')} +
+
+
+ {t('addition.vertex.vertex-type-name')}: +
+
+ {vertexTypeStore.selectedVertexType!.name} +
+
+
+
+ + {t('addition.vertex.vertex-style')}: + +
+
+ +
+
+ +
+
+
+
+ {t('addition.common.id-strategy')}: +
+ { + IDStrategyMappings[ + vertexTypeStore.selectedVertexType!.id_strategy + ] + } +
+
+
+ {t('addition.common.association-property')}: +
+
+
+ {t('addition.common.property')} + {t('addition.common.allow-null')} +
+ {vertexTypeStore.selectedVertexType!.properties.map( + ({ name, nullable }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditVertex && + vertexTypeStore.editedSelectedVertexType.append_properties.map( + ({ name }) => ( +
+
{name}
+
+ +
+
+ ) + )} + {isEditVertex && ( +
{ + switchIsAddProperty(!isAddProperty); + }} + > + + {t('addition.common.add-property')} + + toogleAddProperties +
+ )} + {isEditVertex && isAddProperty && ( +
+ {metadataPropertyStore.metadataProperties + .filter( + (property) => + vertexTypeStore.selectedVertexType!.properties.find( + ({ name }) => name === property.name + ) === undefined + ) + .map((property) => ( +
+ + + propertyIndex === property.name + ) !== -1 + } + onChange={() => { + const addedPropertiesInSelectedVertextType = + vertexTypeStore.addedPropertiesInSelectedVertextType; + + addedPropertiesInSelectedVertextType.has( + property.name + ) + ? addedPropertiesInSelectedVertextType.delete( + property.name + ) + : addedPropertiesInSelectedVertextType.add( + property.name + ); + + vertexTypeStore.mutateEditedSelectedVertexType( + { + ...vertexTypeStore.editedSelectedVertexType, + append_properties: [ + ...addedPropertiesInSelectedVertextType + ].map((propertyName) => { + const currentProperty = vertexTypeStore.newVertexType.properties.find( + ({ name }) => name === propertyName + ); + + return { + name: propertyName, + nullable: !isUndefined( + currentProperty + ) + ? currentProperty.nullable + : true + }; + }) + } + ); + }} + > + {property.name} + + +
+ ))} +
+ )} +
+
+
+
+ {t('addition.common.primary-key-property')}: +
+ {vertexTypeStore.selectedVertexType!.primary_keys.join(';')} +
+
+
+ + {t('addition.vertex.vertex-display-content')}: + +
+ {isEditVertex ? ( + + ) : ( +
+ {vertexTypeStore.selectedVertexType?.style.display_fields + .map((field) => + formatVertexIdText( + field, + t('addition.function-parameter.vertex-id') + ) + ) + .join('-')} +
+ )} +
+ +
+ {t('addition.edge.index-info')} +
+
+
+ {t('addition.menu.type-index')}: +
+ +
+
+
+ {t('addition.common.property-index')}: +
+
+ {(vertexTypeStore.selectedVertexType!.property_indexes + .length !== 0 || + vertexTypeStore.editedSelectedVertexType + .append_property_indexes.length !== 0) && ( +
+ {t('addition.edge.index-name')} + {t('addition.edge.index-type')} + {t('addition.common.property')} +
+ )} + {vertexTypeStore + .selectedVertexType!.property_indexes.filter( + (propertyIndex) => + isUndefined( + vertexTypeStore.editedSelectedVertexType.remove_property_indexes.find( + (removedPropertyName) => + removedPropertyName === propertyIndex.name + ) + ) + ) + .map(({ name, type, fields }, index) => { + return ( +
+
{name}
+
{propertyIndexTypeMappings[type]}
+
+ + {fields + .map((field, index) => index + 1 + '.' + field) + .join(';')} + + + {isEditVertex && ( + +

+ {t( + 'addition.message.property-del-confirm' + )} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const removedPropertyIndexes = cloneDeep( + vertexTypeStore + .editedSelectedVertexType + .remove_property_indexes + ); + + removedPropertyIndexes.push( + vertexTypeStore.selectedVertexType! + .property_indexes[index].name + ); + + vertexTypeStore.mutateEditedSelectedVertexType( + { + ...vertexTypeStore.editedSelectedVertexType, + remove_property_indexes: removedPropertyIndexes + } + ); + + setDeleteExistPopIndexInDrawer(null); + vertexTypeStore.validateEditVertexType( + true + ); + }} + > + {t('addition.common.confirm')} +
+
{ + setDeleteExistPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteExistPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> + )} +
+
+ ); + })} + {vertexTypeStore.editedSelectedVertexType.append_property_indexes.map( + ({ name, type, fields }, index) => { + return ( +
+
+ { + const propertyIndexEntities = cloneDeep( + vertexTypeStore.editedSelectedVertexType + .append_property_indexes + ); + + propertyIndexEntities[index].name = e.value; + + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + append_property_indexes: propertyIndexEntities + }); + }} + originInputProps={{ + onBlur() { + // check is ready to create + vertexTypeStore.validateEditVertexType(); + } + }} + /> +
+
+ +
+
+ + + +

+ {t('addition.message.property-del-confirm')} +

+

+ {t('addition.message.index-del-confirm')} +

+
+
{ + const appendPropertyIndexes = cloneDeep( + vertexTypeStore.editedSelectedVertexType! + .append_property_indexes + ); + + appendPropertyIndexes.splice(index, 1); + + vertexTypeStore.mutateEditedSelectedVertexType( + { + ...vertexTypeStore.editedSelectedVertexType, + append_property_indexes: appendPropertyIndexes + } + ); + + setDeleteAddedPopIndexInDrawer(null); + vertexTypeStore.validateEditVertexType( + true + ); + }} + > + {t('addition.common.confirm')} +
+
{ + vertexTypeStore.resetEditedSelectedVertexType(); + setDeleteAddedPopIndexInDrawer(null); + }} + > + {t('addition.common.cancel')} +
+
+
+ } + childrenProps={{ + src: CloseIcon, + alt: 'close', + style: { cursor: 'pointer' }, + onClick() { + setDeleteAddedPopIndexInDrawer(index); + } + }} + childrenWrapperElement="img" + /> +
+
+ ); + } + )} + {isEditVertex && ( + { + if ( + vertexTypeStore.editedSelectedVertexType + .append_property_indexes.length === 0 || + vertexTypeStore.isEditReady + ) { + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + append_property_indexes: [ + ...vertexTypeStore.editedSelectedVertexType + .append_property_indexes, + { + name: '', + type: '', + fields: [] + } + ] + }); + + vertexTypeStore.validateEditVertexType(true); + } + }} + style={{ + cursor: 'pointer', + color: vertexTypeStore.isEditReady ? '#2b65ff' : '#999' + }} + > + {t('addition.edge.add-group')} + + )} +
+ + + )} +
+ + + ); +}); + +export interface VertexTypeListManipulation { + vertexName: string; + vertexIndex: number; + switchIsEditVertex: (flag: boolean) => void; +} + +const VertexTypeListManipulation: React.FC = observer( + ({ vertexName, vertexIndex, switchIsEditVertex }) => { + const { vertexTypeStore } = useContext(MetadataConfigsRootStore); + const [isPopDeleteModal, switchPopDeleteModal] = useState(false); + const [isDeleting, switchDeleting] = useState(false); + const { t } = useTranslation(); + const deleteWrapperRef = useRef(null); + const isDeleteOrBatchDeleting = + isDeleting || + (vertexTypeStore.requestStatus.deleteVertexType === 'pending' && + vertexTypeStore.selectedVertexTypeNames.includes(vertexName)); + + const handleOutSideClick = useCallback( + (e: MouseEvent) => { + if ( + isPopDeleteModal && + deleteWrapperRef && + deleteWrapperRef.current && + !deleteWrapperRef.current.contains(e.target as Element) + ) { + switchPopDeleteModal(false); + } + }, + [deleteWrapperRef, isPopDeleteModal] + ); + + useEffect(() => { + document.addEventListener('click', handleOutSideClick, false); + + return () => { + document.removeEventListener('click', handleOutSideClick, false); + }; + }, [handleOutSideClick]); + + return ( +
+ { + vertexTypeStore.selectVertexType(vertexIndex); + vertexTypeStore.validateEditVertexType(true); + switchIsEditVertex(true); + + vertexTypeStore.mutateEditedSelectedVertexType({ + ...vertexTypeStore.editedSelectedVertexType, + style: { + color: vertexTypeStore.selectedVertexType!.style.color, + icon: null, + size: vertexTypeStore.selectedVertexType!.style.size, + display_fields: vertexTypeStore.selectedVertexType!.style + .display_fields + } + }); + }} + > + {t('addition.common.edit')} + +
+ {isDeleteOrBatchDeleting && ( + + )} + + {vertexTypeStore.vertexTypeUsingStatus && + vertexTypeStore.vertexTypeUsingStatus[vertexName] ? ( +

+ {t('addition.vertex.using-cannot-delete')} +

+ ) : ( + <> +

+ {t('addition.vertex.del-vertex-confirm')} +

+

{t('addition.vertex.del-vertex-confirm-again')}

+

{t('addition.message.long-time-notice')}

+
+ + +
+ + )} +
+ } + childrenProps={{ + className: 'metadata-properties-manipulation', + title: isDeleteOrBatchDeleting + ? t('addition.operate.del-ing') + : t('addition.common.del'), + async onClick() { + if (isDeleteOrBatchDeleting) { + return; + } + + await vertexTypeStore.checkIfUsing([vertexName]); + + if (vertexTypeStore.requestStatus.checkIfUsing === 'success') { + switchPopDeleteModal(true); + } + } + }} + > + {isDeleteOrBatchDeleting + ? t('addition.operate.del-ing') + : t('addition.common.del')} + +
+ + ); + } +); + +const EmptyVertxTypeHints: React.FC = observer(() => { + const { vertexTypeStore } = useContext(MetadataConfigsRootStore); + const { t } = useTranslation(); + + return ( +
+ Add new property +
+ {t('addition.vertex.no-vertex-type-desc')} +
+
+ + +
+
+ ); +}); + +export default VertexTypeList; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/index.ts new file mode 100644 index 000000000..acd50f8f0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/graph-management/metadata-configs/vertex-type/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import VertexTypeList from './VertexTypeList'; +import NewVertexType from './NewVertexType'; + +export { NewVertexType, VertexTypeList }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/hubble-ui/index.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/hubble-ui/index.tsx new file mode 100644 index 000000000..f856514e6 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/hubble-ui/index.tsx @@ -0,0 +1,311 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +/* eslint-disable */ +import { + Transfer as TransferAntD, + Popover, + Pagination as PaginationAntD, + Steps as StepsAntD, + Progress as ProgressAntD, + Checkbox as CheckboxAntD, + Menu as MenuAntD, + Spin, + Breadcrumb as BreadcrumbAntD, + Calendar as CalendarAntD, + InputNumber, + Switch as SwitchAntd, + Table as TableAntD, + Radio as RadioAntD, + Tooltip as TooltipAntD, + Alert as AlertAntD, + Button as ButtonAntD, + Modal as ModalAntD, + Drawer as DrawerAntD, + Input as InputAntD, + message, + Select as SelectAntD, + Dropdown as DropdownAntd +} from 'antd'; +import * as React from 'react'; + +// In order to make the project run, let the components of antd replace baiduUI +// Special Note: All check boxes can be selected, but some check boxes cannot see +// the selection content, but it does not affect the submission. If you need to see +// the selection, you need to modify the value property of the corresponding Select +// component. There is no uniform modification here + +const changeSize = (props: any): any => { + let _size = props.size; + if (_size === 'medium') { + _size = 'middle'; + } + if (!_size) { + _size = 'small'; + } + return { + ...props, + size: _size + }; +}; + +export const Alert = (props: any) => { + return ; +}; + +export const Button = (props: any) => { + return {props.children}; +}; + +export const Modal = ModalAntD; + +export const Drawer = (props: any) => { + return {props.children}; +}; + +export const Input = (props: any) => { + let _blur = () => {}; + if (props.originInputProps && props.originInputProps.onBlur) { + _blur = props.originInputProps.onBlur; + } + // change e.value to eventTarget.currentTarget + const _props = { + ...props, + onChange: (e: any) => { + props.onChange({ + value: e.currentTarget.value + }); + } + }; + return ( +
+ + {props.errorMessage ? ( +
+ {props.errorMessage} +
+ ) : ( + '' + )} +
+ ); +}; +Input.Search = (props: any) => { + return ( + + ); +}; + +export const Message = { + info: (data: any) => { + message.info(data.content); + }, + success: (data: any) => { + message.success(data.content); + }, + error: (data: any) => { + message.error(data.content); + }, + warning: (data: any) => { + message.warning(data.content); + }, + loading: (data: any) => { + message.loading(data.content); + } +}; + +export const Select: any = (props: any) => { + return ( + + {props.children} + + ); +}; +Select.Option = SelectAntD.Option; +export const Tooltip: any = TooltipAntD; + +export const Dropdown: any = { + Button(props: any) { + let _overlay: any = []; + if (props.options) { + _overlay = ( + + {props.options.map((item: any) => ( + + {item.label} + + ))} + + ); + } + + return ( + {}) + }} + > + {props.title} + + ); + } +}; +export const Radio: any = RadioAntD; + +export const Table: any = (props: any) => { + let pagination = {}; + let pageChangerTag = false; + if (props.pagination) { + pagination = { + ...props.pagination, + onChange: (page: any, size: any) => { + if (pageChangerTag) { + return; + } + props.pagination.onPageNoChange({ + target: { + value: page + } + }); + }, + showQuickJumper: props.pagination.showPageJumper, + current: props.pagination.pageNo, + onShowSizeChange: (e: any, size: any) => { + pageChangerTag = true; + props.pagination.onPageSizeChange({ + target: { + value: size + } + }); + setTimeout(() => { + pageChangerTag = false; + }); + } + }; + } + let _handleChange: any = props.onChange || (() => {}); + // able to sort + if (!props.onChange && props.onSortClick) { + _handleChange = props.onSortClick; + } + return ( + + {props.children} + + ); +}; + +export const Switch: any = (props: any) => { + return ( + + ); +}; + +export const NumberBox: any = InputNumber; + +export const Calendar = (props: any) => { + props.onSelect = props.onSelectDay; + return ; +}; +export const Breadcrumb: any = BreadcrumbAntD; + +export const Loading: any = Spin; + +export const Menu: any = MenuAntD; + +export const Checkbox: any = CheckboxAntD; + +export const Progress: any = ProgressAntD; + +export const Steps: any = StepsAntD; + +export const Embedded: any = (props: any) => { + return ( + + {props.children} + + ); +}; +export const Pagination = (props: any) => { + return ( + + ); +}; + +export const PopLayer: any = (props: any) => { + return ( + {props.children} + ); +}; + +export const Transfer: any = (props: any) => { + const _treeName = props.treeName; + const dataSource = props.dataSource || []; + const allDataMap = props.allDataMap; + if (allDataMap) { + for (const key in allDataMap) { + dataSource.push(allDataMap[key]); + } + } + return ( + { + props.handleSelect(targetKeys); + }, + titles: [`可选${_treeName}`, `已选${_treeName}`], + render: (item) => `${item.title}` + }} + > + {props.children} + + ); +}; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/components/hubble-ui/src/index.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/hubble-ui/src/index.less new file mode 100644 index 000000000..a7e8f030e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/components/hubble-ui/src/index.less @@ -0,0 +1,104 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +@import '~antd/dist/antd.css'; +.new-fc-one-input-count-visible { + display: inline-block; +} + +.new-fc-one-input-count-error { + color: #e64552; +} + +.new-fc-one-input-all-container, +.new-fc-one-input-all-container .new-fc-one-input-detail { + display: inline-block; + position: relative; +} + +.new-fc-one-input-all-container-error .new-fc-one-input { + border: 1px solid #e64552; + background-color: #fff; + color: #333; +} + +.new-fc-one-input-all-container-error .new-fc-one-input:active, +.new-fc-one-input-all-container-error .new-fc-one-input:focus, +.new-fc-one-input-all-container-error .new-fc-one-input:hover { + outline: 0; + border-color: #e64552; +} + +.new-fc-one-input-all-container-error .new-fc-one-input:focus { + box-shadow: 0 0 0 2px rgba(230, 69, 82, 0.2); +} + +.new-fc-one-input-error { + color: #e64552; +} + +.new-fc-one-input-error-bottom { + margin-top: 8px; +} + +.new-fc-one-input-error-right { + display: inline-block; + margin-left: 8px; +} + +.new-fc-one-input-error-layer { + line-height: 100%; + z-index: 2; + box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.15); + background: #fff; + position: absolute; + left: 0; + display: inline-block; + padding: 16px; + color: #e64552; +} + +.new-fc-one-input-error-layer:before { + content: ''; + width: 0; + height: 0; + left: 16px; + border: 8px solid transparent; + border-bottom-color: #fff; + top: -12px; + position: absolute; +} + +.new-fc-one-input-group-addon > div { + border: 1px solid #e0e0e0 !important; +} + +.new-fc-one-input-group-addon-before > div { + border-right: 0 !important; +} + +.new-fc-one-input-group-addon-after > div { + border-left: 0 !important; +} + +.new-fc-one-input-group { + display: flex; +} + +.new-fc-one-input-group .new-fc-one-input { + border-radius: 0; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/index.ts new file mode 100644 index 000000000..e0bc572e4 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/index.ts @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import useMultiKeyPress from './useMultiKeyPress'; +import useInitDataImport from './useInitDataImport'; +import useLocationWithConfirmation from './useLocationWithConfirmation'; + +export { useMultiKeyPress, useInitDataImport, useLocationWithConfirmation }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useInitDataImport.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useInitDataImport.tsx new file mode 100644 index 000000000..6140b40e1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useInitDataImport.tsx @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { useState, useEffect, useContext } from 'react'; +import { useRoute, useLocation } from 'wouter'; +import { isNull, isEmpty, isUndefined } from 'lodash-es'; + +import { + GraphManagementStoreContext, + ImportManagerStoreContext, + DataImportRootStoreContext +} from '../stores'; + +export default function useInitDataImport() { + const graphManagementStore = useContext(GraphManagementStoreContext); + const importManagerStore = useContext(ImportManagerStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const { dataMapStore, serverDataImportStore } = dataImportRootStore; + const [initReady, setInitReady] = useState( + !isEmpty(importManagerStore.importJobList) + ); + const [, setLocation] = useLocation(); + + const [, params] = useRoute( + '/graph-management/:id/data-import/import-manager/:jobId/import-tasks/:status' + ); + + useEffect(() => { + const init = async (params: Record) => { + const { id, jobId, status } = params!; + // sidebar data + graphManagementStore.fetchIdList(); + + // init importManagerStore + importManagerStore.setCurrentId(Number(id)); + // import job list + await importManagerStore.fetchImportJobList(); + importManagerStore.setSelectedJob(Number(jobId)); + + // init dataImportRootStore + dataImportRootStore.setCurrentId(Number(id)); + dataImportRootStore.setCurrentJobId(Number(jobId)); + + await dataMapStore.fetchDataMaps(); + + const job = importManagerStore.importJobList.find( + ({ id: _jobId }) => _jobId === Number(jobId) + ); + + if (isUndefined(job)) { + return; + } + + const defautlSelectedFileId = dataMapStore.fileMapInfos.filter( + ({ file_status }) => file_status === 'COMPLETED' + )[0]?.id; + + dataImportRootStore.setCurrentStatus(job.job_status); + + if (status === 'upload') { + if (job.job_status === 'DEFAULT' || job.job_status === 'UPLOADING') { + } + + if (job.job_status === 'MAPPING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + + // setLocation( + // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/mapping` + // ); + } + + if (job.job_status === 'SETTING' || job.job_status === 'LOADING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + serverDataImportStore.switchIrregularProcess(true); + + // setLocation( + // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` + // ); + } + + if (job.job_status === 'LOADING') { + dataMapStore.switchLock(true); + serverDataImportStore.switchImportConfigReadOnly(true); + + setLocation( + `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` + ); + } + + if (job.job_status === 'SUCCESS' || job.job_status === 'FAILED') { + setLocation(`/graph-management/${id}/data-import/import-manager`); + importManagerStore.setSelectedJob(null); + } + } + + if (status === 'mapping') { + if (job.job_status === 'DEFAULT' || job.job_status === 'UPLOADING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + + // setLocation( + // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/mapping` + // ); + } + + if (job.job_status === 'MAPPING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + } + + if (job.job_status === 'SETTING' || job.job_status === 'LOADING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + serverDataImportStore.switchIrregularProcess(true); + + // setLocation( + // `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` + // ); + } + + if (job.job_status === 'LOADING') { + dataMapStore.switchLock(true); + serverDataImportStore.switchImportConfigReadOnly(true); + setLocation( + `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/loading` + ); + } + + if (job.job_status === 'SUCCESS' || job.job_status === 'FAILED') { + setLocation(`/graph-management/${id}/data-import/import-manager`); + importManagerStore.setSelectedJob(null); + } + } + + if (status === 'loading') { + if (job.job_status === 'DEFAULT' || job.job_status === 'UPLOADING') { + setLocation( + `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/upload` + ); + } + + if (job.job_status === 'MAPPING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + + setLocation( + `/graph-management/${id}/data-import/import-manager/${jobId}/import-tasks/mapping` + ); + } + + if (job.job_status === 'SETTING' || job.job_status === 'LOADING') { + dataMapStore.setSelectedFileId(defautlSelectedFileId); + dataMapStore.setSelectedFileInfo(); + dataMapStore.switchIrregularProcess(true); + + serverDataImportStore.syncImportConfigs( + dataMapStore.selectedFileInfo!.load_parameter + ); + serverDataImportStore.switchIrregularProcess(true); + } + + if (job.job_status === 'SETTING') { + dataMapStore.switchReadOnly(false); + } + + if (job.job_status === 'LOADING') { + dataMapStore.switchLock(true); + serverDataImportStore.switchImportConfigReadOnly(true); + } + + if (job.job_status === 'SUCCESS' || job.job_status === 'FAILED') { + setLocation(`/graph-management/${id}/data-import/import-manager`); + importManagerStore.setSelectedJob(null); + } + } + + setInitReady(true); + }; + + // if importJobList is empty, users may refresh their page + // if fileMapInfos is empty, users may click back/forward button on browser + if ( + !isNull(params) && + (isEmpty(importManagerStore.importJobList) || + isNull(importManagerStore.selectedJob)) + ) { + init(params); + } + }, [ + params?.status, + importManagerStore.importJobList, + importManagerStore.selectedJob?.id + ]); + + return initReady; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useLocationWithConfirmation.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useLocationWithConfirmation.tsx new file mode 100644 index 000000000..27eff539d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useLocationWithConfirmation.tsx @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { useContext } from 'react'; +import useLocation from 'wouter/use-location'; +import { last } from 'lodash-es'; + +import i18next from '../i18n'; +import { + ImportManagerStoreContext, + DataImportRootStoreContext +} from '../stores'; + +export default function useLocationWithConfirmation() { + const importManagerStore = useContext(ImportManagerStoreContext); + const dataImportRootStore = useContext(DataImportRootStoreContext); + const [location, setLocation] = useLocation(); + const status = last(location.split('/')); + + return [ + location, + (newLocation: string) => { + let perfomNavigation = true; + const category = last(newLocation.split('/')); + + if ( + status === 'upload' && + category === 'import-manager' && + dataImportRootStore.fileUploadTasks.some( + ({ status }) => status === 'uploading' + ) + ) { + perfomNavigation = window.confirm( + i18next.t('server-data-import.hint.confirm-navigation') + ); + } + + if (perfomNavigation) { + if ( + ['upload', 'mapping', 'loading'].includes(String(status)) && + category === 'import-manager' + ) { + importManagerStore.setSelectedJob(null); + importManagerStore.fetchImportJobList(); + } + + setLocation(newLocation); + } + } + ]; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useMultiKeyPress.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useMultiKeyPress.tsx new file mode 100644 index 000000000..c206df56a --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/hooks/useMultiKeyPress.tsx @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { useState, useEffect } from 'react'; + +export default function useMultiKeyPress() { + const [keysPressed, setKeyPressed] = useState>(new Set()); + + const keydownHandler = (e: KeyboardEvent) => { + // use e.key here may cause some unexpected behavior with shift key + setKeyPressed((prev) => new Set(prev.add(e.code))); + }; + + const keyupHandler = (e: KeyboardEvent) => { + // use e.key here may cause some unexpected behavior with shift key + if (navigator.platform.includes('Mac') && e.code.includes('Meta')) { + // weired, like above we need to mutate keysPressed first + keysPressed.clear(); + setKeyPressed(new Set()); + return; + } + + keysPressed.delete(e.code); + setKeyPressed(new Set(keysPressed)); + }; + + useEffect(() => { + window.addEventListener('keydown', keydownHandler); + window.addEventListener('keyup', keyupHandler); + + return () => { + window.removeEventListener('keydown', keydownHandler); + window.removeEventListener('keyup', keyupHandler); + }; + }, []); + + return keysPressed; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/index.ts new file mode 100644 index 000000000..4ecdfc2d1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/index.ts @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; + +import { zhCNResources, enUSResources } from './resources'; + +i18n.use(initReactI18next).init({ + lng: localStorage.getItem('languageType') || 'zh-CN', + fallbackLng: 'zh-CN', + + resources: { + 'zh-CN': zhCNResources, + 'en-US': enUSResources + }, + + interpolation: { + escapeValue: false // not needed for react as it escapes by default + } +}); + +export default i18n; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/AsyncTasks.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/AsyncTasks.json new file mode 100644 index 000000000..ce2848f4c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/AsyncTasks.json @@ -0,0 +1,64 @@ +{ + "async-tasks": { + "title": "任务管理", + "placeholders": { + "search": "请输入任务ID或名称搜索" + }, + "table-column-title": { + "task-id": "任务ID", + "task-name": "任务名称", + "task-type": "任务类型", + "create-time": "创建时间", + "time-consuming": "耗时", + "status": "状态", + "manipulation": "操作" + }, + "table-filters": { + "task-type": { + "all": "全部", + "gremlin": "Gremlin任务", + "algorithm": "算法任务", + "remove-schema": "删除元数据", + "create-index": "创建索引", + "rebuild-index": "重建索引" + }, + "status": { + "all": "全部", + "scheduling": "调度中", + "scheduled": "排队中", + "queued": "排队中", + "running": "运行中", + "restoring": "恢复中", + "success": "成功", + "failed": "失败", + "cancelling": "已取消", + "cancelled": "已取消" + } + }, + "table-selection": { + "selected": "已选{{number}}项", + "delete-batch": "批量删除" + }, + "manipulations": { + "abort": "终止", + "aborting": "终止中", + "delete": "删除", + "check-result": "查看结果", + "check-reason": "查看原因" + }, + "hint": { + "delete-confirm": "删除确认", + "delete-description": "是否确认删除该任务?删除后无法恢复,请谨慎操作", + "delete-succeed": "删除成功", + "delete-batch-confirm": "批量删除", + "delete-batch-description": "确认删除以下任务?删除后无法恢复,请谨慎操作", + "delete": "删除", + "cancel": "取消", + "no-data": "暂无数据", + "empty": "您暂时还没有任何任务", + "select-disabled": "任务{{id}}无法被选中删除", + "check-details": "查看详情", + "creation-failed": "创建失败" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json new file mode 100644 index 000000000..d6b2f5455 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/GraphManagementSidebar.json @@ -0,0 +1,5 @@ +{ + "data-import": "数据导入", + "import-task": "导入任务", + "map-templates": "映射模板" +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/addition.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/addition.json new file mode 100644 index 000000000..d137ee317 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/addition.json @@ -0,0 +1,348 @@ +{ + "addition": { + "function-parameter": { + "edge-type": "边类型", + "vertex-id": "顶点ID" + }, + "store": { + "required": "必填项", + "item-is-required": "此项为必填项", + "no-match-input-requirements": "不符合输入要求", + "rule1": "请输入字母、数字或特殊字符", + "rule2": "请输入范围在 1-65535 的数字", + "rule3": "必须同时填写用户名和密码", + "rule4": "必须为中英文,数字和下划线", + "illegal-data-format": "非法的数据格式", + "incorrect-time-format": "时间格式不正确", + "cannot-be-empty": "此项不能为空", + "cannot-be-empty1": "该项不能为空", + "same-edge-name-notice": "存在同名边,请输入其它名称", + "same-vertex-name-notice": "存在同名顶点,请输入其它名称", + "same-property-name-notice": "存在同名属性,请输入其它名称", + "same-index-name-notice": "存在同名属性索引,请输入其它名称", + "network-error": "网络异常,请稍后重试" + }, + "constant": { + "primary-key-id": "主键ID", + "automatic-generation": "自动生成", + "custom-string": "自定义字符串", + "custom-number": "自定义数字", + "custom-uuid": "自定义UUID", + "greater-than": "大于", + "greater-than-or-equal": "大于等于", + "less-than": "小于", + "less-than-or-equal": "小于等于", + "equal": "等于" + }, + "menu": { + "chart": "图", + "table": "表格", + "task-id": "任务ID", + "list-mode": "列表模式", + "chart-mode": "图模式", + "secondary-index": "二级索引", + "range-index": "范围索引", + "full-text-index": "全文索引", + "type-index": "类型索引", + "base-info": "基础信息", + "select-reuse-item": "选择复用项", + "confirm-reuse-item": "确认复用项", + "complete-reuse": "完成复用" + }, + "vertex": { + "type-detail": "顶点类型详情", + "edit-type": "编辑顶点类型", + "using-cannot-delete": "当前顶点类型正在使用中,不可删除。", + "using-cannot-delete-confirm": "使用中顶点类型不可删除,确认删除以下未使用顶点类型?", + "del-vertex-confirm": "确认删除此顶点类型?", + "del-vertex-confirm-again": "确认删除此顶点类型?删除后无法恢复,请谨慎操作", + "vertex-type-name": "顶点类型名称", + "vertex-style": "顶点样式", + "vertex-display-content": "顶点展示内容", + "select-vertex-display-content-placeholder": "请选择顶点展示内容", + "create-vertex-type": "创建顶点类型", + "vertex-index": "顶点索引", + "corresponding-vertex-type": "对应顶点类型", + "no-vertex-type-desc": "您暂时还没有任何顶点类型,立即创建" + }, + "edge": { + "display-content": "边展示内容", + "display-content-select-desc": "请选择边展示内容", + "index-info": "索引信息", + "index-name": "索引名称", + "index-type": "索引类型", + "edge-index": "边索引", + "index-type-select-desc": "请选择索引类型", + "property-select-desc": "请选择属性", + "add-group": "新增一组", + "confirm-del-edge-type": "确认删除此边类型?", + "confirm-del-edge-type-again": "确认删除边类型?删除后无法恢复,请谨慎操作", + "confirm-del-edge-careful-notice": "删除后无法恢复,请谨慎操作", + "no-edge-desc": "您暂时还没有任何边类型,立即创建", + "create-edge": "创建边类型", + "multiplexing-existing-type": "复用已有类型", + "multiplexing-edge-type": "复用边类型", + "multiplexing-edge-type-notice": "边类型关联的属性和属性索引、起点类型和终点类型及其关联的属性和属性索引将一同复用", + "verification-result": "校验结果", + "be-verified": "待校验", + "verified-again": "重新校验" + }, + "message": { + "no-can-delete-vertex-type": "无可删除顶点类型", + "no-index-notice": "您暂时还没有任何索引", + "property-create-desc": "您暂时还没有任何属性,立即创建", + "del-unused-property-notice": "使用中属性不可删除,确认删除以下未使用属性?", + "please-enter-keywords": "请输入搜索关键字", + "no-property-can-delete": "无可删除属性", + "no-metadata-notice": "您暂时还没有任何元数据", + "no-vertex-or-edge-notice": "您还未设置顶点类型或边类型", + "no-adjacency-points": "不存在邻接点", + "no-more-points": "不存在更多邻接点", + "please-enter-number": "请输入数字", + "please-enter-string": "请输入字符串", + "please-enter": "请输入", + "no-chart-desc": "无图结果,请查看表格或Json数据", + "no-data-desc": "暂无数据结果", + "data-loading": "数据加载中", + "submit-async-task": "提交异步任务中", + "submit-success": "提交成功", + "submit-fail": "提交失败", + "task-submit-fail": "任务提交失败", + "fail-reason": "失败原因", + "fail-position": "失败位置", + "selected": "已选", + "edge-del-confirm": "确认删除以下边?", + "long-time-notice": "删除元数据耗时较久,详情可在任务管理中查看。", + "index-long-time-notice": "创建索引可能耗时较久,详情可在任务管理中查看", + "property-del-confirm": "确认删除此属性?", + "property-del-confirm-again": "确认删除此属性?删除后无法恢复,请谨慎操作", + "index-del-confirm": "删除索引后,无法根据此属性索引进行查询,请谨慎操作。", + "edge-name-rule": "允许出现中英文、数字、下划线", + "source-type-select-placeholder": "请选择起点类型", + "target-type-select-placeholder": "请选择终点类型", + "select-distinguishing-key-property-placeholder": "请选择区分键属性", + "select-association-key-property-placeholder": "请先选择关联属性", + "index-open-notice": "开启索引会影响使用性能,请按需开启", + "duplicate-name": "有重名", + "dependency-conflict": "依赖冲突", + "already-exist": "已存在", + "pass": "通过", + "select-reuse-graph-placeholder": "请选择要复用的图", + "reuse-complete": "复用完成", + "vertex-type-reuse-success": "已成功复用顶点类型", + "property-using-cannot-delete": "当前属性数据正在使用中,不可删除。", + "reuse-property-success": "已成功复用属性", + "reuse-vertex-type-notice": "顶点类型关联的属性和属性索引将一同复用", + "illegal-vertex": "该顶点是非法顶点,可能是由悬空边导致" + }, + "operate": { + "reuse-vertex-type": "复用顶点类型", + "reuse-existing-property": "复用已有属性", + "reuse-property": "复用属性", + "create-property": "创建属性", + "continue-reuse": "继续复用", + "back-to-view": "返回查看", + "complete": "完成", + "next-step": "下一步", + "previous-step": "上一步", + "rename": "重命名", + "del-ing": "删除中", + "view-task-management": "去任务管理查看", + "batch-del": "批量删除", + "multiplexing": "复用", + "de-multiplexing": "取消复用", + "open": "开", + "close": "关", + "look": "查看", + "view-property": "查看属性", + "filter": "筛选", + "add-filter-item": "添加属性筛选", + "enlarge": "放大", + "narrow": "缩小", + "center": "居中", + "download": "下载", + "exit-full-screen": "退出全屏", + "full-screen": "全屏", + "load-background": "加载背景", + "load-spinner": "加载 spinner", + "rendering": "正在渲染", + "detail": "详情", + "favorite": "收藏", + "favorite-success": "收藏成功", + "load-statement": "加载语句", + "time": "时间", + "name": "名称", + "favorite-statement": "收藏语句", + "favorite-desc": "请输入收藏名称", + "operate": "操作", + "query": "查询", + "hidden": "隐藏", + "modify-name": "修改名称", + "execution-record": "执行记录", + "favorite-queries": "收藏的查询", + "favorite-search-desc": "搜索收藏名称或语句", + "expand-collapse": "展开/收起", + "expand": "展开", + "collapse": "收起", + "favorite-del-desc": "是否确认删除该条收藏语句?", + "input-query-statement": "请输入查询语句", + "query-statement-required": "查询语句不能为空", + "execute-query": "执行查询", + "execute-task": "执行任务", + "execute-ing": "执行中", + "clean": "清空", + "modify-success": "修改成功", + "query-result-desc": "查询模式适合30秒内可返回结果的小规模分析;任务模式适合较长时间返回结果的大规模分析,任务详情可在任务管理中查看" + }, + "common": { + "in-use": "使用中", + "not-used": "未使用", + "status": "状态", + "no-result": "无结果", + "cardinal-number": "基数", + "allow-null": "允许为空", + "allow-multiple-connections": "允许多次连接", + "multiple-connections-notice": "开启后两顶点间允许存在多条该类型的边", + "term": "项", + "in-edge": "入边", + "add-in-edge": "添加入边", + "out-edge": "出边", + "add-out-edge": "添加出边", + "add": "添加", + "value": "值", + "null-value": "空值", + "id-strategy": "ID策略", + "id-value": "ID值", + "id-input-desc": "请输入ID值", + "please-input": "请输入", + "add-success": "添加成功", + "add-fail": "添加失败", + "vertex-type": "顶点类型", + "selected-vertex-type": "已选顶点类型", + "vertex-id": "顶点ID", + "vertex-name": "顶点名称", + "illegal-vertex-desc": "该顶点是非法顶点,可能是由悬空边导致", + "add-vertex": "添加顶点", + "vertex-type-select-desc": "请选择顶点类型", + "edge-type": "边类型", + "selected-edge-type": "已选边类型", + "edge-style": "边样式", + "modify-edge-type": "编辑边类型", + "edge-type-detail": "边类型详情", + "edge-type-name": "边类型名称", + "edge-direction": "边方向", + "edge-type-select-desc": "请选择边类型", + "edge-id": "边ID", + "edge-name": "边名称", + "source": "起点", + "source-type": "起点类型", + "target": "终点", + "target-type": "终点类型", + "rule": "规则", + "property": "属性", + "selected-property": "已选属性", + "property-name": "属性名称", + "add-property": "添加属性", + "association-property": "关联属性", + "association-property-and-type": "关联属性及类型", + "property-index": "属性索引", + "selected-property-index": "已选属性索引", + "property-index-name": "属性索引名称", + "property-value": "属性值", + "required-property": "不可空属性", + "nullable-property": "可空属性", + "primary-key": "主键", + "primary-key-property": "主键属性", + "select-primary-key-property-placeholder": "请选择主键属性", + "distinguishing-key": "区分键", + "distinguishing-key-property": "区分键属性", + "property-input-desc": "请输入属性值", + "del-comfirm": "确认删除", + "ask": "吗?", + "confirm": "确认", + "del-success": "删除成功", + "save-scuccess": "保存成功", + "save-fail": "保存失败", + "save": "保存", + "cancel": "取消", + "more": "更多", + "edit": "编辑", + "del": "删除", + "fold": "折叠", + "open": "展开", + "close": "关闭", + "required": "必填项", + "format-error-desc": "必须以字母开头,允许出现英文、数字、下划线", + "no-matching-results": "无匹配结果", + "no-data": "暂无数据", + "data-type": "数据类型", + "corresponding-type": "对应类型" + }, + "appbar": { + "graph-manager": "图管理" + }, + "graphManagementHeader": { + "graph-manager": "图管理", + "community": "社区版", + "business": "商业版", + "limit-desc": "支持图上限", + "limit-desc1": "图磁盘上限", + "individual": "个", + "input-placeholder": "搜索图名称或ID", + "graph-create": "创建图" + }, + "graphManagementList": { + "save-scuccess": "保存成功", + "graph-del": "删除图", + "graph-del-comfirm-msg": "删除后该图所有配置均不可恢复", + "graph-edit": "编辑图", + "id": "图ID", + "id-desc": "为创建的图设置唯一标识的ID", + "name": "图名称", + "name-desc": "填写需要连接的图的名称", + "host": "主机名", + "port": "端口号", + "port-desc": "请输入端口号", + "username": "用户名", + "password": "密码", + "creation-time": "创建时间", + "visit": "访问" + }, + "graphManagementEmptyList": { + "graph-create": "创建图", + "graph-create-desc": "您暂时还没有任何图,立即创建", + "no-matching-results": "无匹配结果" + }, + "newGraphConfig": { + "graph-create": "创建图", + "create": "创建", + "create-scuccess": "创建成功", + "id": "图ID", + "id-desc": "为创建的图设置唯一标识的ID", + "name": "图名称", + "name-desc": "填写需要连接的图的名称", + "host": "主机名", + "host-desc": "请输入主机名", + "port": "端口号", + "port-desc": "请输入端口号", + "username": "用户名", + "password": "密码", + "not-required-desc": "未设置则无需填写" + }, + "graphManagementSidebar": { + "data-analysis": "数据分析", + "graph-select": "选择图", + "metadata-config": "元数据配置", + "data-import": "数据导入", + "task-management": "任务管理" + }, + "dataAnalyze": { + "cannot-access": "无法访问", + "return-home": "返回首页" + }, + "dataAnalyzeInfoDrawer": { + "edit-details": "编辑详情", + "data-details": "数据详情" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/common.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/common.json new file mode 100644 index 000000000..98d821703 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/common.json @@ -0,0 +1,5 @@ +{ + "common": { + "loading-data": "数据加载中" + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json new file mode 100644 index 000000000..da8577c09 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/data-import/import-tasks/ImportTasks.json @@ -0,0 +1,342 @@ +{ + "breadcrumb": { + "first": "导入任务", + "second": "任务详情" + }, + "import-manager": { + "hint": { + "empty-task": "您暂时还没有任何任务,立即创建", + "no-result": "无结果", + "creation-succeed": "创建成功", + "update-succeed": "编辑成功" + }, + "manipulation": { + "create": "创建" + }, + "placeholder": { + "input-job-name": "请输入任务名称搜索", + "input-valid-job-name": "允许出现中英文、数字、下划线", + "input-job-description": "请输入任务备注" + }, + "list-column-title": { + "job-name": "任务名称", + "size": "大小", + "create-time": "创建时间", + "status": "状态", + "time-consuming": "任务耗时", + "manipulation": "操作" + }, + "list-column-status": { + "DEFAULT": "未开始", + "UPLOADING": "未开始", + "MAPPING": "设置中", + "SETTING": "导入中", + "LOADING": "导入中", + "FAILED": "失败", + "SUCCESS": "成功" + }, + "list-column-manipulations": { + "start": "开始任务", + "resume-setting": "继续设置", + "resume-importing": "继续导入", + "check-error-log": "查看原因", + "delete": "删除" + }, + "modal": { + "create-job": { + "title": "创建导入任务", + "job-name": "任务名称:", + "job-description": "任务备注:" + }, + "delete-job": { + "title": "删除任务", + "hint": "确认删除任务{{name}}吗?", + "sub-hint": "删除后该任务不可恢复" + }, + "manipulations": { + "create": "创建", + "delete": "删除", + "cancel": "取消" + } + }, + "validator": { + "no-empty": "此项为必填项", + "over-limit-size": "已超出字数限制", + "invalid-format": "请输入中英文、数字、下划线" + } + }, + "import-job-details": { + "tabs": { + "basic-settings": "基础设置", + "uploaded-files": "上传文件", + "data-maps": "映射文件", + "import-details": "导入详情" + }, + "basic": { + "job-name": "任务名称:", + "job-description": "任务备注:", + "modal": { + "edit-job": { + "title": "编辑导入任务", + "job-name": "任务名称:", + "job-description": "任务备注:" + }, + "manipulations": { + "save": "保存", + "cancel": "取消" + } + } + }, + "manipulations": { + "edit": "编辑", + "resume-task": "继续任务" + } + }, + "step": { + "first": "上传文件", + "second": "设置数据映射", + "third": "导入数据", + "fourth": "完成" + }, + "upload-files": { + "click": "点击", + "description": "点击或将文件拖拽到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", + "drag": "拖拽", + "description-1": "或将文件", + "description-2": "到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", + "cancel": "取消上传", + "next": "下一步", + "wrong-format": "仅支持 csv 格式文件", + "over-single-size-limit": "容量已超过 1 GB", + "over-all-size-limit": "总容量已超过 10 GB", + "empty-file": "文件为空,请重新上传", + "no-duplicate": "下列上传的文件已存在:" + }, + "data-configs": { + "file": { + "title": "文件设置", + "include-header": "包含表头", + "delimiter": { + "title": "分隔符", + "comma": "逗号", + "semicolon": "分号", + "tab": "制表符", + "space": "空格", + "custom": "自定义" + }, + "code-type": { + "title": "编码格式", + "UTF-8": "UTF-8", + "GBK": "GBK", + "ISO-8859-1": "ISO-8859-1", + "US-ASCII": "US-ASCII", + "custom": "自定义" + }, + "date-type": { + "title": "日期格式", + "custom": "自定义" + }, + "skipped-line": "跳过行", + "timezone": "时区", + "save": "保存", + "placeholder": { + "input-delimiter": "请输入分隔符", + "input-charset": "请输入编码格式", + "input-date-format": "请输入日期格式" + }, + "hint": { + "save-succeed": "已保存文件设置" + } + }, + "type": { + "title": "类型设置", + "basic-settings": "基础设置", + "manipulation": { + "create": "创建", + "save": "保存", + "cancel": "取消", + "create-vertex": "创建顶点映射", + "create-edge": "创建边映射" + }, + "info": { + "type": "类型", + "name": "名称", + "ID-strategy": "ID策略", + "edit": "编辑", + "delete": "删除" + }, + "ID-strategy": { + "PRIMARY_KEY": "主键ID", + "AUTOMATIC": "自动生成", + "CUSTOMIZE_STRING": "自定义字符串", + "CUSTOMIZE_NUMBER": "自定义数字", + "CUSTOMIZE_UUID": "自定义UUID" + }, + "vertex": { + "title": "创建顶点映射", + "type": "顶点类型", + "ID-strategy": "ID策略", + "ID-column": "ID列", + "map-settings": "映射设置", + "add-map": { + "title": "添加映射", + "name": "列名", + "sample": "数据样例", + "property": "映射属性", + "clear": "清空" + }, + "select-all": "全选", + "advance": { + "title": "高级设置", + "nullable-list": { + "title": "空值列表", + "empty": "空值", + "custom": "自定义" + }, + "map-property-value": { + "title": "属性值映射", + "add-value": "添加属性值映射", + "fields": { + "property": "属性", + "value-map": "值映射", + "add-value-map": "添加值映射" + } + }, + "placeholder": { + "input": "请选择", + "input-property": "请选择输入属性", + "input-file-value": "请输入文件值", + "input-graph-value": "请输入图导入值" + } + } + }, + "edge": { + "title": "创建边映射", + "type": "边类型", + "source-ID-strategy": "起点ID策略", + "target-ID-strategy": "终点ID策略", + "ID-column": "ID列", + "map-settings": "映射设置", + "add-map": { + "title": "添加映射", + "name": "列名", + "sample": "数据样例", + "property": "映射属性", + "clear": "清空" + }, + "select-all": "全选", + "advance": { + "title": "高级设置", + "nullable-list": { + "title": "空值列表", + "empty": "空值", + "custom": "自定义" + }, + "map-property-value": { + "title": "属性值映射", + "add-value": "添加 属性值映射", + "fields": { + "property": "属性", + "value-map": "值映射", + "add-value-map": "添加值映射" + } + }, + "placeholder": { + "input": "请选择映射属性", + "input-property": "请选择输入属性", + "input-file-value": "请输入文件值", + "input-graph-value": "请输入图导入值" + } + } + }, + "hint": { + "lack-support-for-automatic": "自动生成的ID策略不支持可视化导入,请调用API实现", + "no-vertex-or-edge-mapping": "如下文件未设置顶点类型或边类型映射:" + }, + "placeholder": { + "select-vertex-type": "请选择顶点类型", + "select-edge-type": "请选择边类型", + "select-id-column": "请选择 ID 列" + } + }, + "manipulations": { + "previous": "上一步", + "next": "下一步", + "add": "添加", + "edit": "编辑", + "delete": "删除", + "cancel": "取消", + "hints": { + "delete-confirm": "确认删除?", + "warning": "删除后无法恢复,请谨慎操作" + } + }, + "validator": { + "no-empty": "该项不能为空" + } + }, + "server-data-import": { + "import-settings": { + "title": "导入设置", + "checkIfExist": "检查边连接的顶点是否存在", + "requestTimesWhenInterpolationFailed": "插入失败重试次数", + "maximumAnalyzedErrorRow": "允许最大解析错误行数", + "requestTicksWhenInterpolationFailed": "插入失败重试间隔/s", + "maxiumInterpolateErrorRow": "允许最大插入错误行数", + "InterpolationTimeout": "插入超时时间/s" + }, + "import-details": { + "title": "导入详情", + "column-titles": { + "file-name": "文件名称", + "type": "类型", + "import-speed": "导入速度", + "import-progress": "导入进度", + "status": "状态", + "time-consumed": "耗时", + "manipulations": "操作" + }, + "content": { + "vertex": "顶点", + "edge": "边" + }, + "status": { + "RUNNING": "运行中", + "SUCCEED": "成功", + "FAILED": "失败", + "PAUSED": "已暂停", + "STOPPED": "已终止" + }, + "manipulations": { + "pause": "暂停", + "resume": "继续", + "retry": "重试", + "abort": "终止", + "failed-cause": "查看原因" + } + }, + "hint": { + "check-vertex": "开启检查会影响导入性能,请按需开启", + "no-data": "正在请求导入", + "confirm-navigation": "确认跳转到任务列表?正在上传的文件可能会丢失" + }, + "validator": { + "no-empty": "该项不能为空", + "need-integer-with-negative": "请输入-1或大于0的整数", + "need-integer": "请输入大于0的整数" + }, + "manipulations": { + "previous": "上一步", + "start": "开始导入", + "cancel": "取消导入", + "finished": "完成" + } + }, + "data-import-status": { + "finished": "导入完成", + "success": "已成功导入 {{number}} 个文件", + "pause": "{{number}} 个文件暂停", + "abort": "{{number}} 个文件终止", + "move-to-import-manager": "返回导入任务列表" + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/dataAnalyze.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/dataAnalyze.json new file mode 100644 index 000000000..87afb8a40 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/dataAnalyze.json @@ -0,0 +1,287 @@ +{ + "data-analyze": { + "category": { + "gremlin-analyze": "Gremlin 分析", + "algorithm-analyze": "算法分析" + }, + "manipulations": { + "execution": "执行", + "favorite": "收藏", + "reset": "重置" + }, + "algorithm-list": { + "title": "算法目录", + "loop-detection": "环路检测", + "focus-detection": "交点检测", + "shortest-path": "最短路径", + "shortest-path-all": "全最短路径", + "all-path": "全部路径", + "neighbor-rank-recommendation": "Neighbor Rank推荐算法", + "model-similarity": "模型相似度算法", + "real-time-recommendation": "实时推荐", + "k-step-neighbor": "k步邻居", + "k-hop": "k跳算法", + "custom-path": "自定义路径", + "custom-intersection-detection": "自定义交点检测", + "radiographic-inspection": "射线检测", + "common-neighbor": "共同邻居", + "weighted-shortest-path": "带权最短路径", + "single-source-weighted-path": "单源带权路径", + "jaccard-similarity": "Jaccard相似度", + "personal-rank-recommendation": "Personal Rank推荐算法" + }, + "algorithm-forms": { + "loop-detection": { + "options": { + "source": "起点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "source_in_ring": "环路包含起点:", + "limit": "返回可达路径最大值:", + "capacity": "访问顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "focus-detection": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "limit": "访问顶点最大值:", + "capacity": "返回交点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "shortest-path": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "maxDepth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "maxDegree": "最大度数:", + "skip_degree": "超级顶点度数:", + "skipDegree": "超级顶点度数:", + "capacity": "访问顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "shortest-path-all": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "skip_degree": "超级顶点度数:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "all-path": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "limit": "返回路径最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "model-similarity": { + "options": { + "method": "起点选择方式:", + "source": "起点ID:", + "vertex-type": "顶点类型", + "vertex-property": "顶点属性", + "direction": "方向:", + "least_neighbor": "最少邻居数:", + "similarity": "相似度:", + "label": "边类型:", + "max_similar": "相似度最高个数:", + "least_similar": "梭形相似点最小个数:", + "property_filter": "属性过滤:", + "least_property_number": "最小属性值个数:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "skip_degree": "返回顶点最大值:", + "limit": "返回结果最大值:", + "return_common_connection": "返回共同关联点:", + "return_complete_info": "返回顶点完整信息:" + }, + "radio-value": { + "specific-id": "指定ID", + "filtered-type-property": "筛选类型属性" + }, + "placeholder": { + "input-source-id": "请输入起点ID", + "input-vertex-type": "请选择顶点类型", + "input-vertex-property": "请选择顶点属性", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "input-integer-gt-1": "请填写大于1的整数", + "input-filtered-property": "请选择需要过滤的属性", + "no-properties": "无属性", + "no-vertex-type": "无顶点类型" + }, + "hint": { + "least_property_number": "属性过滤和最小属性值个数需一起使用;设置后效果为:当起点跟其所有的梭形相似点某个属性的值大于等于最小属性值个数时,才会返回该起点及其梭形相似点", + "least_neighbor": "邻居数少于当前设定值,则认为起点没有梭形相似点", + "similarity": "起点与\"梭形相似点\"的共同邻居数目占起点的全部邻居数目的比例", + "max_similar": "返回起点的梭形相似点中相似度最高的top个数,0表示全部", + "return_common_connection": "是否返回起点及其\"梭形相似点\"共同关联的中间点" + }, + "validations": { + "no-empty": "该项不能为空", + "no-edge-typs": "无边类型", + "integer-only": "请填写大于等于0的整数", + "positive-integer-only": "请填写大于0的整数", + "integer-gt-1": "请填写大于1的整数" + }, + "pre-value": "全部" + }, + "neighbor-rank": { + "options": { + "source": "起点ID:", + "alpha": "Alpha", + "direction": "方向:", + "capacity": "访问顶点最大值:", + "label": "边类型:", + "degree": "最大度数:", + "top": "每层保留权重Top N:" + }, + "placeholder": { + "input-source-id": "请输入起点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "range": "范围(0-1]" + }, + "hint": { + "top": "在结果中每一层只保留权重最高的N个结果" + }, + "validations": { + "no-empty": "该项不能为空", + "no-edge-typs": "无边类型", + "range": "请填写大于0且小于等于1的数值", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数", + "input-chars": "规则不能其它重复" + }, + "pre-value": "全部", + "add-new-rule": "添加规则" + } + }, + "exec-logs": { + "table-title": { + "time": "时间", + "type": "执行类型", + "content": "执行内容", + "status": "状态", + "duration": "耗时", + "manipulation": "操作" + }, + "type": { + "GREMLIN": "GREMLIN 查询", + "GREMLIN_ASYNC": "GREMLIN 任务", + "ALGORITHM": "算法查询" + }, + "status": { + "success": "成功", + "async-success": "提交成功", + "running": "运行中", + "failed": "失败", + "async-failed": "提交失败" + } + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/index.ts new file mode 100644 index 000000000..b3e03211e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/graph-managment/index.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import CommonResources from './common.json'; +import GraphManagementSideBarResources from './GraphManagementSidebar.json'; +import DataAnalyzeResources from './dataAnalyze.json'; +import DataImportResources from './data-import/import-tasks/ImportTasks.json'; +import AsyncTasksResources from './AsyncTasks.json'; +import Addition from './addition.json'; + +export { + CommonResources, + DataAnalyzeResources, + GraphManagementSideBarResources, + DataImportResources, + AsyncTasksResources, + Addition +}; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/index.ts new file mode 100644 index 000000000..4a369f54e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/en-US/index.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { merge } from 'lodash-es'; +import { + CommonResources, + DataAnalyzeResources, + GraphManagementSideBarResources, + DataImportResources, + AsyncTasksResources, + Addition +} from './graph-managment'; + +const translation = { + translation: merge( + CommonResources, + DataAnalyzeResources, + GraphManagementSideBarResources, + DataImportResources, + AsyncTasksResources, + Addition + ) +}; + +export default translation; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/index.ts new file mode 100644 index 000000000..bad374766 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/index.ts @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import zhCNResources from './zh-CN'; +import enUSResources from './en-US'; + +export { zhCNResources, enUSResources }; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json new file mode 100644 index 000000000..ce2848f4c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/AsyncTasks.json @@ -0,0 +1,64 @@ +{ + "async-tasks": { + "title": "任务管理", + "placeholders": { + "search": "请输入任务ID或名称搜索" + }, + "table-column-title": { + "task-id": "任务ID", + "task-name": "任务名称", + "task-type": "任务类型", + "create-time": "创建时间", + "time-consuming": "耗时", + "status": "状态", + "manipulation": "操作" + }, + "table-filters": { + "task-type": { + "all": "全部", + "gremlin": "Gremlin任务", + "algorithm": "算法任务", + "remove-schema": "删除元数据", + "create-index": "创建索引", + "rebuild-index": "重建索引" + }, + "status": { + "all": "全部", + "scheduling": "调度中", + "scheduled": "排队中", + "queued": "排队中", + "running": "运行中", + "restoring": "恢复中", + "success": "成功", + "failed": "失败", + "cancelling": "已取消", + "cancelled": "已取消" + } + }, + "table-selection": { + "selected": "已选{{number}}项", + "delete-batch": "批量删除" + }, + "manipulations": { + "abort": "终止", + "aborting": "终止中", + "delete": "删除", + "check-result": "查看结果", + "check-reason": "查看原因" + }, + "hint": { + "delete-confirm": "删除确认", + "delete-description": "是否确认删除该任务?删除后无法恢复,请谨慎操作", + "delete-succeed": "删除成功", + "delete-batch-confirm": "批量删除", + "delete-batch-description": "确认删除以下任务?删除后无法恢复,请谨慎操作", + "delete": "删除", + "cancel": "取消", + "no-data": "暂无数据", + "empty": "您暂时还没有任何任务", + "select-disabled": "任务{{id}}无法被选中删除", + "check-details": "查看详情", + "creation-failed": "创建失败" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json new file mode 100644 index 000000000..d6b2f5455 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/GraphManagementSidebar.json @@ -0,0 +1,5 @@ +{ + "data-import": "数据导入", + "import-task": "导入任务", + "map-templates": "映射模板" +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/addition.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/addition.json new file mode 100644 index 000000000..d137ee317 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/addition.json @@ -0,0 +1,348 @@ +{ + "addition": { + "function-parameter": { + "edge-type": "边类型", + "vertex-id": "顶点ID" + }, + "store": { + "required": "必填项", + "item-is-required": "此项为必填项", + "no-match-input-requirements": "不符合输入要求", + "rule1": "请输入字母、数字或特殊字符", + "rule2": "请输入范围在 1-65535 的数字", + "rule3": "必须同时填写用户名和密码", + "rule4": "必须为中英文,数字和下划线", + "illegal-data-format": "非法的数据格式", + "incorrect-time-format": "时间格式不正确", + "cannot-be-empty": "此项不能为空", + "cannot-be-empty1": "该项不能为空", + "same-edge-name-notice": "存在同名边,请输入其它名称", + "same-vertex-name-notice": "存在同名顶点,请输入其它名称", + "same-property-name-notice": "存在同名属性,请输入其它名称", + "same-index-name-notice": "存在同名属性索引,请输入其它名称", + "network-error": "网络异常,请稍后重试" + }, + "constant": { + "primary-key-id": "主键ID", + "automatic-generation": "自动生成", + "custom-string": "自定义字符串", + "custom-number": "自定义数字", + "custom-uuid": "自定义UUID", + "greater-than": "大于", + "greater-than-or-equal": "大于等于", + "less-than": "小于", + "less-than-or-equal": "小于等于", + "equal": "等于" + }, + "menu": { + "chart": "图", + "table": "表格", + "task-id": "任务ID", + "list-mode": "列表模式", + "chart-mode": "图模式", + "secondary-index": "二级索引", + "range-index": "范围索引", + "full-text-index": "全文索引", + "type-index": "类型索引", + "base-info": "基础信息", + "select-reuse-item": "选择复用项", + "confirm-reuse-item": "确认复用项", + "complete-reuse": "完成复用" + }, + "vertex": { + "type-detail": "顶点类型详情", + "edit-type": "编辑顶点类型", + "using-cannot-delete": "当前顶点类型正在使用中,不可删除。", + "using-cannot-delete-confirm": "使用中顶点类型不可删除,确认删除以下未使用顶点类型?", + "del-vertex-confirm": "确认删除此顶点类型?", + "del-vertex-confirm-again": "确认删除此顶点类型?删除后无法恢复,请谨慎操作", + "vertex-type-name": "顶点类型名称", + "vertex-style": "顶点样式", + "vertex-display-content": "顶点展示内容", + "select-vertex-display-content-placeholder": "请选择顶点展示内容", + "create-vertex-type": "创建顶点类型", + "vertex-index": "顶点索引", + "corresponding-vertex-type": "对应顶点类型", + "no-vertex-type-desc": "您暂时还没有任何顶点类型,立即创建" + }, + "edge": { + "display-content": "边展示内容", + "display-content-select-desc": "请选择边展示内容", + "index-info": "索引信息", + "index-name": "索引名称", + "index-type": "索引类型", + "edge-index": "边索引", + "index-type-select-desc": "请选择索引类型", + "property-select-desc": "请选择属性", + "add-group": "新增一组", + "confirm-del-edge-type": "确认删除此边类型?", + "confirm-del-edge-type-again": "确认删除边类型?删除后无法恢复,请谨慎操作", + "confirm-del-edge-careful-notice": "删除后无法恢复,请谨慎操作", + "no-edge-desc": "您暂时还没有任何边类型,立即创建", + "create-edge": "创建边类型", + "multiplexing-existing-type": "复用已有类型", + "multiplexing-edge-type": "复用边类型", + "multiplexing-edge-type-notice": "边类型关联的属性和属性索引、起点类型和终点类型及其关联的属性和属性索引将一同复用", + "verification-result": "校验结果", + "be-verified": "待校验", + "verified-again": "重新校验" + }, + "message": { + "no-can-delete-vertex-type": "无可删除顶点类型", + "no-index-notice": "您暂时还没有任何索引", + "property-create-desc": "您暂时还没有任何属性,立即创建", + "del-unused-property-notice": "使用中属性不可删除,确认删除以下未使用属性?", + "please-enter-keywords": "请输入搜索关键字", + "no-property-can-delete": "无可删除属性", + "no-metadata-notice": "您暂时还没有任何元数据", + "no-vertex-or-edge-notice": "您还未设置顶点类型或边类型", + "no-adjacency-points": "不存在邻接点", + "no-more-points": "不存在更多邻接点", + "please-enter-number": "请输入数字", + "please-enter-string": "请输入字符串", + "please-enter": "请输入", + "no-chart-desc": "无图结果,请查看表格或Json数据", + "no-data-desc": "暂无数据结果", + "data-loading": "数据加载中", + "submit-async-task": "提交异步任务中", + "submit-success": "提交成功", + "submit-fail": "提交失败", + "task-submit-fail": "任务提交失败", + "fail-reason": "失败原因", + "fail-position": "失败位置", + "selected": "已选", + "edge-del-confirm": "确认删除以下边?", + "long-time-notice": "删除元数据耗时较久,详情可在任务管理中查看。", + "index-long-time-notice": "创建索引可能耗时较久,详情可在任务管理中查看", + "property-del-confirm": "确认删除此属性?", + "property-del-confirm-again": "确认删除此属性?删除后无法恢复,请谨慎操作", + "index-del-confirm": "删除索引后,无法根据此属性索引进行查询,请谨慎操作。", + "edge-name-rule": "允许出现中英文、数字、下划线", + "source-type-select-placeholder": "请选择起点类型", + "target-type-select-placeholder": "请选择终点类型", + "select-distinguishing-key-property-placeholder": "请选择区分键属性", + "select-association-key-property-placeholder": "请先选择关联属性", + "index-open-notice": "开启索引会影响使用性能,请按需开启", + "duplicate-name": "有重名", + "dependency-conflict": "依赖冲突", + "already-exist": "已存在", + "pass": "通过", + "select-reuse-graph-placeholder": "请选择要复用的图", + "reuse-complete": "复用完成", + "vertex-type-reuse-success": "已成功复用顶点类型", + "property-using-cannot-delete": "当前属性数据正在使用中,不可删除。", + "reuse-property-success": "已成功复用属性", + "reuse-vertex-type-notice": "顶点类型关联的属性和属性索引将一同复用", + "illegal-vertex": "该顶点是非法顶点,可能是由悬空边导致" + }, + "operate": { + "reuse-vertex-type": "复用顶点类型", + "reuse-existing-property": "复用已有属性", + "reuse-property": "复用属性", + "create-property": "创建属性", + "continue-reuse": "继续复用", + "back-to-view": "返回查看", + "complete": "完成", + "next-step": "下一步", + "previous-step": "上一步", + "rename": "重命名", + "del-ing": "删除中", + "view-task-management": "去任务管理查看", + "batch-del": "批量删除", + "multiplexing": "复用", + "de-multiplexing": "取消复用", + "open": "开", + "close": "关", + "look": "查看", + "view-property": "查看属性", + "filter": "筛选", + "add-filter-item": "添加属性筛选", + "enlarge": "放大", + "narrow": "缩小", + "center": "居中", + "download": "下载", + "exit-full-screen": "退出全屏", + "full-screen": "全屏", + "load-background": "加载背景", + "load-spinner": "加载 spinner", + "rendering": "正在渲染", + "detail": "详情", + "favorite": "收藏", + "favorite-success": "收藏成功", + "load-statement": "加载语句", + "time": "时间", + "name": "名称", + "favorite-statement": "收藏语句", + "favorite-desc": "请输入收藏名称", + "operate": "操作", + "query": "查询", + "hidden": "隐藏", + "modify-name": "修改名称", + "execution-record": "执行记录", + "favorite-queries": "收藏的查询", + "favorite-search-desc": "搜索收藏名称或语句", + "expand-collapse": "展开/收起", + "expand": "展开", + "collapse": "收起", + "favorite-del-desc": "是否确认删除该条收藏语句?", + "input-query-statement": "请输入查询语句", + "query-statement-required": "查询语句不能为空", + "execute-query": "执行查询", + "execute-task": "执行任务", + "execute-ing": "执行中", + "clean": "清空", + "modify-success": "修改成功", + "query-result-desc": "查询模式适合30秒内可返回结果的小规模分析;任务模式适合较长时间返回结果的大规模分析,任务详情可在任务管理中查看" + }, + "common": { + "in-use": "使用中", + "not-used": "未使用", + "status": "状态", + "no-result": "无结果", + "cardinal-number": "基数", + "allow-null": "允许为空", + "allow-multiple-connections": "允许多次连接", + "multiple-connections-notice": "开启后两顶点间允许存在多条该类型的边", + "term": "项", + "in-edge": "入边", + "add-in-edge": "添加入边", + "out-edge": "出边", + "add-out-edge": "添加出边", + "add": "添加", + "value": "值", + "null-value": "空值", + "id-strategy": "ID策略", + "id-value": "ID值", + "id-input-desc": "请输入ID值", + "please-input": "请输入", + "add-success": "添加成功", + "add-fail": "添加失败", + "vertex-type": "顶点类型", + "selected-vertex-type": "已选顶点类型", + "vertex-id": "顶点ID", + "vertex-name": "顶点名称", + "illegal-vertex-desc": "该顶点是非法顶点,可能是由悬空边导致", + "add-vertex": "添加顶点", + "vertex-type-select-desc": "请选择顶点类型", + "edge-type": "边类型", + "selected-edge-type": "已选边类型", + "edge-style": "边样式", + "modify-edge-type": "编辑边类型", + "edge-type-detail": "边类型详情", + "edge-type-name": "边类型名称", + "edge-direction": "边方向", + "edge-type-select-desc": "请选择边类型", + "edge-id": "边ID", + "edge-name": "边名称", + "source": "起点", + "source-type": "起点类型", + "target": "终点", + "target-type": "终点类型", + "rule": "规则", + "property": "属性", + "selected-property": "已选属性", + "property-name": "属性名称", + "add-property": "添加属性", + "association-property": "关联属性", + "association-property-and-type": "关联属性及类型", + "property-index": "属性索引", + "selected-property-index": "已选属性索引", + "property-index-name": "属性索引名称", + "property-value": "属性值", + "required-property": "不可空属性", + "nullable-property": "可空属性", + "primary-key": "主键", + "primary-key-property": "主键属性", + "select-primary-key-property-placeholder": "请选择主键属性", + "distinguishing-key": "区分键", + "distinguishing-key-property": "区分键属性", + "property-input-desc": "请输入属性值", + "del-comfirm": "确认删除", + "ask": "吗?", + "confirm": "确认", + "del-success": "删除成功", + "save-scuccess": "保存成功", + "save-fail": "保存失败", + "save": "保存", + "cancel": "取消", + "more": "更多", + "edit": "编辑", + "del": "删除", + "fold": "折叠", + "open": "展开", + "close": "关闭", + "required": "必填项", + "format-error-desc": "必须以字母开头,允许出现英文、数字、下划线", + "no-matching-results": "无匹配结果", + "no-data": "暂无数据", + "data-type": "数据类型", + "corresponding-type": "对应类型" + }, + "appbar": { + "graph-manager": "图管理" + }, + "graphManagementHeader": { + "graph-manager": "图管理", + "community": "社区版", + "business": "商业版", + "limit-desc": "支持图上限", + "limit-desc1": "图磁盘上限", + "individual": "个", + "input-placeholder": "搜索图名称或ID", + "graph-create": "创建图" + }, + "graphManagementList": { + "save-scuccess": "保存成功", + "graph-del": "删除图", + "graph-del-comfirm-msg": "删除后该图所有配置均不可恢复", + "graph-edit": "编辑图", + "id": "图ID", + "id-desc": "为创建的图设置唯一标识的ID", + "name": "图名称", + "name-desc": "填写需要连接的图的名称", + "host": "主机名", + "port": "端口号", + "port-desc": "请输入端口号", + "username": "用户名", + "password": "密码", + "creation-time": "创建时间", + "visit": "访问" + }, + "graphManagementEmptyList": { + "graph-create": "创建图", + "graph-create-desc": "您暂时还没有任何图,立即创建", + "no-matching-results": "无匹配结果" + }, + "newGraphConfig": { + "graph-create": "创建图", + "create": "创建", + "create-scuccess": "创建成功", + "id": "图ID", + "id-desc": "为创建的图设置唯一标识的ID", + "name": "图名称", + "name-desc": "填写需要连接的图的名称", + "host": "主机名", + "host-desc": "请输入主机名", + "port": "端口号", + "port-desc": "请输入端口号", + "username": "用户名", + "password": "密码", + "not-required-desc": "未设置则无需填写" + }, + "graphManagementSidebar": { + "data-analysis": "数据分析", + "graph-select": "选择图", + "metadata-config": "元数据配置", + "data-import": "数据导入", + "task-management": "任务管理" + }, + "dataAnalyze": { + "cannot-access": "无法访问", + "return-home": "返回首页" + }, + "dataAnalyzeInfoDrawer": { + "edit-details": "编辑详情", + "data-details": "数据详情" + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/common.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/common.json new file mode 100644 index 000000000..98d821703 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/common.json @@ -0,0 +1,5 @@ +{ + "common": { + "loading-data": "数据加载中" + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json new file mode 100644 index 000000000..2edf4240c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/data-import/import-tasks/ImportTasks.json @@ -0,0 +1,343 @@ +{ + "breadcrumb": { + "first": "导入任务", + "second": "任务详情" + }, + "import-manager": { + "hint": { + "empty-task": "您暂时还没有任何任务,立即创建", + "no-result": "无结果", + "creation-succeed": "创建成功", + "update-succeed": "编辑成功" + }, + "manipulation": { + "create": "创建" + }, + "placeholder": { + "input-job-name": "请输入任务名称搜索", + "input-valid-job-name": "允许出现中英文、数字、下划线", + "input-job-description": "请输入任务备注" + }, + "list-column-title": { + "job-name": "任务名称", + "size": "大小", + "create-time": "创建时间", + "status": "状态", + "time-consuming": "任务耗时", + "manipulation": "操作" + }, + "list-column-status": { + "DEFAULT": "未开始", + "UPLOADING": "未开始", + "MAPPING": "设置中", + "SETTING": "导入中", + "LOADING": "导入中", + "FAILED": "失败", + "SUCCESS": "成功" + }, + "list-column-manipulations": { + "start": "开始任务", + "resume-setting": "继续设置", + "resume-importing": "继续导入", + "check-error-log": "查看原因", + "delete": "删除" + }, + "modal": { + "create-job": { + "title": "创建导入任务", + "job-name": "任务名称:", + "job-description": "任务备注:" + }, + "delete-job": { + "title": "删除任务", + "hint": "确认删除任务{{name}}吗?", + "sub-hint": "删除后该任务不可恢复" + }, + "manipulations": { + "create": "创建", + "delete": "删除", + "cancel": "取消" + } + }, + "validator": { + "no-empty": "此项为必填项", + "over-limit-size": "已超出字数限制", + "invalid-format": "请输入中英文、数字、下划线" + } + }, + "import-job-details": { + "tabs": { + "basic-settings": "基础设置", + "uploaded-files": "上传文件", + "data-maps": "映射文件", + "import-details": "导入详情" + }, + "basic": { + "job-name": "任务名称:", + "job-description": "任务备注:", + "modal": { + "edit-job": { + "title": "编辑导入任务", + "job-name": "任务名称:", + "job-description": "任务备注:" + }, + "manipulations": { + "save": "保存", + "cancel": "取消" + } + } + }, + "manipulations": { + "edit": "编辑", + "resume-task": "继续任务" + } + }, + "step": { + "first": "上传文件", + "second": "设置数据映射", + "third": "导入数据", + "fourth": "完成" + }, + "upload-files": { + "click": "点击", + "description": "点击或将文件拖拽到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", + "drag": "拖拽", + "description-1": "或将文件", + "description-2": "到此处上传,可同时上传多个支持csv文件,单个1G以内,单次累计10G以内", + "cancel": "取消上传", + "next": "下一步", + "wrong-format": "仅支持 csv 格式文件", + "over-single-size-limit": "容量已超过 1 GB", + "over-all-size-limit": "总容量已超过 10 GB", + "empty-file": "文件为空,请重新上传", + "no-duplicate": "下列上传的文件已存在:" + }, + "data-configs": { + "file": { + "title": "文件设置", + "include-header": "包含表头", + "delimiter": { + "title": "分隔符", + "comma": "逗号", + "semicolon": "分号", + "tab": "制表符", + "space": "空格", + "custom": "自定义" + }, + "code-type": { + "title": "编码格式", + "UTF-8": "UTF-8", + "GBK": "GBK", + "ISO-8859-1": "ISO-8859-1", + "US-ASCII": "US-ASCII", + "custom": "自定义" + }, + "date-type": { + "title": "日期格式", + "custom": "自定义" + }, + "skipped-line": "跳过行", + "timezone": "时区", + "save": "保存", + "placeholder": { + "input-delimiter": "请输入分隔符", + "input-charset": "请输入编码格式", + "input-date-format": "请输入日期格式" + }, + "hint": { + "save-succeed": "已保存文件设置" + } + }, + "type": { + "title": "类型设置", + "basic-settings": "基础设置", + "manipulation": { + "create": "创建", + "save": "保存", + "cancel": "取消", + "create-vertex": "创建顶点映射", + "create-edge": "创建边映射" + }, + "info": { + "type": "类型", + "name": "名称", + "ID-strategy": "ID策略", + "edit": "编辑", + "delete": "删除" + }, + "ID-strategy": { + "PRIMARY_KEY": "主键ID", + "AUTOMATIC": "自动生成", + "CUSTOMIZE_STRING": "自定义字符串", + "CUSTOMIZE_NUMBER": "自定义数字", + "CUSTOMIZE_UUID": "自定义UUID" + }, + "vertex": { + "title": "创建顶点映射", + "type": "顶点类型", + "ID-strategy": "ID策略", + "ID-column": "ID列", + "map-settings": "映射设置", + "add-map": { + "title": "添加映射", + "name": "列名", + "sample": "数据样例", + "property": "映射属性", + "clear": "清空" + }, + "select-all": "全选", + "advance": { + "title": "高级设置", + "nullable-list": { + "title": "空值列表", + "empty": "空值", + "custom": "自定义" + }, + "map-property-value": { + "title": "属性值映射", + "add-value": "添加属性值映射", + "fields": { + "property": "属性", + "value-map": "值映射", + "add-value-map": "添加值映射" + } + }, + "placeholder": { + "input": "请选择", + "input-property": "请选择输入属性", + "input-file-value": "请输入文件值", + "input-graph-value": "请输入图导入值" + } + } + }, + "edge": { + "title": "创建边映射", + "type": "边类型", + "source-ID-strategy": "起点ID策略", + "target-ID-strategy": "终点ID策略", + "ID-column": "ID列", + "map-settings": "映射设置", + "add-map": { + "title": "添加映射", + "name": "列名", + "sample": "数据样例", + "property": "映射属性", + "clear": "清空" + }, + "select-all": "全选", + "advance": { + "title": "高级设置", + "nullable-list": { + "title": "空值列表", + "empty": "空值", + "custom": "自定义" + }, + "map-property-value": { + "title": "属性值映射", + "add-value": "添加 属性值映射", + "fields": { + "property": "属性", + "value-map": "值映射", + "add-value-map": "添加值映射" + } + }, + "placeholder": { + "input": "请选择映射属性", + "input-property": "请选择输入属性", + "input-file-value": "请输入文件值", + "input-graph-value": "请输入图导入值" + } + } + }, + "hint": { + "lack-support-for-automatic": "自动生成的ID策略不支持可视化导入,请调用API实现", + "no-vertex-or-edge-mapping": "如下文件未设置顶点类型或边类型映射:" + }, + "placeholder": { + "select-vertex-type": "请选择顶点类型", + "select-edge-type": "请选择边类型", + "select-id-column": "请选择 ID 列", + "empty-value": "空" + } + }, + "manipulations": { + "previous": "上一步", + "next": "下一步", + "add": "添加", + "edit": "编辑", + "delete": "删除", + "cancel": "取消", + "hints": { + "delete-confirm": "确认删除?", + "warning": "删除后无法恢复,请谨慎操作" + } + }, + "validator": { + "no-empty": "该项不能为空" + } + }, + "server-data-import": { + "import-settings": { + "title": "导入设置", + "checkIfExist": "检查边连接的顶点是否存在", + "requestTimesWhenInterpolationFailed": "插入失败重试次数", + "maximumAnalyzedErrorRow": "允许最大解析错误行数", + "requestTicksWhenInterpolationFailed": "插入失败重试间隔/s", + "maxiumInterpolateErrorRow": "允许最大插入错误行数", + "InterpolationTimeout": "插入超时时间/s" + }, + "import-details": { + "title": "导入详情", + "column-titles": { + "file-name": "文件名称", + "type": "类型", + "import-speed": "导入速度", + "import-progress": "导入进度", + "status": "状态", + "time-consumed": "耗时", + "manipulations": "操作" + }, + "content": { + "vertex": "顶点", + "edge": "边" + }, + "status": { + "RUNNING": "运行中", + "SUCCEED": "成功", + "FAILED": "失败", + "PAUSED": "已暂停", + "STOPPED": "已终止" + }, + "manipulations": { + "pause": "暂停", + "resume": "继续", + "retry": "重试", + "abort": "终止", + "failed-cause": "查看原因" + } + }, + "hint": { + "check-vertex": "开启检查会影响导入性能,请按需开启", + "no-data": "正在请求导入", + "confirm-navigation": "确认跳转到任务列表?正在上传的文件可能会丢失" + }, + "validator": { + "no-empty": "该项不能为空", + "need-integer-with-negative": "请输入-1或大于0的整数", + "need-integer": "请输入大于0的整数" + }, + "manipulations": { + "previous": "上一步", + "start": "开始导入", + "cancel": "取消导入", + "finished": "完成" + } + }, + "data-import-status": { + "finished": "导入完成", + "success": "已成功导入 {{number}} 个文件", + "pause": "{{number}} 个文件暂停", + "abort": "{{number}} 个文件终止", + "move-to-import-manager": "返回导入任务列表" + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json new file mode 100644 index 000000000..8f01b76e3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/dataAnalyze.json @@ -0,0 +1,654 @@ +{ + "data-analyze": { + "category": { + "gremlin-analyze": "Gremlin 分析", + "algorithm-analyze": "算法分析" + }, + "manipulations": { + "execution": "执行", + "favorite": "收藏", + "reset": "重置" + }, + "hint": { + "graph-disabled": "该图不可用" + }, + "algorithm-list": { + "title": "算法目录", + "loop-detection": "环路检测", + "focus-detection": "交点检测", + "shortest-path": "最短路径", + "shortest-path-all": "全最短路径", + "all-path": "所有路径", + "model-similarity": "模型相似度算法", + "neighbor-rank": "Neighbor Rank推荐算法", + "k-step-neighbor": "k步邻居", + "k-hop": "k跳算法", + "custom-path": "自定义路径", + "radiographic-inspection": "射线检测", + "same-neighbor": "共同邻居", + "weighted-shortest-path": "带权最短路径", + "single-source-weighted-shortest-path": "单源带权最短路径", + "jaccard": "Jaccard相似度", + "personal-rank": "Personal Rank推荐算法" + }, + "algorithm-forms": { + "loop-detection": { + "options": { + "source": "起点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "source_in_ring": "环路包含起点:", + "limit": "返回可达路径最大值:", + "capacity": "访问顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "focus-detection": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "limit": "返回交点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "shortest-path": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "skip_degree": "超级顶点度数:", + "capacity": "访问顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-integer": "请填写大于等于0的整数,默认为0", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "shortest-path-all": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "skip_degree": "超级顶点度数:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer": "请填写大于0的整数", + "input-integer": "请填写大于等于0的整数,默认为0", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目", + "skip-degree": "填写查询过程中需要跳过的顶点的最小的边数目,即当顶点的边数目大于超级顶点度数时,跳过该顶点,可用于规避超级点" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "all-path": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "limit": "返回路径最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "model-similarity": { + "options": { + "method": "起点选择方式:", + "source": "起点ID:", + "vertex-type": "顶点类型:", + "vertex-property": "顶点属性及值:", + "direction": "方向:", + "least_neighbor": "最少邻居数:", + "similarity": "相似度:", + "label": "边类型:", + "max_similar": "相似度最高个数:", + "least_similar": "模形相似点最小个数:", + "property_filter": "属性过滤:", + "least_property_number": "最小属性值个数:", + "max_degree": "最大度数:", + "capacity": "访问顶点最大值:", + "skip_degree": "返回顶点最大值:", + "limit": "返回结果最大值:", + "return_common_connection": "返回共同关联点:", + "return_complete_info": "返回顶点完整信息:" + }, + "radio-value": { + "specific-id": "指定ID", + "filtered-type-property": "筛选类型属性" + }, + "placeholder": { + "input-source-id": "请输入起点ID,多个ID用逗号分隔", + "input-vertex-type": "请选择顶点类型", + "select-vertex-property": "请选择顶点属性", + "input-vertex-property": "多属性值以逗号分隔", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "input-integer-gt-1": "请填写大于1的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "input-filtered-property": "请选择需要过滤的属性", + "no-properties": "无属性", + "no-vertex-type": "无顶点类型", + "similarity": "请输入(0-1]的数字" + }, + "hint": { + "vertex_type_or_property": "顶点类型/顶点属性至少填写一项", + "least_property_number": "属性过滤和最小属性值个数需一起使用;设置后效果为:当起点跟其所有的梭形相似点某个属性的值大于等于最小属性值个数时,才会返回该起点及其梭形相似点", + "max-degree": "查询过程中,单个顶点的最大边数目", + "least_neighbor": "邻居数少于当前设定值,则认为起点没有梭形相似点", + "similarity": "起点与\"梭形相似点\"的共同邻居数目占起点的全部邻居数目的比例", + "max_similar": "返回起点的梭形相似点中相似度最高的top个数,0表示全部", + "return_common_connection": "是否返回起点及其\"梭形相似点\"共同关联的中间点" + }, + "validations": { + "no-empty": "该项不能为空", + "no-edge-typs": "无边类型", + "integer-only": "请填写大于等于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "postive-integer-only": "请填写大于0的整数", + "integer-gt-1": "请填写大于1的整数", + "similarity": "请输入(0-1]的数字", + "no-gt-1000": "该值不能大于等于1000" + }, + "add": "添加", + "delete": "删除", + "pre-value": "全部" + }, + "neighbor-rank": { + "options": { + "source": "起点ID:", + "alpha": "Alpha:", + "direction": "方向:", + "capacity": "访问顶点最大值:", + "label": "边类型:", + "degree": "最大度数:", + "top": "每层保留权重Top N:", + "steps": "steps:" + }, + "placeholder": { + "input-source-id": "请输入起点ID", + "input-integer-lt-1000": "请填写大于等于0小于1000的整数, 默认为100", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer": "请填写大于0的整数", + "range": "范围(0-1]" + }, + "hint": { + "top": "在结果中每一层只保留权重最高的N个结果", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "no-edge-typs": "无边类型", + "range": "请填写大于0且小于等于1的数值", + "integer-only-lt-1000": "请填写大于等于0的整数小于1000的整数", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + }, + "pre-value": "全部", + "add-new-rule": "添加规则" + }, + "k-step-neighbor": { + "options": { + "source": "起点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "limit": "返回顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "k-hop": { + "options": { + "source": "起点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "nearest": "最短路径:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "遍历中访问顶点最大值:", + "limit": "返回顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目", + "shortest-path": "开启后,则查询出起始顶点最短路径为depth步的顶点,关闭后,则查询出起始顶点路径为depth步的顶点,可能有环,且不一定是最短路径" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "custom-path": { + "options": { + "method": "起点选择方式:", + "source": "起点ID:", + "vertex-type": "顶点类型:", + "vertex-property": "顶点属性:", + "sort_by": "路径权重排序:", + "capacity": "遍历中访问顶点最大值:", + "limit": "返回顶点最大值:", + "direction": "方向:", + "labels": "边类型:", + "properties": "边属性:", + "weight_by": "根据属性计算边权重:", + "degree": "最大度数:", + "sample": "采样值:", + "steps": "steps:" + }, + "placeholder": { + "input-source-id": "请输入起点ID,多个ID用逗号分隔", + "select-vertex-type": "请选择顶点类型", + "select-vertex-property": "请选择顶点属性", + "input-multiple-properties": "多属性值以逗号分隔", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer": "请填写大于0的整数", + "input-positive-integer-or-negative-one-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "input-property": "请输入边属性", + "input-number": "请输入浮点数字", + "select-edge-type": "请选择边类型", + "select-edge-property": "请选择边属性", + "select-property": "请选择属性", + "no-vertex-type": "无顶点类型", + "no-vertex-property": "无顶点属性", + "no-edge-type": "无边类型", + "no-edge-property": "无边属性", + "no-properties": "无属性" + }, + "hint": { + "top": "在结果中每一层只保留权重最高的N个结果", + "vertex_type_or_property": "顶点类型/顶点属性至少填写一项" + }, + "radio-value": { + "specific-id": "指定ID", + "filtered-type-property": "筛选类型属性", + "none": "不排序", + "ascend": "升序", + "descend": "降序" + }, + "validations": { + "no-empty": "该项不能为空", + "no-edge-typs": "无边类型", + "range": "请填写大于0且小于等于1的数值", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "input-number": "请输入浮点数字" + }, + "custom-weight": "自定义权重值", + "add": "添加", + "delete": "删除", + "add-new-rule": "添加规则" + }, + "radiographic-inspection": { + "options": { + "source": "起点ID:", + "direction": "方向:", + "max_depth": "最大步数:", + "label": "边类型:", + "max_degree": "最大度数:", + "capacity": "遍历中访问顶点最大值:", + "limit": "返回非环路路径最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-positive-integer": "请填写大于0的整数", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10000000", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "same-neighbor": { + "options": { + "vertex": "顶点1:", + "other": "顶点2:", + "direction": "方向:", + "label": "边类型:", + "max_degree": "最大度数:", + "limit": "返回共同邻居最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入顶点ID", + "input-other-id": "请输入不同于顶点1的ID", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer": "请填写大于0的整数", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "no-same-value-with-other": "不能与顶点2相同", + "no-same-value-with-vertex": "不能与顶点1相同" + } + }, + "weighted-shortest-path": { + "options": { + "source": "起点ID:", + "target": "终点ID:", + "direction": "方向:", + "weight": "权重属性:", + "with_vertex": "返回顶点完整信息:", + "label": "边类型:", + "max_degree": "最大度数:", + "skip_degree": "跳过点的度数:", + "capacity": "遍历中访问顶点最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-target-id": "请输入终点ID", + "input-integer": "请填写大于等于0的整数", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "select-property": "请选择属性", + "input-positive-integer": "请填写大于0的整数,默认为0", + "no-property": "无属性值为数字类型的属性", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "当顶点的边数目大于填写值,则跳过当前顶点,用于规避超级点", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "postive-integer-only": "请填写大于0的整数" + } + }, + "single-source-weighted-shortest-path": { + "options": { + "source": "起点ID:", + "direction": "方向:", + "weight": "权重属性:", + "with_vertex": "返回顶点完整信息:", + "label": "边类型:", + "max_degree": "最大度数:", + "skip_degree": "跳过点的度数:", + "capacity": "遍历中访问顶点最大值:", + "limit": "返回顶点/最短路径最大值:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入起点ID", + "input-integer": "请填写大于等于0的整数,默认为0", + "input-positive-integer": "请填写大于0的整数", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-capacity": "请填写-1或大于0的整数,默认为10000000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10", + "no-property": "若不填写权重为1.0", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "skip-degree": "当顶点的边数目大于填写值,则跳过当前顶点,用于规避超级点", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "integer-only": "请填写大于等于0的整数", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + } + }, + "jaccard": { + "options": { + "vertex": "顶点1:", + "other": "顶点2:", + "direction": "方向:", + "label": "边类型:", + "max_degree": "最大度数:" + }, + "pre-value": "全部", + "placeholder": { + "input-source-id": "请输入顶点ID", + "input-other-id": "请输入不同于顶点1的ID", + "input-positive-integer": "请填写大于0的整数", + "input-positive-integer-or-negative-one-max-degree": "请填写-1或大于0的整数,默认为10000", + "no-edge-types": "无边类型" + }, + "hint": { + "max-depth": "为保证性能,建议不超过10步,推荐5步", + "max-degree": "查询过程中,单个顶点的最大边数目" + }, + "validations": { + "no-empty": "该项不能为空", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数", + "no-same-value-with-other": "不能与顶点2相同", + "no-same-value-with-vertex": "不能与顶点1相同" + } + }, + "personal-rank": { + "options": { + "source": "起点ID:", + "alpha": "Alpha:", + "max_depth": "迭代次数:", + "with_label": "返回结果筛选:", + "label": "边类型:", + "degree": "最大度数:", + "limit": "返回顶点最大值:", + "sorted": "返回结果排序:" + }, + "with-label-radio-value": { + "same_label": "相同类型顶点", + "other_label": "不同类型顶点", + "both_label": "全部类型顶点" + }, + "placeholder": { + "input-source-id": "请输入起点ID", + "input-positive-integer-or-negative-one-degree": "请填写-1或大于0的整数,默认为10000", + "input-positive-integer-or-negative-one-limit": "请填写-1或大于0的整数,默认为10000000", + "select-edge": "请选择边类型", + "input-positive-integer": "请填写大于0的整数", + "alpha": "请输入(0-1]的数字", + "max_depth": "请输入(0-50]的数字" + }, + "hint": { + "degree": "查询过程中,单个顶点的最大边数目", + "with-label": "根据是否与起点类型相同,筛选返回结果", + "sorted": "选择开,则降序排列,选择关,则不排序" + }, + "validations": { + "no-empty": "该项不能为空", + "no-edge-typs": "无边类型", + "alpha-range": "请填写大于0且小于等于1的数值", + "depth-range": "请填写大于0且小于等于50的数值", + "postive-integer-only": "请填写大于0的整数", + "positive-integer-or-negative-one-only": "请填写-1或大于0的整数" + }, + "pre-value": "全部", + "add-new-rule": "添加规则" + }, + "api-name-mapping": { + "rings": "环路检测", + "crosspoints": "交点检测", + "shortpath": "最短路径", + "allshortpath": "全最短路径", + "paths": "所有路径", + "fsimilarity": "模型相似度算法", + "neighborrank": "Neighbor Rank推荐算法", + "kneighbor": "k步邻居", + "kout": "k跳算法", + "customizedpaths": "自定义路径", + "rays": "射线检测", + "sameneighbors": "共同邻居", + "weightedshortpath": "带权最短路径", + "singleshortpath": "单源带权最短路径", + "jaccardsimilarity": "Jaccard相似度", + "personalrank": "Personal Rank推荐算法" + } + }, + "exec-logs": { + "table-title": { + "time": "时间", + "type": "执行类型", + "content": "执行内容", + "status": "状态", + "duration": "耗时", + "manipulation": "操作" + }, + "type": { + "GREMLIN": "GREMLIN 查询", + "GREMLIN_ASYNC": "GREMLIN 任务", + "ALGORITHM": "算法查询" + }, + "status": { + "success": "成功", + "async-success": "提交成功", + "running": "运行中", + "failed": "失败", + "async-failed": "提交失败" + } + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/index.ts new file mode 100644 index 000000000..b3e03211e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/graph-managment/index.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import CommonResources from './common.json'; +import GraphManagementSideBarResources from './GraphManagementSidebar.json'; +import DataAnalyzeResources from './dataAnalyze.json'; +import DataImportResources from './data-import/import-tasks/ImportTasks.json'; +import AsyncTasksResources from './AsyncTasks.json'; +import Addition from './addition.json'; + +export { + CommonResources, + DataAnalyzeResources, + GraphManagementSideBarResources, + DataImportResources, + AsyncTasksResources, + Addition +}; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/index.ts new file mode 100644 index 000000000..4a369f54e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/i18n/resources/zh-CN/index.ts @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { merge } from 'lodash-es'; +import { + CommonResources, + DataAnalyzeResources, + GraphManagementSideBarResources, + DataImportResources, + AsyncTasksResources, + Addition +} from './graph-managment'; + +const translation = { + translation: merge( + CommonResources, + DataAnalyzeResources, + GraphManagementSideBarResources, + DataImportResources, + AsyncTasksResources, + Addition + ) +}; + +export default translation; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/index.less b/hugegraph-hubble/hubble-fe-old(legacy)/src/index.less new file mode 100644 index 000000000..b0e16a767 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/index.less @@ -0,0 +1,320 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +@import '~hubble-ui/src/index.less'; + +@primary-color: #2b65ff; +@primary-hover-color: #527dff; +@primary-active-color: #184bcc; + +* { + box-sizing: border-box; +} + +html, +body, +img, +ul, +ol, +li, +table, +tr, +th, +td, +p { + margin: 0; + padding: 0; + border: 0; +} + +body { + background: #f2f2f2; + // prettier-ignore + font-family: + -apple-system, + BlinkMacSystemFont, + 'Helvetica Neue', + Helvetica, + 'PingFang SC', + 'Hiragino Sans GB', + 'Microsoft YaHei', + '微软雅黑', + Arial, + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + &.dark { + background: #000; + } + + &::after { + position: absolute; + overflow: hidden; + left: -20000px; + // preload images which in hover state to solve blink issue + content: + url(./assets/imgs/ic_topback.svg) + url(./assets/imgs/ic_arrow_white.svg) + url(./assets/imgs/ic_shuju_normal.svg) + url(./assets/imgs/ic_shuju_pressed.svg) + url(./assets/imgs/ic_yuanshuju_normal.svg) + url(./assets/imgs/ic_yuanshuju_pressed.svg) + url(./assets/imgs/ic_cebianzhankai.svg) + url(./assets/imgs/ic_cebianshouqi.svg) + url(./assets/imgs/ic_daorushuju_normal.svg) + url(./assets/imgs/ic_daorushuju_pressed.svg) + url(./assets/imgs/ic_renwuguanli_normal.svg) + url(./assets/imgs/ic_renwuguanli_pressed.svg) + url(./assets/imgs/ic_tuzhanshi_normal.svg) + url(./assets/imgs/ic_tuzhanshi_hover.svg) + url(./assets/imgs/ic_tuzhanshi_pressed.svg) + url(./assets/imgs/ic_biaoge_normal.svg) + url(./assets/imgs/ic_biaoge_hover.svg) + url(./assets/imgs/ic_biaoge_pressed.svg) + url(./assets/imgs/ic_json_normal.svg) url(./assets/imgs/ic_json_hover.svg) + url(./assets/imgs/ic_json_pressed.svg) url(./assets/imgs/ic_close_16.svg) + url(./assets/imgs/ic_refresh.svg) url(./assets/imgs/ic_loading_back.svg) + url(./assets/imgs/ic_loading_front.svg) + url(./assets/imgs/ic_question_mark.svg); + } +} + +code { + // prettier-ignore + font-family: + source-code-pro, + Menlo, + Monaco, + Consolas, + 'Courier New', + monospace; +} + +.tooltips { + background: #fff; + box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2); + border-radius: 4px; + padding: 28px 24px 24px; +} + +.tooltips-dark { + border-radius: 3px; + background-color: rgba(0, 0, 0, 0.8); + border-color: transparent; + padding: 4px 8px; + color: #fff; + line-height: 18px; + font-size: 12px; + max-width: 240px; + word-wrap: break-word; + + // override tooltip-arrow + .tooltip-arrow[data-placement*='bottom'] { + margin-top: -0.25rem; + } + + .tooltip-arrow[data-placement*='bottom']::before { + border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent; + border-width: 0 0.3rem 0.3rem 0.3rem; + position: absolute; + top: 0; + } + + .tooltip-arrow[data-placement*='bottom']::after { + border-color: transparent transparent rgba(0, 0, 0, 0.8) transparent; + // border-color: rgba(0, 0, 0, 0.8); + border-width: 0 0.3rem 0.3rem 0.3rem; + } +} + +.no-line-break { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.message-wrapper { + font-size: 14px; + line-height: 22px; + + &-title { + font-weight: 900; + margin: 3.6px 0 4px; + } + + &-manipulation { + cursor: pointer; + color: #2b65ff; + } +} + +/* overrides (global) */ + +//primary button background colors +.new-fc-one-btn-primary { + background: @primary-color; + + &:hover { + background: @primary-hover-color; + } + + &:active { + background: @primary-active-color; + } + + &-disabled { + background: #d9e6ff; + + &:hover, + &:active { + background: #d9e6ff; + } + } +} + +// Modal titles +.new-fc-one-modal-title { + // prettier-ignore + font-family: + 'PingFangSC-Medium', + 'Microsoft YaHei', + '微软雅黑', + Arial, + sans-serif; + font-weight: bold; + font-size: 16px; +} + +// drawers, e.g. metadata-configs vertex/edge types +.new-fc-one-drawer-wrapper-body-small .new-fc-one-drawer-title { + font-size: 16px; +} + +.new-fc-one-drawer-close { + top: 28px; +} + +// z-index input errorlayer in Drawer should be higher +// prettier-ignore +.new-fc-one-drawer-content-wrapper .new-fc-one-input-error.new-fc-one-input-error-layer { + z-index: 1041; +} + +// also z-index is invalid if parent node has position: relative +.new-fc-one-drawer-content-wrapper .new-fc-one-input-all-container { + position: absolute; +} + +// Steps process style +.new-fc-one-steps-item-process .new-fc-one-steps-item-icon { + background: @primary-color; +} + +// checked-color +.new-fc-one-switch-checked { + background: @primary-color; + + &:hover { + background: @primary-hover-color; + } +} + +// text in +.new-fc-one-switch-inner { + margin-right: 0; +} + +.new-fc-one-switch-checked .new-fc-one-switch-inner { + margin-left: 0; +} + +// override radio button primary color +.new-fc-one-radio-button-wrapper-checked { + border: 1px solid @primary-color; + background-color: @primary-color; + color: #fff; + + &:hover { + border: 1px solid @primary-hover-color; + background-color: @primary-hover-color; + color: #fff; + } +} + +// hovered color +.new-fc-one-menu-horizontal-box .new-fc-one-menu-item-selected:hover { + color: @primary-hover-color; + border-color: @primary-hover-color; +} + +//
th checkbox color +.new-fc-one-checkbox-wrapper .new-fc-one-checkbox-indeterminate .new-fc-one-checkbox-inner { + background-color: #2b65ff; +} + +.new-fc-one-table-thead > tr > th:first-of-type { + padding: 12px 16px 12px 20px; +} + +// could be a bug where container style is display: none +.new-fc-one-message { + display: block !important; +} + +// proper line break +.new-fc-one-message-container-content { + word-break: break-word; +} + +// +.new-fc-one-breadcrumb-link { + color: #2b65ff; +} + +// +.new-fc-one-modal-body { + overflow-y: auto !important; +} + +// menu center +.data-analyze-sidebar .ant-menu.ant-menu-inline-collapsed > .ant-menu-item { + padding: 0 12px; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/index.tsx b/hugegraph-hubble/hubble-fe-old(legacy)/src/index.tsx new file mode 100644 index 000000000..2c6b3b7c8 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/index.tsx @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import ReactDOM from 'react-dom'; +import './index.less'; +import App from './components/App'; +import './i18n'; +import { ConfigProvider } from 'antd'; +import zhCN from 'antd/lib/locale/zh_CN'; +import enUS from 'antd/lib/locale/en_US'; + +// UI component has built-in text internationalization, +// such as confirmation, cancellation, etc +const languageType = + localStorage.getItem('languageType') === 'en-US' ? enUS : zhCN; +ReactDOM.render( + + + , + document.getElementById('root') +); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/react-app-env.d.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/react-app-env.d.ts new file mode 100644 index 000000000..4724ca7e0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/react-app-env.d.ts @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +/// diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/asyncTasksStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/asyncTasksStore.ts new file mode 100644 index 000000000..4e0675c19 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/asyncTasksStore.ts @@ -0,0 +1,230 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action, flow } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; + +import { initErrorInfo, initRequestStatus } from '../factory/asyncTasksStore'; +import { checkIfLocalNetworkOffline } from '../utils'; + +import { baseUrl, responseData } from '../types/common'; +import type { + AsyncTask, + AsyncTaskListResponse +} from '../types/GraphManagementStore/asyncTasksStore'; + +export class AsyncTasksStore { + @observable requestStatus = initRequestStatus(); + @observable errorInfo = initErrorInfo(); + + @observable currentId: number | null = null; + @observable searchWords = ''; + @observable abortingId = NaN; + + @observable.shallow asyncTasksPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + // searched results rather than initial fetched result + @observable.shallow isSearched = { + status: false, + value: '' + }; + + @observable.shallow filterOptions = { + type: '', + status: '' + }; + + @observable.ref asyncTaskList: AsyncTask[] = []; + @observable.ref singleAsyncTask: AsyncTask | null = null; + + @action + setCurrentId(id: number) { + this.currentId = id; + } + + @action + setAbortingId(id: number) { + this.abortingId = id; + } + + @action + mutateSearchWords(word: string) { + this.searchWords = word; + } + + @action + mutateFilterOptions(category: 'type' | 'status', value: string) { + this.filterOptions[category] = value; + } + + @action + mutateAsyncTasksPageNumber(pageNumber: number) { + this.asyncTasksPageConfig.pageNumber = pageNumber; + } + + @action + switchSearchedStatus(isSearched: boolean) { + this.isSearched.status = isSearched; + + isSearched + ? (this.isSearched.value = this.searchWords) + : (this.isSearched.value = ''); + } + + @action + dispose() { + this.requestStatus = initRequestStatus(); + this.errorInfo = initErrorInfo(); + this.currentId = null; + this.searchWords = ''; + this.abortingId = NaN; + this.asyncTasksPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + this.isSearched = { + status: false, + value: '' + }; + this.filterOptions = { + type: '', + status: '' + }; + this.asyncTaskList = []; + this.singleAsyncTask = null; + } + + fetchAsyncTaskList = flow(function* fetchAsyncTaskList( + this: AsyncTasksStore + ) { + this.requestStatus.fetchAsyncTaskList = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.currentId}/async-tasks?page_no=${ + this.asyncTasksPageConfig.pageNumber + }&page_size=10&type=${ + this.filterOptions.type + }&status=${this.filterOptions.status.toUpperCase()}` + + (this.isSearched.status && this.searchWords !== '' + ? `&content=${this.searchWords}` + : '') + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchAsyncTaskList.code = result.data.status; + throw new Error(result.data.message); + } + + this.asyncTaskList = result.data.data.records; + this.asyncTasksPageConfig.pageTotal = result.data.data.total; + this.requestStatus.fetchAsyncTaskList = 'success'; + } catch (error) { + this.requestStatus.fetchAsyncTaskList = 'failed'; + this.errorInfo.fetchAsyncTaskList.message = error.message; + } + }); + + fetchAsyncTask = flow(function* fetchAsyncTask( + this: AsyncTasksStore, + id: number + ) { + this.requestStatus.fetchAsyncTask = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.currentId}/async-tasks/${id}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchAsyncTask.code = result.data.status; + throw new Error(result.data.message); + } + + this.singleAsyncTask = result.data.data; + this.requestStatus.fetchAsyncTask = 'success'; + } catch (error) { + this.requestStatus.fetchAsyncTask = 'failed'; + this.errorInfo.fetchAsyncTask.message = error.message; + } + }); + + deleteAsyncTask = flow(function* deleteAsyncTask( + this: AsyncTasksStore, + selectedTaskIds: number[] + ) { + this.requestStatus.deleteAsyncTask = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .delete>( + `${baseUrl}/${this.currentId}/async-tasks?` + + selectedTaskIds.map((id) => 'ids=' + id).join('&') + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.deleteAsyncTask.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.deleteAsyncTask = 'success'; + } catch (error) { + this.requestStatus.deleteAsyncTask = 'failed'; + this.errorInfo.deleteAsyncTask.message = error.message; + } + }); + + abortAsyncTask = flow(function* abortAsyncTask( + this: AsyncTasksStore, + id: number + ) { + this.requestStatus.abortAsyncTask = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.currentId}/async-tasks/cancel/${id}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.abortAsyncTask.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.abortAsyncTask = 'success'; + } catch (error) { + this.requestStatus.abortAsyncTask = 'failed'; + this.errorInfo.abortAsyncTask.message = error.message; + } + }); +} + +export default createContext(new AsyncTasksStore()); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts new file mode 100644 index 000000000..2325c11f0 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataAnalyzeStore/algorithmAnalyzerStore.ts @@ -0,0 +1,1901 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { DataAnalyzeStore } from './dataAnalyzeStore'; +import { observable, action, computed } from 'mobx'; +import { isEmpty, remove, isEqual, isUndefined, flatten } from 'lodash-es'; +import { v4 } from 'uuid'; +import isInt from 'validator/lib/isInt'; + +import { + initializeRequestStatus, + initializeErrorInfo, + createLoopDetectionDefaultParams, + createValidateLoopDetectionParamsErrorMessage, + createFocusDetectionDefaultParams, + createValidateFocusDetectionParamsErrorMessage, + createShortestPathDefaultParams, + createValidateShortestPathParamsErrorMessage, + createShortestPathAllDefaultParams, + createValidateShortestPathAllParamsErrorMessage, + createAllPathDefaultParams, + createValidateAllPathParamsErrorMessage, + createModelSimilarityDefaultParams, + createValidateModelSimilarParamsErrorMessage, + createNeighborRankDefaultParams, + createValidateNeighborRankErrorMessage, + createKStepNeighborDefaultParams, + createValidateKStepNeighborParamsErrorMessage, + createKHopDefaultParams, + createValidateKHopParamsErrorMessage, + createRadiographicInspectionDefaultParams, + createValidateRadiographicInspectionParamsErrorMessage, + createSameNeighborDefaultParams, + createValidateSameNeighborParamsErrorMessage, + createWeightedShortestPathDefaultParams, + createValidateWeightedShortestPathParamsErrorMessage, + createSingleSourceWeightedShortestPathDefaultParams, + createValidateSingleSourceWeightedShortestPathParamsErrorMessage, + createJaccardDefaultParams, + createValidateJaccardParamsErrorMessage, + createPersonalRankDefaultParams, + createValidatePersonalRankParamsErrorMessage, + createCustomPathDefaultParams, + createValidateCustomPathParamsErrorMessage +} from '../../factory/dataAnalyzeStore/algorithmStore'; +import i18next from '../../../i18n'; +import { isGtNegativeOneButZero } from '../../utils'; + +import type { dict } from '../../types/common'; +import type { + ShortestPathAlgorithmParams, + LoopDetectionParams, + FocusDetectionParams, + ShortestPathAllAlgorithmParams, + AllPathAlgorithmParams, + ModelSimilarityParams, + NeighborRankParams, + NeighborRankRule, + KStepNeighbor, + KHop, + RadiographicInspection, + SameNeighbor, + WeightedShortestPath, + SingleSourceWeightedShortestPath, + Jaccard, + PersonalRank, + CustomPathParams, + CustomPathRule +} from '../../types/GraphManagementStore/dataAnalyzeStore'; +import isFloat from 'validator/lib/isFloat'; + +export class AlgorithmAnalyzerStore { + dataAnalyzeStore: DataAnalyzeStore; + + constructor(dataAnalyzeStore: DataAnalyzeStore) { + this.dataAnalyzeStore = dataAnalyzeStore; + } + + @observable requestStatus = initializeRequestStatus(); + @observable errorInfo = initializeErrorInfo(); + + @observable isCollapse = false; + @observable currentAlgorithm = ''; + + @observable + loopDetectionParams: LoopDetectionParams = createLoopDetectionDefaultParams(); + + @observable + validateLoopDetectionParamsErrorMessage: any = createValidateLoopDetectionParamsErrorMessage(); + + @observable + focusDetectionParams: FocusDetectionParams = createFocusDetectionDefaultParams(); + + @observable + validateFocusDetectionParamsErrorMessage: any = createValidateFocusDetectionParamsErrorMessage(); + + @observable + shortestPathAlgorithmParams: ShortestPathAlgorithmParams = createShortestPathDefaultParams(); + + @observable + validateShortestPathParamsErrorMessage: ShortestPathAlgorithmParams = createValidateShortestPathParamsErrorMessage(); + + @observable + shortestPathAllParams: ShortestPathAllAlgorithmParams = createShortestPathAllDefaultParams(); + + @observable + validateShortestPathAllParamsErrorMessage: ShortestPathAllAlgorithmParams = createValidateShortestPathAllParamsErrorMessage(); + + @observable + allPathParams: AllPathAlgorithmParams = createAllPathDefaultParams(); + + @observable + validateAllPathParamsErrorMessage: AllPathAlgorithmParams = createValidateAllPathParamsErrorMessage(); + + @observable + modelSimilarityParams: ModelSimilarityParams = createModelSimilarityDefaultParams(); + + @observable + validateModelSimilartiyParamsErrorMessage: dict< + string + > = createValidateModelSimilarParamsErrorMessage(); + + @observable + neighborRankParams: NeighborRankParams = createNeighborRankDefaultParams(); + + @observable + validateNeighborRankParamsParamsErrorMessage = createValidateNeighborRankErrorMessage(); + + @observable + kStepNeighborParams: KStepNeighbor = createKStepNeighborDefaultParams(); + + @observable + validateKStepNeighborParamsErrorMessage = createValidateKStepNeighborParamsErrorMessage(); + + @observable + kHopParams: KHop = createKHopDefaultParams(); + + @observable + validateKHopParamsErrorMessage = createValidateKHopParamsErrorMessage(); + + @observable + customPathParams: CustomPathParams = createCustomPathDefaultParams(); + + @observable + validateCustomPathParmasErrorMessage = createValidateCustomPathParamsErrorMessage(); + + @observable + radiographicInspectionParams: RadiographicInspection = createRadiographicInspectionDefaultParams(); + + @observable + validateRadiographicInspectionParamsErrorMessage = createValidateRadiographicInspectionParamsErrorMessage(); + + @observable + sameNeighborParams: SameNeighbor = createSameNeighborDefaultParams(); + + @observable + validateSameNeighborParamsErrorMessage: SameNeighbor = createValidateSameNeighborParamsErrorMessage(); + + @observable + weightedShortestPathParams: WeightedShortestPath = createWeightedShortestPathDefaultParams(); + + @observable + validateWeightedShortestPathParamsErrorMessage = createValidateWeightedShortestPathParamsErrorMessage(); + + @observable + singleSourceWeightedShortestPathParams: SingleSourceWeightedShortestPath = createSingleSourceWeightedShortestPathDefaultParams(); + + @observable + validateSingleSourceWeightedShortestPathParamsErrorMessage = createValidateSingleSourceWeightedShortestPathParamsErrorMessage(); + + @observable + jaccardParams: Jaccard = createJaccardDefaultParams(); + + @observable + validateJaccardParamsErrorMessage = createValidateJaccardParamsErrorMessage(); + + @observable + personalRankParams: PersonalRank = createPersonalRankDefaultParams(); + + @observable + validatePersonalRankErrorMessage = createValidatePersonalRankParamsErrorMessage(); + + @computed get allPropertyIndexProperty() { + return flatten( + this.dataAnalyzeStore.propertyIndexes.map(({ fields }) => fields) + ); + } + + @computed get currentAlgorithmParams() { + switch (this.currentAlgorithm) { + case 'loop-detection': + return this.loopDetectionParams; + case 'focus-detection': + return this.focusDetectionParams; + case 'shortest-path': + return this.shortestPathAlgorithmParams; + case 'shortest-path-all': + return this.shortestPathAllParams; + case 'all-path': + return this.allPathParams; + case 'model-similarity': + return this.modelSimilarityParams; + case 'neighbor-rank': + return this.neighborRankParams; + case 'k-step-neighbor': + return this.kStepNeighborParams; + case 'k-hop': + return this.kHopParams; + case 'custom-path': + return this.customPathParams; + case 'radiographic-inspection': + return this.loopDetectionParams; + case 'same-neighbor': + return this.sameNeighborParams; + case 'weighted-shortest-path': + return this.weightedShortestPathParams; + case 'single-source-weighted-shortest-path': + return this.singleSourceWeightedShortestPathParams; + case 'jaccard': + return this.jaccardParams; + case 'personal-rank': + return this.personalRankParams; + } + } + + @action + switchCollapse(flag: boolean) { + this.isCollapse = flag; + } + + @action + changeCurrentAlgorithm(algorithm: string) { + this.currentAlgorithm = algorithm; + } + + @action + mutateLoopDetectionParams( + key: T, + value: LoopDetectionParams[T] + ) { + this.loopDetectionParams[key] = value; + } + + @action + validateLoopDetectionParams(key: T) { + const value = this.loopDetectionParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.loop-detection.validations.no-empty' + ); + + return; + } + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.loop-detection.validations.no-empty' + ); + + return; + } + + if (!isInt(value as string, { min: 1 })) { + this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.loop-detection.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.loop-detection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.loop-detection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateLoopDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.loop-detection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateLoopDetectionParamsErrorMessage[key] = ''; + } + + @action + resetLoopDetectionParams() { + this.loopDetectionParams = createLoopDetectionDefaultParams(); + this.validateLoopDetectionParamsErrorMessage = createValidateLoopDetectionParamsErrorMessage(); + } + + @action + mutateFocusDetectionParams( + key: T, + value: FocusDetectionParams[T] + ) { + this.focusDetectionParams[key] = value; + } + + @action + validateFocusDetectionParams(key: T) { + const value = this.focusDetectionParams[key]; + + switch (key) { + case 'source': + case 'target': + if (isEmpty(value)) { + this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.focus-detection.validations.no-empty' + ); + + return; + } + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.focus-detection.validations.no-empty' + ); + + return; + } + + if (!isInt(value, { min: 1 })) { + this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.focus-detection.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.focus-detection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.focus-detection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateFocusDetectionParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.focus-detection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateFocusDetectionParamsErrorMessage[key] = ''; + } + + @action + resetFocusDetectionParams() { + this.focusDetectionParams = createFocusDetectionDefaultParams(); + this.validateFocusDetectionParamsErrorMessage = createValidateFocusDetectionParamsErrorMessage(); + } + + @action + mutateShortestPathParams( + key: T, + value: ShortestPathAlgorithmParams[T] + ) { + this.shortestPathAlgorithmParams[key] = value; + } + + @action + validateShortestPathParams( + key: T + ) { + const value = this.shortestPathAlgorithmParams[key]; + + switch (key) { + case 'source': + case 'target': + if (isEmpty(value)) { + this.validateShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.no-empty' + ); + + return; + } + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.no-empty' + ); + + return; + } + + if (!isInt(value, { min: 1 })) { + this.validateShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'skip_degree': + if (value !== '' && !isInt(value, { min: 0 })) { + this.validateShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.integer-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateShortestPathParamsErrorMessage[key] = ''; + } + + @action + resetShortestPathParams() { + this.shortestPathAlgorithmParams = createShortestPathDefaultParams(); + this.validateShortestPathParamsErrorMessage = createValidateShortestPathParamsErrorMessage(); + } + + @action + mutateShortestPathAllParams( + key: T, + value: ShortestPathAlgorithmParams[T] + ) { + this.shortestPathAllParams[key] = value; + } + + @action + validateShortestPathAllParams( + key: T + ) { + const value = this.shortestPathAllParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.no-empty' + ); + + return; + } + break; + case 'target': + if (isEmpty(value)) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.no-empty' + ); + + return; + } + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.no-empty' + ); + + return; + } + + if (!isInt(value, { min: 1 })) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value)) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value)) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'skip_degree': + if (value !== '' && !isInt(value, { min: 0 })) { + this.validateShortestPathAllParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path-all.validations.integer-only' + ); + + return; + } + } + + this.validateShortestPathAllParamsErrorMessage[key] = ''; + } + + @action + resetShortestPathAllParams() { + this.shortestPathAllParams = createShortestPathAllDefaultParams(); + this.validateShortestPathAllParamsErrorMessage = createValidateShortestPathAllParamsErrorMessage(); + } + + @action + mutateAllPathParams( + key: T, + value: AllPathAlgorithmParams[T] + ) { + this.allPathParams[key] = value; + } + + @action + validateAllPathParams(key: T) { + const value = this.allPathParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.all-path.validations.no-empty' + ); + + return; + } + break; + case 'target': + if (isEmpty(value)) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.all-path.validations.no-empty' + ); + + return; + } + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.all-path.validations.no-empty' + ); + + return; + } + + if (!isInt(value, { min: 1 })) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.all-path.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value)) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.all-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value)) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value)) { + this.validateAllPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateAllPathParamsErrorMessage[key] = ''; + } + + @action + resetAllPathParams() { + this.allPathParams = createAllPathDefaultParams(); + this.validateAllPathParamsErrorMessage = createValidateAllPathParamsErrorMessage(); + } + + @action + addModelSimilarityVertexProperty() { + this.modelSimilarityParams.vertexProperty.push(['', '']); + } + + @action + editModelSimilarityVertexProperty( + index: number, + type: 'key' | 'value', + value: string + ) { + if (type === 'key') { + this.modelSimilarityParams.vertexProperty[index][0] = value; + } else { + this.modelSimilarityParams.vertexProperty[index][1] = value; + } + } + + @action + removeModelSimilarityVertexProperty(propertyIndex: number) { + remove( + this.modelSimilarityParams.vertexProperty, + (_, index) => index === propertyIndex + ); + } + + @action + mutateModelSimilarityParams( + key: T, + value: ModelSimilarityParams[T] + ) { + this.modelSimilarityParams[key] = value; + } + + @action + validateModelSimilarityParams(key: T) { + const value = this.modelSimilarityParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' + ); + + return; + } + + break; + case 'least_neighbor': + if (isEmpty(value)) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' + ); + + return; + } + + if (!isInt(value as string, { min: 1 })) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.postive-integer-only' + ); + + return; + } + + break; + case 'similarity': + if (isEmpty(value)) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' + ); + + return; + } + + if ( + Object.is(Number(value), NaN) || + Number(value) > 1 || + Number(value) <= 0 + ) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.similarity' + ); + + return; + } + + break; + case 'max_similar': + if (value !== '' && !isInt(value as string, { min: 0 })) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.integer-only' + ); + + return; + } + + break; + case 'least_similar': + if (value !== '' && !isInt(value as string, { min: 1 })) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.postive-integer-only' + ); + + return; + } + + break; + case 'least_property_number': + if ( + !isEmpty(this.modelSimilarityParams.property_filter) && + isEmpty(value) + ) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.no-empty' + ); + + return; + } + + if (value !== '' && !isInt(value as string, { min: 2 })) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.integer-gt-1' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validateModelSimilartiyParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.model-similarity.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateModelSimilartiyParamsErrorMessage[key] = ''; + } + + @action + resetModelSimilarityParams() { + this.modelSimilarityParams = createModelSimilarityDefaultParams(); + this.validateModelSimilartiyParamsErrorMessage = createValidateModelSimilarParamsErrorMessage(); + } + + @action + switchModelSimilarityMethod(method: string) { + this.modelSimilarityParams.method = method; + + if (method === 'id') { + this.modelSimilarityParams.vertexType = ''; + this.modelSimilarityParams.vertexProperty = [['', '']]; + this.validateModelSimilartiyParamsErrorMessage.vertexType = ''; + this.validateModelSimilartiyParamsErrorMessage.vertexProperty = ''; + } else { + this.modelSimilarityParams.source = ''; + this.validateModelSimilartiyParamsErrorMessage.source = ''; + } + } + + @action + addNeighborRankRule() { + this.neighborRankParams.steps.push({ + uuid: v4(), + direction: 'BOTH', + labels: ['__all__'], + degree: '10000', + top: '100' + }); + + // add error message together + this.addValidateNeighborRankRule(); + } + + @action + addValidateNeighborRankRule() { + this.validateNeighborRankParamsParamsErrorMessage.steps.push({ + uuid: '', + direction: '', + labels: '', + degree: '', + top: '' + }); + } + + @action + removeNeighborRankRule(ruleIndex: number) { + remove(this.neighborRankParams.steps, (_, index) => index === ruleIndex); + // remove error message together + this.removeValidateNeighborRankRule(ruleIndex); + } + + @action + removeValidateNeighborRankRule(ruleIndex: number) { + remove( + this.validateNeighborRankParamsParamsErrorMessage.steps, + (_, index) => index === ruleIndex + ); + } + + @action + mutateNeighborRankParams( + key: T, + value: NeighborRankParams[T] + ) { + this.neighborRankParams[key] = value; + } + + @action + mutateNeighborRankRuleParams( + key: T, + value: NeighborRankRule[T], + index: number + ) { + this.neighborRankParams.steps[index][key] = value; + } + + @action + validateNeighborRankParams(key: T) { + const value = this.neighborRankParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.no-empty' + ); + + return; + } + + this.validateNeighborRankParamsParamsErrorMessage.source = ''; + break; + case 'alpha': + if (isEmpty(value)) { + this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.no-empty' + ); + + return; + } + + if ( + Object.is(Number(value), NaN) || + Number(value) > 1 || + Number(value) <= 0 + ) { + this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.range' + ); + + return; + } + + this.validateNeighborRankParamsParamsErrorMessage.alpha = ''; + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateNeighborRankParamsParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + this.validateNeighborRankParamsParamsErrorMessage.capacity = ''; + break; + } + } + + @action + validateNeighborRankRules( + key: T, + ruleIndex: number + ) { + const value = this.neighborRankParams.steps[ruleIndex][key]; + + switch (key) { + case 'degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateNeighborRankParamsParamsErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' + ); + + return; + } + break; + case 'top': + if (!isEmpty(value) && !isInt(value as string, { min: 0, max: 999 })) { + this.validateNeighborRankParamsParamsErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.integer-only-lt-1000' + ); + + return; + } + break; + default: + return; + } + + this.validateNeighborRankParamsParamsErrorMessage.steps[ruleIndex][key] = + ''; + } + + @action + resetNeighborRankParams() { + this.neighborRankParams = createNeighborRankDefaultParams(); + this.validateNeighborRankParamsParamsErrorMessage = createValidateNeighborRankErrorMessage(); + } + + @action + mutateKStepNeighborParams( + key: T, + value: KStepNeighbor[T] + ) { + this.kStepNeighborParams[key] = value; + } + + @action + validateKStepNeighborParams(key: T) { + const value = this.kStepNeighborParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-step-neighbor.validations.no-empty' + ); + + return; + } + + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-step-neighbor.validations.no-empty' + ); + + return; + } + + if (!isInt(value, { min: 1 })) { + this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-step-neighbor.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value)) { + this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-step-neighbor.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value)) { + this.validateKStepNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-step-neighbor.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateKStepNeighborParamsErrorMessage[key] = ''; + } + + @action + resetKStepNeighborParams() { + this.kStepNeighborParams = createKStepNeighborDefaultParams(); + this.validateKStepNeighborParamsErrorMessage = createValidateKStepNeighborParamsErrorMessage(); + } + + @action + mutateKHopParams(key: T, value: KHop[T]) { + this.kHopParams[key] = value; + } + + @action + validateKHopParams(key: T) { + const value = this.kHopParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateKHopParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-hop.validations.no-empty' + ); + + return; + } + + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateKHopParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-hop.validations.no-empty' + ); + + return; + } + + if (!isInt(value as string, { min: 1 })) { + this.validateKHopParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-hop.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateKHopParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-hop.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validateKHopParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-hop.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateKHopParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.k-hop.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateKHopParamsErrorMessage[key] = ''; + } + + @action + resetKHopParams() { + this.kHopParams = createKHopDefaultParams(); + this.validateKHopParamsErrorMessage = createValidateKHopParamsErrorMessage(); + } + + @action + addCustomPathRule() { + this.customPathParams.steps.push({ + uuid: v4(), + direction: 'BOTH', + labels: this.dataAnalyzeStore.edgeTypes.map(({ name }) => name), + weight_by: '', + default_weight: '', + properties: [['', '']], + degree: '10000', + sample: '100' + }); + + // add error message together + this.validateCustomPathParmasErrorMessage.steps.push({ + uuid: '', + direction: '', + labels: '', + weight_by: '', + default_weight: '', + properties: '', + degree: '', + sample: '' + }); + } + + @action + removeCustomPathRule(ruleIndex: number) { + remove(this.customPathParams.steps, (_, index) => index === ruleIndex); + // remove error message together + remove( + this.validateCustomPathParmasErrorMessage.steps, + (_, index) => index === ruleIndex + ); + } + + @action + addCustomPathVertexProperty() { + this.customPathParams.vertexProperty.push(['', '']); + } + + @action + removeCustomPathVertexProperty(propertyIndex: number) { + remove( + this.customPathParams.vertexProperty, + (_, index) => index === propertyIndex + ); + } + + @action + addCustomPathRuleProperty(ruleIndex: number) { + this.customPathParams.steps[ruleIndex].properties.push(['', '']); + } + + @action + removeCustomPathRuleProperty(ruleIndex: number, propertyIndex: number) { + remove( + this.customPathParams.steps[ruleIndex].properties, + (_, index) => index === propertyIndex + ); + } + + @action + mutateCustomPathParams( + key: T, + value: CustomPathParams[T] + ) { + this.customPathParams[key] = value; + } + + @action + mutateCustomPathRuleParams( + key: T, + value: CustomPathRule[T], + index: number + ) { + this.customPathParams.steps[index][key] = value; + } + + @action + validateCustomPathParams(key: T) { + const value = this.customPathParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateCustomPathParmasErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.custom-path.validations.no-empty' + ); + + return; + } + + this.validateCustomPathParmasErrorMessage.source = ''; + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateCustomPathParmasErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.custom-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + this.validateCustomPathParmasErrorMessage.capacity = ''; + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validateCustomPathParmasErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.custom-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + this.validateCustomPathParmasErrorMessage.capacity = ''; + break; + } + } + + @action + validateCustomPathRules( + key: T, + ruleIndex: number + ) { + const value = this.customPathParams.steps[ruleIndex][key]; + + switch (key) { + case 'properties': + if (isEmpty(value)) { + this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.custom-path.validations.no-empty' + ); + + return; + } + + break; + case 'degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' + ); + + return; + } + break; + case 'sample': + if (!isGtNegativeOneButZero(value as string)) { + this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.neighbor-rank.validations.positive-integer-or-negative-one-only' + ); + + return; + } + break; + case 'default_weight': + if (isEmpty(value)) { + this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.custom-path.validations.no-empty' + ); + + return; + } + + if (!isFloat(value as string)) { + this.validateCustomPathParmasErrorMessage.steps[ruleIndex][ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.custom-path.validations.input-number' + ); + + return; + } + + break; + default: + return; + } + + this.validateCustomPathParmasErrorMessage.steps[ruleIndex][key] = ''; + } + + @action + switchCustomPathMethod(method: string) { + this.customPathParams.method = method; + + if (method === 'id') { + this.customPathParams.vertexType = ''; + this.customPathParams.vertexProperty = [['', '']]; + this.validateCustomPathParmasErrorMessage.vertexType = ''; + this.validateCustomPathParmasErrorMessage.vertexProperty = ''; + } else { + this.customPathParams.source = ''; + this.validateCustomPathParmasErrorMessage.source = ''; + } + } + + @action + resetCustomPathParams() { + this.customPathParams = createCustomPathDefaultParams(); + + // manually assign step edge values + this.customPathParams.steps[0].labels = this.dataAnalyzeStore.edgeTypes.map( + ({ name }) => name + ); + this.validateCustomPathParmasErrorMessage = createValidateCustomPathParamsErrorMessage(); + } + + @action + mutateRadiographicInspectionParams( + key: T, + value: RadiographicInspection[T] + ) { + this.radiographicInspectionParams[key] = value; + } + + @action + validateRadiographicInspectionParams( + key: T + ) { + const value = this.radiographicInspectionParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateRadiographicInspectionParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.radiographic-inspection.validations.no-empty' + ); + + return; + } + + break; + case 'max_depth': + if (isEmpty(value)) { + this.validateRadiographicInspectionParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.radiographic-inspection.validations.no-empty' + ); + + return; + } + + if (!isInt(value, { min: 1 })) { + this.validateRadiographicInspectionParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.radiographic-inspection.validations.postive-integer-only' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value)) { + this.validateRadiographicInspectionParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.radiographic-inspection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value)) { + this.validateRadiographicInspectionParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.radiographic-inspection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value)) { + this.validateRadiographicInspectionParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.radiographic-inspection.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateRadiographicInspectionParamsErrorMessage[key] = ''; + } + + @action + resetRadiographicInspectionParams() { + this.radiographicInspectionParams = createRadiographicInspectionDefaultParams(); + this.validateRadiographicInspectionParamsErrorMessage = createValidateRadiographicInspectionParamsErrorMessage(); + } + + @action + mutateSameNeighborParams( + key: T, + value: SameNeighbor[T] + ) { + this.sameNeighborParams[key] = value; + } + + @action + validateSameNeighborParams(key: T) { + const value = this.sameNeighborParams[key]; + + switch (key) { + case 'vertex': + if (isEmpty(value)) { + this.validateSameNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.same-neighbor.validations.no-empty' + ); + + return; + } + + if (value === this.sameNeighborParams.other) { + this.validateSameNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.same-neighbor.validations.no-same-value-with-other' + ); + + return; + } + + break; + case 'other': + if (isEmpty(value)) { + this.validateSameNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.same-neighbor.validations.no-empty' + ); + + return; + } + + if (value === this.sameNeighborParams.vertex) { + this.validateSameNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.same-neighbor.validations.no-same-value-with-vertex' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value)) { + this.validateSameNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.same-neighbor.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value)) { + this.validateSameNeighborParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.same-neighbor.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateSameNeighborParamsErrorMessage[key] = ''; + } + + @action + resetSameNeighborParams() { + this.sameNeighborParams = createSameNeighborDefaultParams(); + this.validateSameNeighborParamsErrorMessage = createValidateSameNeighborParamsErrorMessage(); + } + + @action + mutateWeightedShortestPathParams( + key: T, + value: WeightedShortestPath[T] + ) { + this.weightedShortestPathParams[key] = value; + } + + @action + validateWeightedShortestPathParams( + key: T + ) { + const value = this.weightedShortestPathParams[key]; + + switch (key) { + case 'source': + case 'target': + if (isEmpty(value)) { + this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.weighted-shortest-path.validations.no-empty' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.weighted-shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'skip_degree': + if (value !== '' && !isInt(value as string, { min: 0 })) { + this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.weighted-shortest-path.validations.integer-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateWeightedShortestPathParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.weighted-shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateWeightedShortestPathParamsErrorMessage[key] = ''; + } + + @action + resetWeightedShortestPathParams() { + this.weightedShortestPathParams = createWeightedShortestPathDefaultParams(); + this.validateWeightedShortestPathParamsErrorMessage = createValidateWeightedShortestPathParamsErrorMessage(); + } + + @action + mutateSingleSourceWeightedShortestPathParams< + T extends keyof SingleSourceWeightedShortestPath + >(key: T, value: SingleSourceWeightedShortestPath[T]) { + this.singleSourceWeightedShortestPathParams[key] = value; + } + + @action + validateSingleSourceWeightedShortestPathParams< + T extends keyof SingleSourceWeightedShortestPath + >(key: T) { + const value = this.singleSourceWeightedShortestPathParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.no-empty' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'skip_degree': + if (value !== '' && !isInt(value as string, { min: 0 })) { + this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.integer-only' + ); + + return; + } + + break; + case 'capacity': + if (!isGtNegativeOneButZero(value as string)) { + this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validateSingleSourceWeightedShortestPathParamsErrorMessage[ + key + ] = i18next.t( + 'data-analyze.algorithm-forms.single-source-weighted-shortest-path.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateSingleSourceWeightedShortestPathParamsErrorMessage[key] = ''; + } + + @action + resetSingleSourceWeightedShortestPathParams() { + this.singleSourceWeightedShortestPathParams = createSingleSourceWeightedShortestPathDefaultParams(); + this.validateSingleSourceWeightedShortestPathParamsErrorMessage = createValidateSingleSourceWeightedShortestPathParamsErrorMessage(); + } + + @action + mutateJaccardParams(key: T, value: Jaccard[T]) { + this.jaccardParams[key] = value; + } + + @action + validateJaccardParams(key: T) { + const value = this.jaccardParams[key]; + + switch (key) { + case 'vertex': + if (isEmpty(value)) { + this.validateJaccardParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.jaccard.validations.no-empty' + ); + + return; + } + + if (value === this.jaccardParams.other) { + this.validateJaccardParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.jaccard.validations.no-same-value-with-other' + ); + + return; + } + + break; + case 'other': + if (isEmpty(value)) { + this.validateJaccardParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.jaccard.validations.no-empty' + ); + + return; + } + + if (value === this.jaccardParams.vertex) { + this.validateJaccardParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.jaccard.validations.no-same-value-with-vertex' + ); + + return; + } + + break; + case 'max_degree': + if (!isGtNegativeOneButZero(value)) { + this.validateJaccardParamsErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.jaccard.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validateJaccardParamsErrorMessage[key] = ''; + } + + @action + resetJaccardParams() { + this.jaccardParams = createJaccardDefaultParams(); + this.validateJaccardParamsErrorMessage = createValidateJaccardParamsErrorMessage(); + } + + @action + mutatePersonalRankParams( + key: T, + value: PersonalRank[T] + ) { + this.personalRankParams[key] = value; + } + + @action + validatePersonalRankParams(key: T) { + const value = this.personalRankParams[key]; + + switch (key) { + case 'source': + if (isEmpty(value)) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.no-empty' + ); + + return; + } + + break; + case 'alpha': + if (isEmpty(value)) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.no-empty' + ); + + return; + } + + if ( + Object.is(Number(value), NaN) || + Number(value) > 1 || + Number(value) <= 0 + ) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.alpha-range' + ); + + return; + } + + break; + case 'max_depth': + if (isEmpty(value)) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.no-empty' + ); + + return; + } + + if ( + Object.is(Number(value), NaN) || + Number(value) > 50 || + Number(value) <= 0 + ) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.depth-range' + ); + + return; + } + + break; + case 'degree': + if (!isGtNegativeOneButZero(value as string)) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + case 'limit': + if (!isGtNegativeOneButZero(value as string)) { + this.validatePersonalRankErrorMessage[key] = i18next.t( + 'data-analyze.algorithm-forms.personal-rank.validations.positive-integer-or-negative-one-only' + ); + + return; + } + + break; + } + + this.validatePersonalRankErrorMessage[key] = ''; + } + + @action + resetPersonalRankParams() { + this.personalRankParams = createPersonalRankDefaultParams(); + this.validatePersonalRankErrorMessage = createValidatePersonalRankParamsErrorMessage(); + } + + @action + dispose() { + this.requestStatus = initializeRequestStatus(); + this.errorInfo = initializeErrorInfo(); + this.currentAlgorithm = ''; + + this.resetLoopDetectionParams(); + this.resetFocusDetectionParams(); + this.resetShortestPathParams(); + this.resetShortestPathAllParams(); + this.resetAllPathParams(); + this.resetModelSimilarityParams(); + this.resetNeighborRankParams(); + this.resetKStepNeighborParams(); + this.resetKHopParams(); + this.resetCustomPathParams(); + this.resetRadiographicInspectionParams(); + this.resetSameNeighborParams(); + this.resetWeightedShortestPathParams(); + this.resetSingleSourceWeightedShortestPathParams(); + this.resetJaccardParams(); + this.resetPersonalRankParams(); + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts new file mode 100644 index 000000000..763723830 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore.ts @@ -0,0 +1,2538 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action, flow, computed, runInAction } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { + isUndefined, + cloneDeep, + isEmpty, + remove, + size, + fromPairs, + invert, + flatten, + uniq +} from 'lodash-es'; +import vis from 'vis-network'; +import isInt from 'validator/lib/isInt'; +import isUUID from 'validator/lib/isUUID'; +import i18next from '../../../i18n'; + +import { AlgorithmAnalyzerStore } from './algorithmAnalyzerStore'; +import { + initalizeErrorInfo, + initalizeRequestStatus, + createGraphNode, + createGraphEdge, + createGraphEditableProperties, + createNewGraphDataConfig +} from '../../factory/dataAnalyzeStore/dataAnalyzeStore'; +import { Algorithm } from '../../factory/dataAnalyzeStore/algorithmStore'; +import { + checkIfLocalNetworkOffline, + convertArrayToString, + validateGraphProperty, + vertexRadiusMapping, + edgeWidthMapping +} from '../../utils'; + +import { baseUrl, responseData, dict } from '../../types/common'; +import type { + GraphData, + GraphDataResponse +} from '../../types/GraphManagementStore/graphManagementStore'; +import type { + ColorSchemas, + RuleMap, + FetchColorSchemas, + FetchFilteredPropertyOptions, + NewGraphData, + GraphNode, + GraphEdge, + GraphView, + FetchGraphResponse, + ValueTypes, + AddQueryCollectionParams, + ExecutionLogs, + ExecutionLogsResponse, + FavoriteQuery, + FavoriteQueryResponse, + EditableProperties, + ShortestPathAlgorithmParams, + LoopDetectionParams, + FocusDetectionParams, + ShortestPathAllAlgorithmParams, + AllPathAlgorithmParams, + ModelSimilarityParams, + NeighborRankParams, + NeighborRankRule, + KHop, + RadiographicInspection, + SameNeighbor, + WeightedShortestPath, + SingleSourceWeightedShortestPath, + Jaccard, + PersonalRank, + CustomPathRule, + KStepNeighbor +} from '../../types/GraphManagementStore/dataAnalyzeStore'; +import type { + VertexTypeListResponse, + VertexType, + EdgeType, + MetadataPropertyIndex +} from '../../types/GraphManagementStore/metadataConfigsStore'; +import type { EdgeTypeListResponse } from '../../types/GraphManagementStore/metadataConfigsStore'; +import { + AlgorithmInternalNameMapping, + removeLabelKey, + filterEmptyAlgorightmParams +} from '../../../utils'; + +const ruleMap: RuleMap = { + 大于: 'gt', + 大于等于: 'gte', + 等于: 'eq', + 小于: 'lt', + 小于等于: 'lte', + True: 'eq', + False: 'eq' +}; + +const monthMaps: Record = { + Jan: '01', + Feb: '02', + Mar: '03', + Apr: '04', + May: '05', + Jun: '06', + Jul: '07', + Aug: '08', + Sep: '09', + Oct: '10', + Nov: '11', + Dec: '12' +}; + +export class DataAnalyzeStore { + [key: string]: any; + algorithmAnalyzerStore: AlgorithmAnalyzerStore; + + constructor() { + this.algorithmAnalyzerStore = new AlgorithmAnalyzerStore(this); + } + + @observable currentId: number | null = null; + @observable currentTab = 'gremlin-analyze'; + @observable searchText = ''; + @observable isSidebarExpanded = false; + @observable isLoadingGraph = false; + @observable isGraphLoaded = false; + @observable isFullScreenReuslt = false; + @observable isShowFilterBoard = false; + // right-side drawer + @observable isShowGraphInfo = false; + @observable isClickOnNodeOrEdge = false; + // v1.5.0: gremlin query mode + @observable queryMode: 'query' | 'task' = 'query'; + @observable favoritePopUp = ''; + // whether user selects vertex or edge + @observable graphInfoDataSet = ''; + @observable codeEditorInstance: CodeMirror.Editor | null = null; + @observable codeEditorText = ''; + @observable dynamicAddGraphDataStatus = ''; + @observable favoriteQueriesSortOrder: Record< + 'time' | 'name', + 'desc' | 'asc' | '' + > = { + time: '', + name: '' + }; + + // vis instance + @observable.ref visNetwork: vis.Network | null = null; + @observable.ref visDataSet: Record<'nodes' | 'edges', any> | null = null; + @observable.ref visCurrentCoordinates = { + domX: '', + domY: '', + canvasX: '', + canvasY: '' + }; + + // Mutate this variable to let mobx#reaction fires it's callback and set value for CodeEditor + @observable pulse = false; + + // datas + @observable.ref idList: { id: number; name: string }[] = []; + @observable.ref properties: ValueTypes[] = []; + @observable.ref valueTypes: Record = {}; + @observable.ref vertexTypes: VertexType[] = []; + @observable.ref edgeTypes: EdgeType[] = []; + @observable.ref propertyIndexes: MetadataPropertyIndex[] = []; + @observable.ref colorSchemas: ColorSchemas = {}; + @observable.ref colorList: string[] = []; + @observable.ref colorMappings: Record = {}; + @observable.ref vertexSizeMappings: Record = {}; + @observable.ref vertexWritingMappings: Record = {}; + @observable.ref edgeColorMappings: Record = {}; + @observable.ref edgeWithArrowMappings: Record = {}; + @observable.ref edgeThicknessMappings: Record = {}; + @observable.ref edgeWritingMappings: Record = {}; + @observable.ref + originalGraphData: FetchGraphResponse = {} as FetchGraphResponse; + @observable.ref + graphData: FetchGraphResponse = {} as FetchGraphResponse; + @observable.ref + expandedGraphData: FetchGraphResponse = {} as FetchGraphResponse; + @observable.ref + relatedGraphEdges: string[] = []; + @observable vertexCollection = new Set(); + @observable edgeCollection = new Set(); + @observable.ref executionLogData: ExecutionLogs[] = []; + @observable.ref favoriteQueryData: FavoriteQuery[] = []; + @observable.ref graphDataEdgeTypes: string[] = []; + @observable.ref filteredPropertyOptions: string[] = []; + + // data struct sync to GraphManagementStore + @observable.shallow isSearched = { + status: false, + value: '' + }; + + @observable filteredGraphQueryOptions = { + line: { + type: '', + direction: 'BOTH' + } as Record<'type' | 'direction', string>, + properties: [] as dict[] + }; + + @observable + newGraphNodeConfigs: NewGraphData = createNewGraphDataConfig(); + @observable + newGraphEdgeConfigs: NewGraphData = createNewGraphDataConfig(); + @observable selectedGraphData: GraphNode = createGraphNode(); + @observable + editedSelectedGraphDataProperties = createGraphEditableProperties(); + @observable selectedGraphLinkData: GraphEdge = createGraphEdge(); + // @observable + // editedSelectedGraphEdgeProperties = createGraphEditableProperties(); + @observable.ref rightClickedGraphData: GraphNode = createGraphNode(); + + @observable pageConfigs: { + [key: string]: { + pageNumber: number; + pageTotal: number; + pageSize?: number; + }; + } = { + tableResult: { + pageNumber: 1, + pageTotal: 0 + }, + executionLog: { + pageNumber: 1, + pageSize: 10, + pageTotal: 0 + }, + favoriteQueries: { + pageNumber: 1, + pageSize: 10, + pageTotal: 0 + } + }; + + @observable.shallow requestStatus = initalizeRequestStatus(); + @observable errorInfo = initalizeErrorInfo(); + + @computed get allPropertiesFromEdge() { + return uniq( + flatten( + this.edgeTypes.map(({ properties }) => + properties.map(({ name }) => name) + ) + ) + ); + } + + @computed get graphNodes(): GraphNode[] { + return this.originalGraphData.data.graph_view.vertices.map( + ({ id, label, properties }) => { + // if user create new node or edge in query statement + // rather in schema manager, there's no style in default + const joinedLabel = !isUndefined(this.vertexWritingMappings[label]) + ? this.vertexWritingMappings[label] + .map((field) => (field === '~id' ? id : properties[field])) + .filter((label) => label !== undefined && label !== null) + .join('-') + : id; + + return { + id, + label: + size(joinedLabel) <= 15 + ? joinedLabel + : joinedLabel.slice(0, 15) + '...', + vLabel: label, + value: vertexRadiusMapping[this.vertexSizeMappings[label]], + font: { size: 16 }, + properties, + title: ` +
+
${i18next.t('addition.common.vertex-type')}:
+
${label}
+
+
+
${i18next.t('addition.common.vertex-id')}:
+
${id}
+
+ ${Object.entries(properties) + .map(([key, value]) => { + return `
+
${key}:
+
${convertArrayToString(value)}
+
`; + }) + .join('')} + `, + color: { + background: this.colorMappings[label] || '#5c73e6', + border: this.colorMappings[label] || '#5c73e6', + highlight: { background: '#fb6a02', border: '#fb6a02' }, + hover: { background: '#ec3112', border: '#ec3112' } + }, + // reveal label when zoom to max + scaling: { + label: { + max: Infinity, + maxVisible: Infinity + } + }, + chosen: { + node( + values: any, + id: string, + selected: boolean, + hovering: boolean + ) { + if (hovering || selected) { + values.shadow = true; + values.shadowColor = 'rgba(0, 0, 0, 0.6)'; + values.shadowX = 0; + values.shadowY = 0; + values.shadowSize = 25; + } + + if (selected) { + values.size += 5; + } + } + } + }; + } + ); + } + + @computed get graphEdges(): GraphEdge[] { + return this.originalGraphData.data.graph_view.edges.map( + ({ id, label, source, target, properties }) => { + // if user create new node or edge in query statement + // rather in schema manager, there's no style in default + const joinedLabel = !isUndefined(this.edgeWritingMappings[label]) + ? this.edgeWritingMappings[label] + .map((field) => (field === '~id' ? label : properties[field])) + .join('-') + : label; + + return { + id, + label: + joinedLabel.length <= 15 + ? joinedLabel + : joinedLabel.slice(0, 15) + '...', + properties, + source, + target, + from: source, + to: target, + font: { + size: 16, + strokeWidth: 0, + color: '#666' + }, + arrows: this.edgeWithArrowMappings[label] ? 'to' : '', + color: this.edgeColorMappings[label], + value: edgeWidthMapping[this.edgeThicknessMappings[label]], + title: ` +
+
${i18next.t('addition.common.edge-type')}:
+
${label}
+
+
+
${i18next.t('addition.common.edge-id')}:
+
${id}
+
+ ${Object.entries(properties) + .map(([key, value]) => { + return `
+
${key}:
+
${convertArrayToString(value)}
+
`; + }) + .join('')} + ` + }; + } + ); + } + + @action + setCurrentId(id: number) { + this.currentId = id; + } + + @action + setCurrentTab(tab: string) { + this.currentTab = tab; + } + + @action + switchGraphLoaded(flag: boolean) { + this.isGraphLoaded = flag; + } + + @action + setFullScreenReuslt(flag: boolean) { + this.isFullScreenReuslt = flag; + } + + @action + setQueryMode(mode: 'query' | 'task') { + this.queryMode = mode; + } + + @action + setDynamicAddGraphDataStatus(status: string) { + this.dynamicAddGraphDataStatus = status; + } + + @action + setNewGraphDataConfig( + type: 'vertex' | 'edge', + key: T, + value: NewGraphData[T] + ) { + if (type === 'vertex') { + this.newGraphNodeConfigs[key] = value; + } else { + this.newGraphEdgeConfigs[key] = value; + } + } + + @action + setNewGraphDataConfigProperties( + type: 'vertex' | 'edge', + nullable: 'nullable' | 'nonNullable', + key: string, + value: string + ) { + if (type === 'vertex') { + if (nullable === 'nullable') { + this.newGraphNodeConfigs.properties.nullable.set(key, value); + } else { + this.newGraphNodeConfigs.properties.nonNullable.set(key, value); + } + } else { + if (nullable === 'nullable') { + this.newGraphEdgeConfigs.properties.nullable.set(key, value); + } else { + this.newGraphEdgeConfigs.properties.nonNullable.set(key, value); + } + } + } + + @action + syncNewGraphDataProperties(type: 'vertex' | 'edge') { + const config = + type === 'vertex' ? this.newGraphNodeConfigs : this.newGraphEdgeConfigs; + config.properties.nonNullable.clear(); + config.properties.nullable.clear(); + + const selectedLabel = + type === 'vertex' + ? this.vertexTypes.find(({ name }) => name === config.label) + : this.edgeTypes.find(({ name }) => name === config.label); + + if (!isUndefined(selectedLabel)) { + const nonNullableProperties = selectedLabel.properties.filter( + ({ nullable }) => !nullable + ); + + nonNullableProperties.forEach(({ name }) => { + config.properties.nonNullable.set(name, ''); + }); + + const nullableProperties = selectedLabel.properties.filter( + ({ nullable }) => nullable + ); + + nullableProperties.forEach(({ name }) => { + config.properties.nullable.set(name, ''); + }); + } + } + + @action + syncGraphEditableProperties(type: 'vertex' | 'edge') { + Object.values(this.editedSelectedGraphDataProperties).forEach( + (property) => { + property.clear(); + } + ); + + const selectedLabel = + type === 'vertex' + ? this.vertexTypes.find( + ({ name }) => name === this.selectedGraphData.label + ) + : this.edgeTypes.find( + ({ name }) => name === this.selectedGraphLinkData.label + ); + + if (!isUndefined(selectedLabel)) { + const selectedGraphData = + type === 'vertex' ? this.selectedGraphData : this.selectedGraphLinkData; + const selectedGraphDataPropertKeys = Object.keys( + type === 'vertex' + ? this.selectedGraphData.properties + : this.selectedGraphLinkData.properties + ); + + // to keep sort of primary keys, need to iter it first + if (type === 'vertex') { + (selectedLabel as VertexType).primary_keys.forEach((name) => { + if (selectedGraphDataPropertKeys.includes(name)) { + this.editedSelectedGraphDataProperties.primary.set( + name, + convertArrayToString(selectedGraphData.properties[name]) + ); + + remove(selectedGraphDataPropertKeys, (key) => key === name); + } + }); + } else { + (selectedLabel as EdgeType).sort_keys.forEach((name) => { + if (selectedGraphDataPropertKeys.includes(name)) { + this.editedSelectedGraphDataProperties.primary.set( + name, + convertArrayToString(selectedGraphData.properties[name]) + ); + + remove(selectedGraphDataPropertKeys, (key) => key === name); + } + }); + } + + selectedLabel.properties + .filter(({ nullable }) => !nullable) + .forEach(({ name }) => { + if (selectedGraphDataPropertKeys.includes(name)) { + this.editedSelectedGraphDataProperties.nonNullable.set( + name, + convertArrayToString(selectedGraphData.properties[name]) + ); + } + + remove(selectedGraphDataPropertKeys, (key) => key === name); + }); + + selectedLabel.properties + .filter(({ nullable }) => nullable) + .forEach(({ name }) => { + if (selectedGraphDataPropertKeys.includes(name)) { + this.editedSelectedGraphDataProperties.nullable.set( + name, + convertArrayToString(selectedGraphData.properties[name]) + ); + } + }); + } + } + + @action + resetNewGraphData(type: 'vertex' | 'edge') { + if (type === 'vertex') { + this.newGraphNodeConfigs = createNewGraphDataConfig(); + } else { + this.newGraphEdgeConfigs = createNewGraphDataConfig(); + } + } + + @action + setVisNetwork(visNetwork: vis.Network) { + this.visNetwork = visNetwork; + } + + @action + setVisDataSet(visDataSet: Record<'nodes' | 'edges', any>) { + this.visDataSet = visDataSet; + } + + @action + setVisCurrentCoordinates(coordinates: { + domX: string; + domY: string; + canvasX: string; + canvasY: string; + }) { + this.visCurrentCoordinates = coordinates; + } + + @action + mutateSearchText(text: string) { + this.searchText = text; + } + + @action + switchShowScreenInfo(flag: boolean) { + this.isShowGraphInfo = flag; + } + + @action + switchClickOnNodeOrEdge(flag: boolean) { + this.isClickOnNodeOrEdge = flag; + } + + @action + switchShowFilterBoard(flag: boolean) { + this.isShowFilterBoard = flag; + } + + @action + switchShowScreeDataSet(dataSet: string) { + this.graphInfoDataSet = dataSet; + } + + @action + setFavoritePopUp(popupCategory: string) { + this.favoritePopUp = popupCategory; + } + + @action + triggerLoadingStatementsIntoEditor() { + this.pulse = !this.pulse; + } + + @action + assignCodeEditorInstance(instance: CodeMirror.Editor) { + this.codeEditorInstance = instance; + } + + @action + mutateCodeEditorText(text: string) { + this.codeEditorText = text; + } + + // change selected graph node + @action + changeSelectedGraphData(selectedData: GraphNode) { + this.selectedGraphData = selectedData; + } + + // change selected graph edge + @action + changeSelectedGraphLinkData(selectedLinkData: GraphEdge) { + this.selectedGraphLinkData = selectedLinkData; + } + + @action + changeRightClickedGraphData(rightClickedData: GraphNode) { + this.rightClickedGraphData = rightClickedData; + } + + @action + mutatePageNumber(category: string, pageNumber: number) { + this.pageConfigs[category].pageNumber = pageNumber; + } + + @action + mutatePageSize(category: string, pageSize: number) { + this.pageConfigs[category].pageSize = pageSize; + } + + @action + editEdgeFilterOption(key: 'type' | 'direction', value: string) { + this.filteredGraphQueryOptions.line[key] = value; + } + + @action + addPropertyFilterOption() { + this.filteredGraphQueryOptions.properties.push({ + property: '', + rule: '', + value: '' + }); + } + + @action + editPropertyFilterOption( + key: 'property' | 'rule' | 'value', + value: string | number, + index: number + ) { + this.filteredGraphQueryOptions.properties[index][key] = value; + } + + @action + deletePropertyFilterOption(index: number) { + this.filteredGraphQueryOptions.properties.splice(index, 1); + } + + @action + addTempExecLog() { + const date = new Date(); + const [week, month, day, year, time] = date.toString().split(' '); + const timeString = `${year}-${monthMaps[month]}-${day} ${time}`; + + const tempData: ExecutionLogs = { + id: NaN, + async_id: NaN, + algorithm_name: + this.currentTab === 'algorithm-analyze' + ? invert(AlgorithmInternalNameMapping)[ + this.algorithmAnalyzerStore.currentAlgorithm + ] + : '', + async_status: 'UNKNOWN', + type: + this.currentTab === 'algorithm-analyze' + ? 'ALGORITHM' + : this.queryMode === 'query' + ? 'GREMLIN' + : 'GREMLIN_ASYNC', + content: + this.currentTab === 'algorithm-analyze' + ? JSON.stringify(this.algorithmAnalyzerStore.currentAlgorithmParams) + : this.codeEditorText, + status: 'RUNNING', + duration: '0ms', + create_time: timeString + }; + + this.executionLogData = [tempData].concat( + this.executionLogData.slice(0, 9) + ); + + return window.setInterval(() => { + this.executionLogData[0].duration = + String(Number(this.executionLogData[0].duration.split('ms')[0]) + 10) + + 'ms'; + + runInAction(() => { + this.executionLogData = this.executionLogData.slice(); + }); + }, 10); + } + + @action + swtichIsSearchedStatus(isSearched: boolean) { + this.isSearched.status = isSearched; + + isSearched + ? (this.isSearched.value = this.searchText) + : (this.isSearched.value = ''); + } + + @action + changeFavoriteQueriesSortOrder( + key: 'time' | 'name', + order: 'desc' | 'asc' | '' + ) { + this.favoriteQueriesSortOrder[key] = order; + } + + @action + clearFilteredGraphQueryOptions() { + this.filteredGraphQueryOptions = { + line: { + type: '', + direction: 'BOTH' + } as Record<'type' | 'direction', string>, + properties: [] as dict[] + }; + } + + @observable + validateAddGraphNodeErrorMessage: NewGraphData | null = null; + @observable + validateAddGraphEdgeErrorMessage: NewGraphData | null = null; + @observable + validateEditableGraphDataPropertyErrorMessage: EditableProperties | null = null; + + @action + initValidateAddGraphDataErrorMessage(type: 'vertex' | 'edge') { + const config = + type === 'vertex' ? this.newGraphNodeConfigs : this.newGraphEdgeConfigs; + const nonNullable = new Map([...config.properties.nonNullable]); + const nullable = new Map([...config.properties.nullable]); + + if (type === 'vertex') { + this.validateAddGraphNodeErrorMessage = { + id: '', + label: '', + properties: { + nonNullable, + nullable + } + }; + } else { + this.validateAddGraphEdgeErrorMessage = { + id: '', + label: '', + properties: { + nonNullable, + nullable + } + }; + } + } + + @action + editGraphDataProperties( + nullable: 'nonNullable' | 'nullable', + key: string, + value: string + ) { + this.editedSelectedGraphDataProperties[nullable].set(key, value); + } + + @action + initValidateEditGraphDataPropertiesErrorMessage() { + this.validateEditableGraphDataPropertyErrorMessage = { + nonNullable: new Map(), + nullable: new Map() + }; + + this.editedSelectedGraphDataProperties.nonNullable.forEach((value, key) => { + this.validateEditableGraphDataPropertyErrorMessage!.nonNullable.set( + key, + '' + ); + }); + + this.editedSelectedGraphDataProperties.nullable.forEach((value, key) => { + this.validateEditableGraphDataPropertyErrorMessage!.nullable.set(key, ''); + }); + } + + @action + validateAddGraphNode( + idStrategy: string, + initial = false, + category?: 'id' | 'nonNullable' | 'nullable', + key?: string + ) { + if (category === 'id') { + if (idStrategy === 'CUSTOMIZE_STRING') { + this.validateAddGraphNodeErrorMessage!.id = + initial || !isEmpty(this.newGraphNodeConfigs.id) + ? '' + : i18next.t('addition.store.illegal-data-format'); + } + + if (idStrategy === 'CUSTOMIZE_NUMBER') { + this.validateAddGraphNodeErrorMessage!.id = + initial || isInt(this.newGraphNodeConfigs.id!) + ? '' + : i18next.t('addition.store.illegal-data-format'); + } + + if (idStrategy === 'CUSTOMIZE_UUID') { + this.validateAddGraphNodeErrorMessage!.id = + initial || isUUID(String(this.newGraphNodeConfigs.id), 4) + ? '' + : i18next.t('addition.store.illegal-data-format'); + } + } + + if (category === 'nonNullable') { + if ( + initial || + isEmpty(this.newGraphNodeConfigs.properties.nonNullable.get(key!)) + ) { + this.validateAddGraphNodeErrorMessage?.properties.nonNullable.set( + key!, + i18next.t('addition.store.cannot-be-empty') + ); + + return; + } + + if ( + initial || + !validateGraphProperty( + this.valueTypes[key!], + this.newGraphNodeConfigs.properties.nonNullable.get(key!)! + ) + ) { + this.validateAddGraphNodeErrorMessage?.properties.nonNullable.set( + key!, + i18next.t('addition.store.illegal-data-format') + ); + + return; + } + + this.validateAddGraphNodeErrorMessage?.properties.nonNullable.set( + key!, + '' + ); + } + + if (category === 'nullable') { + if ( + initial || + !validateGraphProperty( + this.valueTypes[key!], + this.newGraphNodeConfigs.properties.nullable.get(key!)!, + true + ) + ) { + this.validateAddGraphNodeErrorMessage?.properties.nullable.set( + key!, + i18next.t('addition.store.illegal-data-format') + ); + + return; + } + + this.validateAddGraphNodeErrorMessage?.properties.nullable.set(key!, ''); + } + } + + @action + validateAddGraphEdge( + category: 'id' | 'nonNullable' | 'nullable', + initial = false, + key?: string + ) { + if (category === 'id') { + this.validateAddGraphEdgeErrorMessage!.id = + initial || !isEmpty(this.newGraphEdgeConfigs.id) + ? '' + : i18next.t('addition.store.illegal-data-format'); + } + + if (category === 'nonNullable') { + if ( + initial || + isEmpty(this.newGraphEdgeConfigs.properties.nonNullable.get(key!)) + ) { + this.validateAddGraphEdgeErrorMessage?.properties.nonNullable.set( + key!, + i18next.t('addition.store.cannot-be-empty') + ); + + return; + } + + if ( + initial || + !validateGraphProperty( + this.valueTypes[key!], + this.newGraphEdgeConfigs.properties.nonNullable.get(key!)! + ) + ) { + this.validateAddGraphEdgeErrorMessage?.properties.nonNullable.set( + key!, + i18next.t('addition.store.illegal-data-format') + ); + + return; + } + + this.validateAddGraphEdgeErrorMessage?.properties.nonNullable.set( + key!, + '' + ); + } + + if (category === 'nullable') { + if ( + initial || + !validateGraphProperty( + this.valueTypes[key!], + this.newGraphEdgeConfigs.properties.nullable.get(key!)!, + true + ) + ) { + this.validateAddGraphEdgeErrorMessage?.properties.nullable.set( + key!, + i18next.t('addition.store.illegal-data-format') + ); + + return; + } + + this.validateAddGraphEdgeErrorMessage?.properties.nullable.set(key!, ''); + } + } + + @action + validateGraphDataEditableProperties( + type: 'nonNullable' | 'nullable', + key: string + ) { + if (type === 'nonNullable') { + if ( + isEmpty(this.editedSelectedGraphDataProperties?.nonNullable.get(key)) + ) { + this.validateEditableGraphDataPropertyErrorMessage?.nonNullable.set( + key, + i18next.t('addition.store.cannot-be-empty') + ); + + return; + } + + if ( + !validateGraphProperty( + this.valueTypes[key!], + this.editedSelectedGraphDataProperties?.nonNullable.get(key) + ) + ) { + this.validateEditableGraphDataPropertyErrorMessage?.nonNullable.set( + key, + i18next.t('addition.store.illegal-data-format') + ); + + return; + } + + this.validateEditableGraphDataPropertyErrorMessage?.nonNullable.set( + key, + '' + ); + } + + if (type === 'nullable') { + if ( + !validateGraphProperty( + this.valueTypes[key!], + this.editedSelectedGraphDataProperties?.nullable.get(key), + true + ) + ) { + this.validateEditableGraphDataPropertyErrorMessage?.nullable.set( + key, + i18next.t('addition.store.illegal-data-format') + ); + + return; + } + + this.validateEditableGraphDataPropertyErrorMessage?.nullable.set(key, ''); + } + } + + @action + resetRightClickedGraphData() { + this.rightClickedGraphData = { + id: '', + label: '', + properties: {} + }; + } + + @action + resetFavoriteRequestStatus(type: 'add' | 'edit') { + if (type === 'add') { + this.requestStatus.addQueryCollection = 'standby'; + this.errorInfo.addQueryCollection.code = NaN; + this.errorInfo.addQueryCollection.message = ''; + } + + if (type === 'edit') { + this.requestStatus.editQueryCollection = 'standby'; + this.errorInfo.editQueryCollection.code = NaN; + this.errorInfo.editQueryCollection.message = ''; + } + } + + @action + resetSwitchTabState() { + this.isLoadingGraph = false; + this.isGraphLoaded = false; + this.isShowGraphInfo = false; + this.isClickOnNodeOrEdge = false; + this.queryMode = 'query'; + this.dynamicAddGraphDataStatus = ''; + this.graphData = {} as FetchGraphResponse; + + this.visNetwork = null; + this.visDataSet = null; + this.visCurrentCoordinates = { + domX: '', + domY: '', + canvasX: '', + canvasY: '' + }; + + this.selectedGraphData = createGraphNode(); + this.selectedGraphLinkData = createGraphEdge(); + + this.pageConfigs.tableResult = { + pageNumber: 1, + pageTotal: 0 + }; + + this.requestStatus.fetchGraphs = 'standby'; + this.requestStatus.createAsyncTask = 'standby'; + this.errorInfo.fetchGraphs = { + code: NaN, + message: '' + }; + this.errorInfo.createAsyncTask = { + code: NaN, + message: '' + }; + + this.clearFilteredGraphQueryOptions(); + } + + @action + resetIdState() { + this.currentId = null; + this.currentTab = 'gremlin-analyze'; + this.searchText = ''; + this.isSidebarExpanded = false; + this.isLoadingGraph = false; + this.isGraphLoaded = false; + this.isShowGraphInfo = false; + this.isFullScreenReuslt = false; + this.isClickOnNodeOrEdge = false; + this.queryMode = 'query'; + this.codeEditorInstance = null; + this.codeEditorText = ''; + this.dynamicAddGraphDataStatus = ''; + this.graphData = {} as FetchGraphResponse; + + this.visNetwork = null; + this.visDataSet = null; + this.visCurrentCoordinates = { + domX: '', + domY: '', + canvasX: '', + canvasY: '' + }; + + this.properties = []; + + this.isSearched = { + status: false, + value: '' + }; + + this.selectedGraphData = createGraphNode(); + this.selectedGraphLinkData = createGraphEdge(); + + this.pageConfigs = { + tableResult: { + pageNumber: 1, + pageTotal: 0 + }, + executionLog: { + pageNumber: 1, + pageSize: 10, + pageTotal: 0 + }, + favoriteQueries: { + pageNumber: 1, + pageSize: 10, + pageTotal: 0 + } + }; + + this.requestStatus = initalizeRequestStatus(); + this.errorInfo = initalizeErrorInfo(); + this.clearFilteredGraphQueryOptions(); + } + + @action + dispose() { + this.resetIdState(); + this.vertexTypes = []; + this.edgeTypes = []; + this.idList = []; + } + + fetchIdList = flow(function* fetchIdList(this: DataAnalyzeStore) { + this.requestStatus.fetchIdList = 'pending'; + + try { + const result: AxiosResponse = yield axios.get< + GraphData + >(baseUrl, { + params: { + page_size: -1 + } + }); + + if (result.data.status !== 200) { + this.errorInfo.fetchIdList.code = result.data.status; + throw new Error(result.data.message); + } + + this.idList = result.data.data.records.map(({ id, name }) => ({ + id, + name + })); + this.requestStatus.fetchIdList = 'success'; + } catch (error) { + this.requestStatus.fetchIdList = 'failed'; + this.errorInfo.fetchIdList.message = error.message; + console.error(error.message); + } + }); + + // to know the type of properties + fetchValueTypes = flow(function* fetchValueTypes(this: DataAnalyzeStore) { + this.requestStatus.fetchValueTypes = 'pending'; + + try { + const result = yield axios.get( + `${baseUrl}/${this.currentId}/schema/propertykeys`, + { + params: { + page_size: -1 + } + } + ); + + if (result.data.status !== 200) { + this.errorInfo.fetchValueTypes.code = result.data.status; + throw new Error(result.data.message); + } + + this.properties = result.data.data.records; + + result.data.data.records.forEach( + ({ name, data_type }: Record) => { + this.valueTypes[name] = data_type; + } + ); + + this.requestStatus.fetchValueTypes = 'success'; + } catch (error) { + this.requestStatus.fetchValueTypes = 'failed'; + this.errorInfo.fetchValueTypes.message = error.message; + console.error(error.message); + } + }); + + fetchVertexTypes = flow(function* fetchVertexTypeList( + this: DataAnalyzeStore + ) { + this.requestStatus.fetchVertexTypeList = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.currentId}/schema/vertexlabels`, + { + params: { + page_size: -1 + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchVertexTypeList.code = result.data.status; + throw new Error(result.data.message); + } + + this.vertexTypes = result.data.data.records; + this.requestStatus.fetchVertexTypeList = 'success'; + } catch (error) { + this.requestStatus.fetchVertexTypeList = 'failed'; + this.errorInfo.fetchVertexTypeList.message = error.message; + } + }); + + fetchColorSchemas = flow(function* fetchColorSchemas(this: DataAnalyzeStore) { + this.requestStatus.fetchColorSchemas = 'pending'; + + try { + const result: AxiosResponse = yield axios.get< + FetchGraphResponse + >(`${baseUrl}/${this.currentId}/schema/vertexlabels/style`); + + if (result.data.status !== 200) { + this.errorInfo.fetchColorSchemas.code = result.data.status; + throw new Error(result.data.message); + } + + this.colorSchemas = result.data.data; + this.requestStatus.fetchColorSchemas = 'success'; + } catch (error) { + this.requestStatus.fetchColorSchemas = 'failed'; + this.errorInfo.fetchColorSchemas.message = error.message; + console.error(error.message); + } + }); + + fetchColorList = flow(function* fetchColorList(this: DataAnalyzeStore) { + this.requestStatus.fetchColorList = 'pending'; + + try { + const result: AxiosResponse> = yield axios.get( + `${baseUrl}/${this.currentId}/schema/vertexlabels/optional-colors` + ); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.colorList = result.data.data; + this.requestStatus.fetchColorList = 'success'; + } catch (error) { + this.requestStatus.fetchColorList = 'failed'; + this.errorMessage = error.message; + console.error(error.message); + } + }); + + fetchAllNodeStyle = flow(function* fetchAllNodeStyle(this: DataAnalyzeStore) { + this.requestStatus.fetchAllNodeStyle = 'pending'; + try { + const result: AxiosResponse> = yield axios.get(`${baseUrl}/${this.currentId}/schema/vertexlabels`, { + params: { + page_no: 1, + page_size: -1 + } + }); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + result.data.data.records.forEach(({ name, style }) => { + if (style.color !== null) { + this.colorMappings[name] = style.color; + } + if (style.size !== null) { + this.vertexSizeMappings[name] = style.size; + } + if (style.display_fields.length !== 0) { + this.vertexWritingMappings[name] = style.display_fields; + } + }); + + this.requestStatus.fetchAllNodeStyle = 'success'; + } catch (error) { + this.requestStatus.fetchAllNodeStyle = 'failed'; + this.errorInfo.fetchAllNodeStyle.message = error.message; + console.error(error.message); + } + }); + + fetchEdgeTypes = flow(function* fetchEdgeTypes(this: DataAnalyzeStore) { + this.requestStatus.fetchEdgeTypes = 'pending'; + + try { + const result: AxiosResponse> = yield axios.get(`${baseUrl}/${this.currentId}/schema/edgelabels`, { + params: { + page_no: 1, + page_size: -1 + } + }); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.edgeTypes = result.data.data.records; + this.requestStatus.fetchEdgeTypes = 'success'; + } catch (error) { + this.requestStatus.fetchEdgeTypes = 'failed'; + this.errorInfo.fetchEdgeTypes.message = error.message; + console.error(error.message); + } + }); + + fetchAllEdgeStyle = flow(function* fetchAllEdgeStyle(this: DataAnalyzeStore) { + this.requestStatus.fetchAllEdgeStyle = 'pending'; + + try { + const result: AxiosResponse> = yield axios.get(`${baseUrl}/${this.currentId}/schema/edgelabels`, { + params: { + page_no: 1, + page_size: -1 + } + }); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + result.data.data.records.forEach(({ name, style }) => { + if (style.color !== null) { + this.edgeColorMappings[name] = style.color; + } + if (style.with_arrow !== null) { + this.edgeWithArrowMappings[name] = style.with_arrow; + } + if (style.thickness !== null) { + this.edgeThicknessMappings[name] = style.thickness; + } + if (style.display_fields.length !== 0) { + this.edgeWritingMappings[name] = style.display_fields; + } + }); + + this.requestStatus.fetchAllEdgeStyle = 'success'; + } catch (error) { + this.requestStatus.fetchAllEdgeStyle = 'failed'; + this.errorInfo.fetchAllEdgeStyle.message = error.message; + console.error(error.message); + } + }); + + fetchAllPropertyIndexes = flow(function* fetchAllPropertyIndexes( + this: DataAnalyzeStore, + indexType: 'vertex' | 'edge' + ) { + this.requestStatus.fetchAllPropertyIndexes = 'pending'; + + try { + const result = yield axios + .get(`${baseUrl}/${this.currentId}/schema/propertyindexes`, { + params: { + page_size: -1, + is_vertex_label: indexType === 'vertex' + } + }) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.propertyIndexes = result.data.data.records; + this.requestStatus.fetchAllPropertyIndexes = 'success'; + } catch (error) { + this.requestStatus.fetchAllPropertyIndexes = 'failed'; + this.errorMessage = error.message; + } + }); + + fetchGraphs = flow(function* fetchGraphs( + this: DataAnalyzeStore, + algorithmConfigs?: { url: string; type: string } + ) { + // reset request status of create async task + this.requestStatus.createAsyncTask = 'standby'; + this.requestStatus.fetchGraphs = 'pending'; + this.isLoadingGraph = true; + + let params: object | null = null; + + if (!isUndefined(algorithmConfigs)) { + switch (algorithmConfigs.type) { + case Algorithm.loopDetection: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.loopDetectionParams, + ['max_degree', 'capacity', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + case Algorithm.focusDetection: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.focusDetectionParams, + ['max_degree', 'capacity', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + case Algorithm.shortestPath: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.shortestPathAlgorithmParams, + ['max_degree', 'capacity', 'skip_degree'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.shortestPathAll: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.shortestPathAllParams, + ['max_degree', 'capacity', 'skip_degree'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.allPath: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.allPathParams, + ['max_degree', 'capacity', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.modelSimilarity: { + const { + source, + vertexType, + vertexProperty, + direction, + least_neighbor, + similarity, + label, + max_similar, + least_similar, + property_filter, + least_property_number, + max_degree, + capacity, + limit, + return_common_connection, + return_complete_info + } = this.algorithmAnalyzerStore.modelSimilarityParams; + + const sources: Record = {}; + + if (source !== '') { + sources.ids = source.split(','); + } else { + if (vertexType !== '') { + sources.label = vertexType; + } + + if (vertexProperty[0][0] !== '') { + const convertedVertexProperty = vertexProperty.map( + ([key, value]) => [key, value.split(',')] + ); + + sources.properties = fromPairs(convertedVertexProperty); + } + } + + const convertedParams = { + sources, + label, + direction, + min_neighbors: least_neighbor, + alpha: similarity, + min_similars: least_similar, + top: max_similar, + group_property: property_filter, + min_groups: least_property_number, + max_degree, + capacity, + limit, + with_intermediary: return_common_connection, + with_vertex: return_complete_info + }; + + if (label === '__all__') { + delete convertedParams.label; + } + + if (max_degree === '') { + delete convertedParams.max_degree; + } + + if (capacity === '') { + delete convertedParams.capacity; + } + + if (limit === '') { + delete convertedParams.limit; + } + + if (max_similar === '') { + delete convertedParams.top; + } + + if (least_similar === '') { + delete convertedParams.min_similars; + } + + if (convertedParams.group_property === '') { + delete convertedParams.group_property; + delete convertedParams.min_groups; + } + + // @ts-ignore + params = convertedParams; + break; + } + + case Algorithm.neighborRank: { + const clonedNeighborRankParams = cloneDeep( + this.algorithmAnalyzerStore.neighborRankParams + ); + + if (clonedNeighborRankParams.capacity === '') { + clonedNeighborRankParams.capacity = '10000000'; + } + + clonedNeighborRankParams.steps.forEach((step, index) => { + delete step.uuid; + const clonedStep = cloneDeep(step); + + if (step.labels[0] === '__all__') { + delete clonedStep.labels; + clonedNeighborRankParams.steps[index] = clonedStep; + } + + if (step.degree === '') { + clonedStep.degree = '10000'; + clonedNeighborRankParams.steps[index] = clonedStep; + } + + if (step.top === '') { + clonedStep.top = '100'; + clonedNeighborRankParams.steps[index] = clonedStep; + } + }); + + params = clonedNeighborRankParams; + break; + } + + case Algorithm.kStepNeighbor: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.kStepNeighborParams, + ['max_degree', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.kHop: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.kHopParams, + ['max_degree', 'capacity', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.customPath: { + const { + source, + vertexType, + vertexProperty, + sort_by, + capacity, + limit, + steps + } = this.algorithmAnalyzerStore.customPathParams; + + const sources: Record = {}; + + if (source !== '') { + sources.ids = source.split(','); + } else { + if (vertexType !== '') { + sources.label = vertexType; + } + + if (vertexProperty[0][0] !== '') { + const convertedVertexProperty = vertexProperty.map( + ([key, value]) => [key, value.split(',')] + ); + + sources.properties = fromPairs(convertedVertexProperty); + } + } + + const clonedCustomPathRules = cloneDeep(steps); + + clonedCustomPathRules.forEach((step, index) => { + delete step.uuid; + + if (isEmpty(step.labels)) { + delete step.labels; + } + + if (step.properties[0][0] !== '') { + // omit property types here + // @ts-ignore + step.properties = fromPairs( + step.properties.map(([key, value]) => [key, value.split(',')]) + ); + } else { + delete step.properties; + } + + if (isEmpty(step.degree)) { + delete step.degree; + } + + if (isEmpty(step.sample)) { + delete step.sample; + } + + if (step.weight_by === '__CUSTOM_WEIGHT__') { + delete step.weight_by; + } else { + delete step.default_weight; + } + + if (step.weight_by === '') { + delete step.weight_by; + } + }); + + const convertedParams: Record = { + sources, + sort_by, + steps: clonedCustomPathRules + }; + + if (!isEmpty(capacity)) { + convertedParams.capactiy = capacity; + } + + if (!isEmpty(limit)) { + convertedParams.limit = limit; + } + + // @ts-ignore + params = convertedParams; + break; + } + + case Algorithm.radiographicInspection: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.radiographicInspectionParams, + ['max_degree', 'capacity', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.sameNeighbor: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.sameNeighborParams, + ['max_degree', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.weightedShortestPath: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.weightedShortestPathParams, + ['max_degree', 'capacity', 'skip_degree'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.singleSourceWeightedShortestPath: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.singleSourceWeightedShortestPathParams, + ['max_degree', 'capacity', 'skip_degree', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.jaccard: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.jaccardParams, + ['max_degree'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + + case Algorithm.personalRankRecommendation: { + const filterdObject = filterEmptyAlgorightmParams( + this.algorithmAnalyzerStore.personalRankParams, + ['degree', 'limit'] + ); + removeLabelKey(filterdObject); + params = filterdObject; + break; + } + } + } + + try { + let result: AxiosResponse; + + if (!isUndefined(algorithmConfigs)) { + result = yield axios + .post( + `${baseUrl}/${this.currentId}/algorithms/${algorithmConfigs.url}`, + { + ...params + } + ) + .catch(checkIfLocalNetworkOffline); + } else { + result = yield axios + .post( + `${baseUrl}/${this.currentId}/gremlin-query`, + { + content: this.codeEditorText + } + ) + .catch(checkIfLocalNetworkOffline); + } + + if (result.data.status !== 200) { + this.errorInfo.fetchGraphs.code = result.data.status; + throw new Error(result.data.message); + } + + // replace null with empty array when query result type is EMPTY + if (result.data.data.type === 'EMPTY') { + result.data.data.json_view.data = []; + result.data.data.table_view = { + header: ['result'], + rows: [] + }; + } + + this.originalGraphData = result.data; + + if ( + result.data.data.graph_view.vertices !== null && + result.data.data.graph_view.edges !== null + ) { + this.vertexCollection = new Set( + result.data.data.graph_view.vertices.map(({ id }) => id) + ); + this.edgeCollection = new Set( + result.data.data.graph_view.edges.map(({ id }) => id) + ); + } + + this.graphData = result.data; + this.pageConfigs.tableResult.pageTotal = this.originalGraphData.data.table_view.rows.length; + this.requestStatus.fetchGraphs = 'success'; + this.isLoadingGraph = false; + } catch (error) { + this.isLoadingGraph = false; + this.requestStatus.fetchGraphs = 'failed'; + this.errorInfo.fetchGraphs.message = error.message; + console.error(error.message); + } + }); + + createAsyncTask = flow(function* createAsyncTask(this: DataAnalyzeStore) { + // reset request status of fetch graphs + this.requestStatus.fetchGraphs = 'stanby'; + this.requestStatus.createAsyncTask = 'pending'; + + try { + const result: AxiosResponse = yield axios + .post( + `${baseUrl}/${this.currentId}/gremlin-query/async-task`, + { + content: this.codeEditorText + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.createAsyncTask.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.createAsyncTask = 'success'; + } catch (error) { + this.requestStatus.createAsyncTask = 'failed'; + this.errorInfo.createAsyncTask.message = error.message; + console.error(error.message); + } + }); + + addGraphNode = flow(function* addGraphNode(this: DataAnalyzeStore) { + this.requestStatus.addGraphNode = 'pending'; + + try { + const properties: Record = {}; + this.newGraphNodeConfigs.properties.nonNullable.forEach((value, key) => { + properties[key] = value; + }); + this.newGraphNodeConfigs.properties.nullable.forEach((value, key) => { + properties[key] = value; + }); + + const result: AxiosResponse> = yield axios.post( + `${baseUrl}/${this.currentId}/graph/vertex`, + { + id: this.newGraphNodeConfigs.id, + label: this.newGraphNodeConfigs.label, + properties + } + ); + + if (result.data.status !== 200) { + this.errorInfo.addGraphNode.code = result.data.status; + throw new Error(result.data.message); + } + + const mergedGraphData = cloneDeep(this.graphData); + mergedGraphData.data.graph_view.vertices.push( + ...result.data.data.vertices + ); + + this.graphData = mergedGraphData; + this.requestStatus.addGraphNode = 'success'; + + return result.data.data.vertices; + } catch (error) { + this.requestStatus.addGraphNode = 'failed'; + this.errorInfo.addGraphNode.message = error.message; + console.error(error.message); + } + }); + + fetchRelatedEdges = flow(function* fetchRelatedEdges(this: DataAnalyzeStore) { + this.requestStatus.fetchRelatedEdges = 'pending'; + try { + const result: AxiosResponse> = yield axios.get< + responseData + >( + `${baseUrl}/${this.currentId}/schema/vertexlabels/${this.rightClickedGraphData.label}/link` + ); + + if (result.data.status !== 200) { + this.errorInfo.fetchRelatedEdges.code = result.data.status; + throw new Error(result.data.message); + } + + this.relatedGraphEdges = result.data.data; + this.requestStatus.fetchRelatedEdges = 'success'; + } catch (error) { + this.requestStatus.fetchRelatedEdges = 'failed'; + this.errorInfo.fetchRelatedEdges.message = error.message; + console.error(error.message); + } + }); + + addGraphEdge = flow(function* addGraphEdge(this: DataAnalyzeStore) { + this.requestStatus.addGraphEdge = 'pending'; + + try { + const vertices = [ + this.rightClickedGraphData.id, + this.newGraphEdgeConfigs.id + ]; + + if (this.dynamicAddGraphDataStatus === 'inEdge') { + vertices.reverse(); + } + + const properties: Record = {}; + this.newGraphEdgeConfigs.properties.nonNullable.forEach((value, key) => { + properties[key] = value; + }); + this.newGraphEdgeConfigs.properties.nullable.forEach((value, key) => { + properties[key] = value; + }); + + const result: AxiosResponse> = yield axios.post( + `${baseUrl}/${this.currentId}/graph/edge`, + { + label: this.newGraphEdgeConfigs.label, + source: vertices[0], + target: vertices[1], + properties + } + ); + + if (result.data.status !== 200) { + this.errorInfo.addGraphEdge.code = result.data.status; + throw new Error(result.data.message); + } + + const mergedGraphData = cloneDeep(this.graphData); + const filteredVertices: GraphNode[] = []; + + result.data.data.vertices.forEach((vertex) => { + if (this.visDataSet!.nodes.get(vertex.id) === null) { + filteredVertices.push(vertex); + } + }); + + mergedGraphData.data.graph_view.vertices.push(...filteredVertices); + mergedGraphData.data.graph_view.edges.push(...result.data.data.edges); + + this.graphData = mergedGraphData; + this.requestStatus.addGraphEdge = 'success'; + + return { + originalVertices: result.data.data.vertices, + vertices: filteredVertices, + edges: result.data.data.edges + }; + } catch (error) { + this.requestStatus.addGraphEdge = 'failed'; + this.errorInfo.addGraphEdge.message = error.message; + console.error(error.message); + } + }); + + expandGraphNode = flow(function* expandGraphNode( + this: DataAnalyzeStore, + // double click on a node, or right click a node + nodeId?: string, + label?: string + ) { + this.requestStatus.expandGraphNode = 'pending'; + + try { + const result: AxiosResponse = yield axios.put( + `${baseUrl}/${this.currentId}/gremlin-query`, + { + vertex_id: nodeId || this.rightClickedGraphData.id, + vertex_label: label || this.rightClickedGraphData.label + } + ); + + if (result.data.status !== 200) { + this.errorInfo.expandGraphNode.code = result.data.status; + throw new Error(result.data.message); + } + + const newGraphData = result.data; + + const filteredVertices = newGraphData.data.graph_view.vertices.filter( + ({ id }) => { + if (this.vertexCollection.has(id)) { + return false; + } + + this.vertexCollection.add(id); + return true; + } + ); + + const filteredEdges = newGraphData.data.graph_view.edges.filter( + ({ id }) => { + if (this.edgeCollection.has(id)) { + return false; + } + + this.edgeCollection.add(id); + return true; + } + ); + + this.expandedGraphData = { + ...newGraphData, + data: { + ...newGraphData.data, + graph_view: { + vertices: filteredVertices, + edges: filteredEdges + } + } + }; + + const vertexCollection = new Set(); + const edgeCollection = new Set(); + + const mergeData: FetchGraphResponse = { + ...newGraphData, + data: { + ...newGraphData.data, + graph_view: { + vertices: this.graphData.data.graph_view.vertices + .concat(newGraphData.data.graph_view.vertices) + .filter((item) => { + const isDuplicate = vertexCollection.has(item.id); + vertexCollection.add(item.id); + return !isDuplicate; + }), + edges: this.graphData.data.graph_view.edges + .concat(newGraphData.data.graph_view.edges) + .filter((item) => { + const isDuplicate = edgeCollection.has(item.id); + edgeCollection.add(item.id); + return !isDuplicate; + }) + } + } + }; + + this.graphData = mergeData; + this.requestStatus.expandGraphNode = 'success'; + } catch (error) { + this.requestStatus.expandGraphNode = 'failed'; + this.errorInfo.expandGraphNode.message = error.message; + console.error(error.message); + } + }); + + @action + hideGraphNode(nodeId: any) { + this.graphData.data.graph_view.vertices = this.graphData.data.graph_view.vertices.filter( + (data) => data.id !== this.rightClickedGraphData.id + ); + + // only delete node in vertexCollection, not edges in EdgeCollection + this.vertexCollection.delete(nodeId); + + // assign new object to observable + this.graphData = { ...this.graphData }; + } + + updateGraphProperties = flow(function* updateGraphProperties( + this: DataAnalyzeStore + ) { + this.requestStatus.updateGraphProperties = 'pending'; + + const { id, label, properties } = + this.graphInfoDataSet === 'node' + ? this.selectedGraphData + : this.selectedGraphLinkData; + + const editedProperties: Record> = { + ...Object.fromEntries([ + ...this.editedSelectedGraphDataProperties.primary + ]), + ...Object.fromEntries([ + ...this.editedSelectedGraphDataProperties.nonNullable + ]), + ...Object.fromEntries([ + ...this.editedSelectedGraphDataProperties.nullable + ]) + }; + + // check if originial type is Array + Object.entries(editedProperties).forEach(([key, value]) => { + if (Array.isArray(properties[key])) { + if ((value as string).includes(',')) { + editedProperties[key] = (value as string).split(','); + } + + if ((value as string).includes(',')) { + editedProperties[key] = (value as string).split(','); + } + } + }); + + try { + const result: AxiosResponse> = yield axios.put>( + `${baseUrl}/${this.currentId}/graph/${ + this.graphInfoDataSet === 'node' ? 'vertex' : 'edge' + }/${encodeURIComponent(id)}`, + this.graphInfoDataSet === 'node' + ? { + id, + label, + properties: editedProperties + } + : { + id, + label, + properties: editedProperties, + source: this.selectedGraphLinkData.source, + target: this.selectedGraphLinkData.target + } + ); + + if (result.data.status !== 200) { + this.errorInfo.updateGraphProperties.code = result.data.status; + throw new Error(result.data.message); + } + + const graphData = cloneDeep(this.graphData); + if (this.graphInfoDataSet === 'node') { + const vertex = graphData.data.graph_view.vertices.find( + ({ id }) => id === result.data.data.id + ); + + if (!isUndefined(vertex)) { + vertex.id = result.data.data.id; + vertex.label = result.data.data.label; + vertex.properties = result.data.data.properties; + } + } else { + const edge = graphData.data.graph_view.edges.find( + ({ id }) => id === result.data.data.id + ); + + if (!isUndefined(edge)) { + edge.id = result.data.data.id; + edge.label = result.data.data.label; + edge.properties = result.data.data.properties; + } + } + + this.graphData = graphData; + this.requestStatus.updateGraphProperties = 'success'; + return result.data.data; + } catch (error) { + this.requestStatus.updateGraphProperties = 'failed'; + this.errorInfo.updateGraphProperties.message = error.message; + console.error(error.message); + } + }); + + // require list of edge type options in QueryFilteredOptions + fetchRelatedVertex = flow(function* fetchRelatedVertex( + this: DataAnalyzeStore + ) { + this.requestStatus.fetchRelatedVertex = 'pending'; + + try { + const result = yield axios.get( + `${baseUrl}/${this.currentId}/schema/vertexlabels/${this.rightClickedGraphData.label}/link` + ); + + if (result.data.status !== 200) { + this.errorInfo.fetchRelatedVertex = result.data.status; + throw new Error(result.data.message); + } + + this.graphDataEdgeTypes = result.data.data; + + this.editEdgeFilterOption( + 'type', + !isUndefined(result.data.data[0]) ? result.data.data[0] : '' + ); + } catch (error) { + this.requestStatus.fetchRelatedVertex = 'failed'; + this.errorInfo.fetchRelatedVertex.message = error.message; + console.error(error.message); + } + }); + + // require list of property options in QueryFilteredOptions + fetchFilteredPropertyOptions = flow(function* fetchFilteredPropertyOptions( + this: DataAnalyzeStore, + edgeName: string + ) { + this.requestStatus.fetchFilteredPropertyOptions = 'pending'; + + try { + const result: AxiosResponse = yield axios.get( + `${baseUrl}/${this.currentId}/schema/edgelabels/${edgeName}` + ); + + if (result.data.status !== 200) { + this.errorInfo.filteredPropertyOptions.code = result.data.status; + throw new Error(result.data.message); + } + + this.filteredPropertyOptions = result.data.data.properties.map( + ({ name }) => name + ); + } catch (error) { + this.requestStatus.fetchFilteredPropertyOptions = 'failed'; + this.errorInfo.filteredPropertyOptions = error.message; + console.error(error.message); + } + }); + + filterGraphData = flow(function* filteredGraphData(this: DataAnalyzeStore) { + this.requestStatus.filteredGraphData = 'pending'; + + try { + const result: AxiosResponse = yield axios.put( + `${baseUrl}/${this.currentId}/gremlin-query`, + { + vertex_id: this.rightClickedGraphData.id, + vertex_label: this.rightClickedGraphData.label, + edge_label: this.filteredGraphQueryOptions.line.type, + direction: this.filteredGraphQueryOptions.line.direction, + conditions: this.filteredGraphQueryOptions.properties.map( + ({ property, rule, value }) => ({ + key: property, + operator: ruleMap[rule], + value: rule === 'True' || rule === 'False' ? Boolean(rule) : value + }) + ) + } + ); + + if (result.data.status !== 200) { + this.errorInfo.filteredGraphData.code = result.data.status; + throw new Error(result.data.message); + } + + const newGraphData = result.data; + + const filteredVertices = newGraphData.data.graph_view.vertices.filter( + ({ id }) => { + if (this.vertexCollection.has(id)) { + return false; + } + + this.vertexCollection.add(id); + return true; + } + ); + + const filteredEdges = newGraphData.data.graph_view.edges.filter( + ({ id }) => { + if (this.edgeCollection.has(id)) { + return false; + } + + this.edgeCollection.add(id); + return true; + } + ); + + this.expandedGraphData = { + ...newGraphData, + data: { + ...newGraphData.data, + graph_view: { + vertices: filteredVertices, + edges: filteredEdges + } + } + }; + + const vertexCollection = new Set(); + const edgeCollection = new Set(); + + const mergeData: FetchGraphResponse = { + ...newGraphData, + data: { + ...newGraphData.data, + graph_view: { + vertices: this.graphData.data.graph_view.vertices + .concat(newGraphData.data.graph_view.vertices) + .filter((item) => { + const isDuplicate = vertexCollection.has(item.id); + vertexCollection.add(item.id); + return !isDuplicate; + }), + edges: this.graphData.data.graph_view.edges + .concat(newGraphData.data.graph_view.edges) + .filter((item) => { + const isDuplicate = edgeCollection.has(item.id); + edgeCollection.add(item.id); + return !isDuplicate; + }) + } + } + }; + + this.graphData = mergeData; + this.requestStatus.filteredGraphData = 'success'; + } catch (error) { + this.errorInfo.filteredGraphData.message = error.message; + console.error(error.message); + } + }); + + addQueryCollection = flow(function* addQueryCollection( + this: DataAnalyzeStore, + name: string, + // if content is not the value in codeEditor (e.g. in table) + content?: string + ) { + this.requestStatus.addQueryCollection = 'pending'; + + try { + const result = yield axios.post( + `${baseUrl}/${this.currentId}/gremlin-collections`, + { + name, + content: content || this.codeEditorText + } + ); + + if (result.data.status !== 200) { + this.errorInfo.addQueryCollection.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.addQueryCollection = 'success'; + } catch (error) { + this.requestStatus.addQueryCollection = 'failed'; + this.errorInfo.addQueryCollection.message = error.message; + console.error(error.message); + } + }); + + editQueryCollection = flow(function* editQueryCollection( + this: DataAnalyzeStore, + id: number, + name: string, + content: string + ) { + this.requestStatus.editQueryCollection = 'pending'; + + try { + const result = yield axios.put( + `${baseUrl}/${this.currentId}/gremlin-collections/${id}`, + { + name, + content + } + ); + + if (result.data.status !== 200) { + this.errorInfo.editQueryCollection.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.editQueryCollection = 'success'; + } catch (error) { + this.requestStatus.editQueryCollection = 'failed'; + this.errorInfo.editQueryCollection.message = error.message; + console.error(error.message); + } + }); + + deleteQueryCollection = flow(function* deleteQueryCollection( + this: DataAnalyzeStore, + id: number + ) { + this.requestStatus.deleteQueryCollection = 'pending'; + + try { + const result = yield axios.delete( + `${baseUrl}/${this.currentId}/gremlin-collections/${id}` + ); + + if (result.data.status !== 200) { + this.errorInfo.deleteQueryCollection = result.data.status; + throw new Error(result.data.message); + } + + // if current pageNumber has no data after delete, set the pageNumber to the previous + if ( + this.favoriteQueryData.length === 1 && + this.pageConfigs.favoriteQueries.pageNumber > 1 + ) { + this.pageConfigs.favoriteQueries.pageNumber = + this.pageConfigs.favoriteQueries.pageNumber - 1; + } + + this.requestStatus.deleteQueryCollection = 'success'; + } catch (error) { + this.requestStatus.deleteQueryCollection = 'failed'; + this.errorInfo.deleteQueryCollection.message = error.message; + console.error(error.message); + } + }); + + fetchExecutionLogs = flow(function* fetchExecutionLogs( + this: DataAnalyzeStore + ) { + this.requestStatus.fetchExecutionLogs = 'pending'; + + try { + const result: AxiosResponse = yield axios.get< + ExecutionLogsResponse + >(`${baseUrl}/${this.currentId}/execute-histories`, { + params: { + page_size: this.pageConfigs.executionLog.pageSize, + page_no: this.pageConfigs.executionLog.pageNumber + } + }); + + if (result.data.status !== 200) { + this.errorInfo.fetchExecutionLogs.code = result.data.status; + throw new Error(result.data.message); + } + + this.executionLogData = result.data.data.records; + this.pageConfigs.executionLog.pageTotal = result.data.data.total; + this.requestStatus.fetchExecutionLogs = 'success'; + } catch (error) { + this.requestStatus.fetchExecutionLogs = 'failed'; + this.errorInfo.fetchExecutionLogs.message = error.message; + console.error(error.message); + } + }); + + fetchFavoriteQueries = flow(function* fetchFavoriteQueries( + this: DataAnalyzeStore + ) { + const url = + `${baseUrl}/${this.currentId}/gremlin-collections?` + + `&page_no=${this.pageConfigs.favoriteQueries.pageNumber}` + + `&page_size=${this.pageConfigs.favoriteQueries.pageSize}` + + (this.favoriteQueriesSortOrder.time !== '' + ? `&time_order=${this.favoriteQueriesSortOrder.time}` + : '') + + (this.favoriteQueriesSortOrder.name !== '' + ? `&name_order=${this.favoriteQueriesSortOrder.name}` + : '') + + (this.isSearched.status && this.searchText !== '' + ? `&content=${this.searchText}` + : ''); + + this.requestStatus.fetchFavoriteQueries = 'pending'; + + try { + const result: AxiosResponse = yield axios.get< + FavoriteQueryResponse + >(url); + + if (result.data.status !== 200) { + this.errorInfo.fetchFavoriteQueries.code = result.data.status; + throw new Error(result.data.message); + } + + this.favoriteQueryData = result.data.data.records; + this.pageConfigs.favoriteQueries.pageTotal = result.data.data.total; + this.requestStatus.fetchFavoriteQueries = 'success'; + } catch (error) { + this.requestStatus.fetchFavoriteQueries = 'failed'; + this.errorInfo.fetchFavoriteQueries.message = error.message; + console.error(error.message); + } + }); +} + +export default createContext(new DataAnalyzeStore()); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts new file mode 100644 index 000000000..c9b513531 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/ImportManagerStore.ts @@ -0,0 +1,383 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { isEmpty, size } from 'lodash-es'; + +import i18next from '../../../i18n'; +import { + Job, + JobResponse +} from '../../types/GraphManagementStore/dataImportStore'; +import { + initRequestStatus, + initErrorInfo +} from '../../factory/dataImportStore/importManagmentStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +import { baseUrl, responseData } from '../../types/common'; +import type { + JobGlance, + JobFailedReason +} from '../../types/GraphManagementStore/dataImportStore'; + +export class ImportManagerStore { + @observable requestStatus = initRequestStatus(); + @observable errorInfo = initErrorInfo(); + + @observable currentId: number | null = null; + @observable jobDetailsStep = 'basic'; + @observable selectedJobIndex = NaN; + @observable selectedJob: Job | null = null; + @observable searchWords = ''; + @observable isCreateNewProperty = false; + + @observable.shallow importJobListPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + @observable.shallow isSearched = { + status: false, + value: '' + }; + + @observable.shallow newJob = { + name: '', + description: '' + }; + + // @observable editJob: JobGlance | null = null; + @observable editJob: JobGlance | null = { + name: '', + description: '' + }; + + @observable.ref importJobList: Job[] = []; + @observable.ref failedReason: JobFailedReason[] = []; + + @observable validateNewJobErrorMessage = { + name: '', + description: '' + }; + + @observable validateEditJobErrorMessage = { + name: '', + description: '' + }; + + @computed get currentJobDetails() { + return this.importJobList[this.selectedJobIndex]; + } + + @action + setCurrentId(id: number) { + this.currentId = id; + } + + @action + switchCreateNewProperty(flag: boolean) { + this.isCreateNewProperty = flag; + } + + @action + switchSearchedStatus(isSearched: boolean) { + this.isSearched.status = isSearched; + + isSearched + ? (this.isSearched.value = this.searchWords) + : (this.isSearched.value = ''); + } + + @action + setCurrentJobDetailStep(step: string) { + this.jobDetailsStep = step; + } + + @action + setSelectedJobIndex(index: number) { + this.selectedJobIndex = index; + } + + @action + setSelectedJob(jobId: number | null) { + if (jobId === null) { + this.selectedJob = null; + } else { + this.selectedJob = this.importJobList.find( + ({ id }) => jobId === id + ) as Job; + } + } + + @action + mutateSearchWords(word: string) { + this.searchWords = word; + } + + @action + mutateNewJob(key: T, value: JobGlance[T]) { + this.newJob[key] = value; + } + + @action + mutateEditJob(key: T, value: JobGlance[T]) { + if (this.editJob !== null) { + this.editJob[key] = value; + } + } + + @action + mutateImportJobListPageNumber(pageNumber: number) { + this.importJobListPageConfig.pageNumber = pageNumber; + } + + @action + validateJob(type: 'new' | 'edit', category: keyof JobGlance) { + const job = type === 'new' ? this.newJob : this.editJob!; + const errorMessage = + type === 'new' + ? this.validateNewJobErrorMessage + : this.validateEditJobErrorMessage; + + if (category === 'name') { + const name = job.name; + + if (isEmpty(name)) { + errorMessage.name = i18next.t('import-manager.validator.no-empty'); + } else if (size(name) > 48) { + errorMessage.name = i18next.t( + 'import-manager.validator.over-limit-size' + ); + } else if (!/^[\w\d\u4e00-\u9fa5]{1,48}$/.test(name)) { + errorMessage.name = i18next.t( + 'import-manager.validator.invalid-format' + ); + } else { + errorMessage.name = ''; + } + } + + if (category === 'description') { + const description = job.description; + + if (size(description) > 200) { + errorMessage.description = i18next.t( + 'import-manager.validator.over-limit-size' + ); + } else if (!/^[\w\d\u4e00-\u9fa5]{0,200}$/.test(description)) { + errorMessage.description = i18next.t( + 'import-manager.validator.invalid-format' + ); + } else { + errorMessage.description = ''; + } + } + } + + @action + resetJob(type: 'new' | 'edit') { + if (type === 'new') { + this.newJob = { + name: '', + description: '' + }; + } else { + this.editJob = null; + } + } + + @action + dispose() { + this.requestStatus = initRequestStatus(); + this.errorInfo = initErrorInfo(); + this.currentId = null; + this.jobDetailsStep = 'basic'; + this.selectedJobIndex = NaN; + this.selectedJob = null; + this.isCreateNewProperty = false; + + this.importJobListPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + this.isSearched = { + status: false, + value: '' + }; + + this.newJob = { + name: '', + description: '' + }; + + this.editJob = { + name: '', + description: '' + }; + + this.importJobList = []; + this.failedReason = []; + + this.validateNewJobErrorMessage = { + name: '', + description: '' + }; + + this.validateEditJobErrorMessage = { + name: '', + description: '' + }; + } + + fetchImportJobList = flow(function* fetchImportJobList( + this: ImportManagerStore + ) { + this.requestStatus.fetchImportJobList = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.currentId}/job-manager?page_no=${this.importJobListPageConfig.pageNumber}&page_size=10` + + (this.isSearched.status && this.searchWords !== '' + ? `&content=${this.searchWords}` + : '') + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchImportJobList.code = result.data.status; + throw new Error(result.data.message); + } + + this.importJobList = result.data.data.records; + this.importJobListPageConfig.pageTotal = result.data.data.total; + this.requestStatus.fetchImportJobList = 'success'; + } catch (error) { + this.requestStatus.fetchImportJobList = 'failed'; + this.errorInfo.fetchImportJobList.message = error.message; + } + }); + + createNewJob = flow(function* createNewJob(this: ImportManagerStore) { + this.requestStatus.createNewJob = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>(`${baseUrl}/${this.currentId}/job-manager`, { + job_name: this.newJob.name, + job_remarks: this.newJob.description + }) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.createNewJob.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.createNewJob = 'success'; + } catch (error) { + this.requestStatus.createNewJob = 'failed'; + this.errorInfo.createNewJob.message = error.message; + } + }); + + updateJobInfo = flow(function* updateJobInfo(this: ImportManagerStore) { + this.requestStatus.updateJobInfo = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .put>( + `${baseUrl}/${this.currentId}/job-manager/${this.selectedJob!.id}`, + { + job_name: this.editJob!.name, + job_remarks: this.editJob!.description + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.updateJobInfo.code = result.data.status; + throw new Error(result.data.message); + } + + this.selectedJob = result.data.data; + this.requestStatus.updateJobInfo = 'success'; + } catch (error) { + this.requestStatus.updateJobInfo = 'failed'; + this.errorInfo.updateJobInfo.message = error.message; + } + }); + + deleteJob = flow(function* deleteJob(this: ImportManagerStore, id: number) { + this.requestStatus.deleteJob = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .delete>( + `${baseUrl}/${this.currentId}/job-manager/${id}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.deleteJob.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.deleteJob = 'success'; + } catch (error) { + this.requestStatus.deleteJob = 'failed'; + this.errorInfo.deleteJob.message = error.message; + } + }); + + fetchFailedReason = flow(function* fetchFailedReason( + this: ImportManagerStore, + connectId: number, + jobId: number + ) { + this.requestStatus.fetchFailedReason = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${connectId}/job-manager/${jobId}/reason` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchFailedReason.code = result.data.status; + throw new Error(result.data.message); + } + + this.failedReason = result.data.data; + this.requestStatus.fetchFailedReason = 'success'; + } catch (error) { + this.requestStatus.fetchFailedReason = 'failed'; + this.errorInfo.fetchFailedReason.message = error.message; + } + }); +} + +export default createContext(new ImportManagerStore()); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts new file mode 100644 index 000000000..451613e09 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/dataImportRootStore.ts @@ -0,0 +1,407 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { remove, isUndefined } from 'lodash-es'; + +import { DataMapStore } from './dataMapStore'; +import { ServerDataImportStore } from './serverDataImportStore'; +import { + initErrorInfo, + initRequestStatus +} from '../../factory/dataImportStore/dataImportRootStore'; +import { baseUrl, responseData } from '../../types/common'; +import { + FileUploadResult, + FileUploadTask, + FileUploadQueue +} from '../../types/GraphManagementStore/dataImportStore'; +import { + VertexType, + VertexTypeListResponse, + EdgeType, + EdgeTypeListResponse +} from '../../types/GraphManagementStore/metadataConfigsStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +const MAX_CONCURRENT_UPLOAD = 5; + +export class DataImportRootStore { + dataMapStore: DataMapStore; + serverDataImportStore: ServerDataImportStore; + + constructor() { + this.dataMapStore = new DataMapStore(this); + this.serverDataImportStore = new ServerDataImportStore(this); + } + + @observable currentId: number | null = null; + @observable currentJobId: number | null = null; + @observable currentStatus = ''; + @observable currentStep = NaN; + + @observable requestStatus = initRequestStatus(); + @observable errorInfo = initErrorInfo(); + + @observable fileList: File[] = []; + @observable.ref fileHashes: Record = {}; + @observable fileUploadTasks: FileUploadTask[] = []; + @observable fileUploadQueue: FileUploadQueue[] = []; + @observable fileRetryUploadList: string[] = []; + + @observable.ref fileInfos: FileUploadResult[] = []; + @observable.ref vertexTypes: VertexType[] = []; + @observable.ref edgeTypes: EdgeType[] = []; + + @computed get successFileUploadTaskNames() { + return this.fileUploadTasks + .filter(({ status }) => status === 'success') + .map(({ name }) => name); + } + + @computed get unsuccessFileUploadTasks() { + return this.fileUploadTasks.filter(({ status }) => status !== 'success'); + } + + @action + setCurrentId(id: number) { + this.currentId = id; + } + + @action + setCurrentJobId(id: number) { + this.currentJobId = id; + } + + @action + setCurrentStatus(status: string) { + this.currentStatus = status; + } + + @action + setCurrentStep(step: number) { + this.currentStep = step; + } + + @action + updateFileList(files: File[]) { + this.fileList = [...files, ...this.fileList]; + } + + @action + initFileUploadTask(tasks: FileUploadTask) { + this.fileUploadTasks = [tasks, ...this.fileUploadTasks]; + } + + @action + addFileUploadQueue(element: FileUploadQueue) { + this.fileUploadQueue.push(element); + } + + @action + removeFileUploadQueue(fileName: string) { + remove(this.fileUploadQueue, ({ fileName: name }) => name === fileName); + } + + @action + mutateFileUploadQueue( + key: T, + value: FileUploadQueue[T], + index: number + ) { + this.fileUploadQueue[index][key] = value; + } + + @action + mutateFileUploadTasks( + key: T, + value: FileUploadTask[T], + fileName: string + ) { + const fileUploadTask = this.fileUploadTasks.find( + ({ name }) => name === fileName + )!; + + // users may click back button in browser + if (!isUndefined(fileUploadTask)) { + fileUploadTask[key] = value; + } + } + + @action + removeFileUploadTasks(fileName: string) { + remove(this.fileUploadTasks, ({ name }) => fileName === name); + } + + @action + addRetryFileUploadQueue(fileName: string) { + this.fileRetryUploadList.push(fileName); + } + + @action + pullRetryFileUploadQueue() { + return this.fileRetryUploadList.shift(); + } + + @action + resetAllFileInfos() { + this.fileList = []; + this.fileUploadTasks = []; + this.fileUploadQueue = []; + this.fileInfos = []; + } + + @action + dispose() { + this.currentId = null; + this.currentJobId = null; + this.currentStatus = ''; + this.currentStep = NaN; + this.vertexTypes = []; + this.edgeTypes = []; + + this.resetAllFileInfos(); + this.requestStatus = initRequestStatus(); + this.errorInfo = initErrorInfo(); + } + + fetchFilehashes = flow(function* fetchFilehashes( + this: DataImportRootStore, + fileNames: string[] + ) { + this.requestStatus.fetchFilehashes = 'pending'; + + try { + const result = yield axios + .get>>( + `${baseUrl}/${this.currentId}/job-manager/${ + this.currentJobId + }/upload-file/token?${fileNames + .map((name) => `names=${name}`) + .join('&')}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchFilehashes.code = result.data.status; + throw new Error(result.data.message); + } + + this.fileHashes = { ...this.fileHashes, ...result.data.data }; + this.requestStatus.fetchFilehashes = 'success'; + } catch (error) { + this.requestStatus.fetchFilehashes = 'failed'; + this.errorInfo.fetchFilehashes.message = error.message; + console.error(error.message); + } + }); + + uploadFiles = flow(function* uploadFiles( + this: DataImportRootStore, + { + fileName, + fileChunkList, + fileChunkTotal + }: { + fileName: string; + fileChunkList: { + chunkIndex: number; + chunk: Blob; + }; + fileChunkTotal: number; + } + ) { + this.requestStatus.uploadFiles = 'pending'; + const formData = new FormData(); + formData.append('file', fileChunkList.chunk); + + if (this.currentId === null || this.currentJobId === null) { + return; + } + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/upload-file?total=${fileChunkTotal}&index=${fileChunkList.chunkIndex}&name=${fileName}&token=${this.fileHashes[fileName]}`, + formData, + { + headers: { + 'Content-Type': 'multipart/form-data' + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.uploadFiles.code = result.data.status; + throw new Error(result.data.message); + } + + this.fileInfos.push(result.data.data); + this.requestStatus.uploadFiles = 'success'; + return result.data.data; + } catch (error) { + this.requestStatus.uploadFiles = 'failed'; + this.errorInfo.uploadFiles.message = error.message; + console.error(error.message); + } + }); + + deleteFiles = flow(function* deleteFiles( + this: DataImportRootStore, + fileName: string + ) { + this.requestStatus.deleteFiles = 'pending'; + + try { + const result = yield axios + .delete( + `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/upload-file?name=${fileName}&token=${this.fileHashes[fileName]}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.deleteFiles.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.deleteFiles = 'success'; + } catch (error) { + this.requestStatus.deleteFiles = 'failed'; + this.errorInfo.deleteFiles.message = error.message; + console.error(error.message); + } + }); + + sendUploadCompleteSignal = flow(function* sendUploadCompleteSignal( + this: DataImportRootStore + ) { + this.requestStatus.sendUploadCompleteSignal = 'pending'; + + try { + const result = yield axios + .put( + `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/upload-file/next-step` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.sendUploadCompleteSignal.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.sendUploadCompleteSignal = 'success'; + } catch (error) { + this.requestStatus.sendUploadCompleteSignal = 'failed'; + this.errorInfo.sendUploadCompleteSignal.message = error.message; + console.error(error.message); + } + }); + + sendMappingCompleteSignal = flow(function* sendMappingCompleteSignal( + this: DataImportRootStore + ) { + this.requestStatus.sendMappingCompleteSignal = 'pending'; + + try { + const result = yield axios + .put( + `${baseUrl}/${this.currentId}/job-manager/${this.currentJobId}/file-mappings/next-step` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.sendMappingCompleteSignal.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.sendMappingCompleteSignal = 'success'; + } catch (error) { + this.requestStatus.sendMappingCompleteSignal = 'failed'; + this.errorInfo.sendMappingCompleteSignal.message = error.message; + console.error(error.message); + } + }); + + fetchVertexTypeList = flow(function* fetchVertexTypeList( + this: DataImportRootStore + ) { + this.requestStatus.fetchVertexTypeList = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.currentId}/schema/vertexlabels`, + { + params: { + page_size: -1 + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchVertexTypeList.code = result.data.status; + throw new Error(result.data.message); + } + + this.vertexTypes = result.data.data.records; + this.requestStatus.fetchVertexTypeList = 'success'; + } catch (error) { + this.requestStatus.fetchVertexTypeList = 'failed'; + this.errorInfo.fetchVertexTypeList.message = error.message; + } + }); + + fetchEdgeTypeList = flow(function* fetchEdgeTypeList( + this: DataImportRootStore + ) { + this.requestStatus.fetchEdgeTypeList = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.currentId}/schema/edgelabels`, + { + params: { + page_size: -1 + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchEdgeTypeList.code = result.data.status; + throw new Error(result.data.message); + } + + this.edgeTypes = result.data.data.records; + this.requestStatus.fetchEdgeTypeList = 'success'; + } catch (error) { + this.requestStatus.fetchEdgeTypeList = 'failed'; + this.errorInfo.fetchEdgeTypeList.message = error.message; + } + }); +} + +export default createContext(new DataImportRootStore()); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts new file mode 100644 index 000000000..67bdcbe97 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/dataMapStore.ts @@ -0,0 +1,1321 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { isUndefined, isEmpty, cloneDeep, remove, flatMap } from 'lodash-es'; + +import { DataImportRootStore } from './dataImportRootStore'; +import { baseUrl, responseData } from '../../types/common'; +import { + initRequestStatus, + initErrorInfo, + createNewEdgeType, + createNewVertexType, + createValidateFileInfoErrorMessage, + createValidateAdvanceConfigErrorMessage +} from '../../factory/dataImportStore/dataMapStore'; +import { + FileMapInfo, + FileConfig, + FileMapResult, + VertexMap, + EdgeMap, + FileValidator, + ValueMapValidator +} from '../../types/GraphManagementStore/dataImportStore'; +import { checkIfLocalNetworkOffline, validateGraphProperty } from '../../utils'; + +import type { + VertexType, + EdgeType +} from '../../types/GraphManagementStore/metadataConfigsStore'; +import i18next from '../../../i18n'; + +export class DataMapStore { + dataImportRootStore: DataImportRootStore; + + constructor(dataImportRootStore: DataImportRootStore) { + this.dataImportRootStore = dataImportRootStore; + } + + // v1.3.1: check details from import-manager + @observable readOnly = false; + // v1.3.1: task process comes from import-manager entrance + @observable isIrregularProcess = false; + // v1.5.0 no check details but in progress when LOADING + @observable lock = false; + + @observable isExpandFileConfig = true; + // If one of the type info card is being edited + @observable isExpandTypeConfig = false; + @observable isAddNewTypeConfig = false; + @observable fileMapInfos: FileMapInfo[] = []; + // v1.3.1: preFetched file mapping infos from import-manager + @observable preFetchedFileMapInfos: FileMapInfo[] = []; + @observable selectedFileId: number = NaN; + @observable selectedFileInfo: FileMapInfo | null = null; + + @observable newVertexType: VertexMap = createNewVertexType(); + @observable editedVertexMap: VertexMap | null = null; + + @observable newEdgeType: EdgeMap = createNewEdgeType(); + @observable editedEdgeMap: EdgeMap | null = null; + + // validators + @observable + validateFileInfoErrorMessage: FileValidator = createValidateFileInfoErrorMessage(); + @observable + validateAdvanceConfigErrorMessage: ValueMapValidator = createValidateAdvanceConfigErrorMessage(); + + @observable requestStatus = initRequestStatus(); + @observable errorInfo = initErrorInfo(); + + @computed get isValidateFileInfo() { + return ( + !isEmpty(this.selectedFileInfo?.file_setting.delimiter) && + !isEmpty(this.selectedFileInfo?.file_setting.charset) && + !isEmpty(this.selectedFileInfo?.file_setting.date_format) && + !isEmpty(this.selectedFileInfo?.file_setting.skipped_line) && + Object.values(this.validateFileInfoErrorMessage).every( + (errorMessage) => errorMessage === '' + ) + ); + } + + @computed get isValidateSave() { + return ( + this.validateAdvanceConfigErrorMessage.null_values.every((value) => + isEmpty(value) + ) && + this.validateAdvanceConfigErrorMessage.value_mapping.every( + ({ column_name, values }) => { + const errorMessages = flatMap( + values, + ({ column_value, mapped_value }) => [column_value, mapped_value] + ); + + return ( + isEmpty(column_name) && + errorMessages.every((message) => isEmpty(message)) + ); + } + ) + ); + } + + @computed get filteredColumnNamesInVertexEditSelection() { + return this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => !this.editedVertexMap!.id_fields.includes(column_name) + ); + } + + @computed get filteredColumnNamesInVertexNewSelection() { + return this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => !this.newVertexType?.id_fields.includes(column_name) + ); + } + + @computed get filteredColumnNamesInEdgeEditSelection() { + return this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => + !this.editedEdgeMap!.source_fields.includes(column_name) && + !this.editedEdgeMap!.target_fields.includes(column_name) + ); + } + + @computed get filteredColumnNamesInEdgeNewSelection() { + return this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => + !this.newEdgeType.source_fields.includes(column_name) && + !this.newEdgeType.target_fields.includes(column_name) + ); + } + + @computed get filteredFileMapInfo() { + return this.fileMapInfos.filter(({ name }) => + this.dataImportRootStore.fileList.map(({ name }) => name).includes(name) + ); + } + + @action + switchReadOnly(isReadOnly: boolean) { + this.readOnly = isReadOnly; + } + + @action + switchLock(lock: boolean) { + this.lock = lock; + } + + @action + switchIrregularProcess(flag: boolean) { + this.isIrregularProcess = flag; + } + + @action + switchExpand(card: 'file' | 'type', flag: boolean) { + if (card === 'file') { + this.isExpandFileConfig = flag; + } else { + this.isExpandTypeConfig = flag; + } + } + + @action + switchEditTypeConfig(flag: boolean) { + this.isExpandTypeConfig = flag; + } + + @action + switchAddNewTypeConfig(flag: boolean) { + this.isAddNewTypeConfig = flag; + } + + @action + setSelectedFileId(id: number) { + this.selectedFileId = id; + } + + @action + setSelectedFileInfo() { + const fileInfo = this.fileMapInfos.find( + ({ id }) => id === this.selectedFileId + ); + + if (!isUndefined(fileInfo)) { + this.selectedFileInfo = fileInfo; + } + } + + @action + setFileConfig(key: T, value: FileConfig[T]) { + if (this.selectedFileInfo !== null) { + this.selectedFileInfo.file_setting[key] = value; + } + } + + @action + syncEditMap(type: 'vertex' | 'edge', mapIndex: number) { + if (type === 'vertex') { + this.editedVertexMap = cloneDeep( + this.selectedFileInfo!.vertex_mappings[mapIndex] + ); + } else { + this.editedEdgeMap = cloneDeep( + this.selectedFileInfo!.edge_mappings[mapIndex] + ); + } + } + + @action + setNewVertexConfig(key: T, value: VertexMap[T]) { + this.newVertexType[key] = value; + } + + @action + editVertexMapConfig( + key: T, + value: VertexMap[T], + vertexMapIndex: number + ) { + this.editedVertexMap![key] = value; + } + + @action + setNewEdgeConfig(key: T, value: EdgeMap[T]) { + this.newEdgeType[key] = value; + } + + @action + editEdgeMapConfig( + key: T, + value: EdgeMap[T], + edgeMapIndex: number + ) { + this.editedEdgeMap![key] = value; + } + + @action + setVertexFieldMappingKey(type: 'new' | 'edit', key: string, value?: string) { + if (type === 'new') { + this.newVertexType.field_mapping.unshift({ + column_name: key, + mapped_name: isUndefined(value) ? '' : value + }); + } else { + this.editedVertexMap!.field_mapping.unshift({ + column_name: key, + mapped_name: isUndefined(value) ? '' : value + }); + } + } + + @action + setEdgeFieldMappingKey(type: 'new' | 'edit', key: string, value?: string) { + if (type === 'new') { + this.newEdgeType.field_mapping.unshift({ + column_name: key, + mapped_name: isUndefined(value) ? '' : value + }); + } else { + this.editedEdgeMap!.field_mapping.unshift({ + column_name: key, + mapped_name: isUndefined(value) ? '' : value + }); + } + } + + @action + setVertexFieldMapping( + type: 'new' | 'edit', + value: string, + vertexMapFieldIndex: number + ) { + if (type === 'new') { + this.newVertexType.field_mapping[vertexMapFieldIndex].mapped_name = value; + } else { + this.editedVertexMap!.field_mapping[ + vertexMapFieldIndex + ].mapped_name = value; + } + } + + @action + setEdgeFieldMapping( + type: 'new' | 'edit', + value: string, + edgeMapFieldIndex: number + ) { + if (type === 'new') { + this.newEdgeType.field_mapping[edgeMapFieldIndex].mapped_name = value; + } else { + this.editedEdgeMap!.field_mapping[edgeMapFieldIndex].mapped_name = value; + } + } + + @action + removeVertexFieldMapping(type: 'new' | 'edit', columnName: string) { + if (type === 'new') { + remove( + this.newVertexType.field_mapping, + ({ column_name }) => column_name === columnName + ); + } else { + remove( + this.editedVertexMap!.field_mapping, + ({ column_name }) => column_name === columnName + ); + } + } + + @action + removeEdgeFieldMapping(type: 'new' | 'edit', columnName: string) { + if (type === 'new') { + remove( + this.newEdgeType.field_mapping, + ({ column_name }) => column_name === columnName + ); + } else { + remove( + this.editedEdgeMap!.field_mapping, + ({ column_name }) => column_name === columnName + ); + } + } + + @action + toggleVertexSelectAllFieldMapping( + type: 'new' | 'edit', + selectAll: boolean, + selectedVertex?: VertexType + ) { + if (selectAll) { + if (type === 'new') { + const existedFieldColumnNames = this.newVertexType.field_mapping.map( + ({ column_name }) => column_name + ); + + this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => + !existedFieldColumnNames.includes(column_name) && + !this.newVertexType.id_fields.includes(column_name) + ).map((columnName) => { + this.setVertexFieldMappingKey( + type, + columnName, + selectedVertex?.properties.find(({ name }) => name === columnName) + ?.name + ); + }); + } else { + const existedFieldColumnNames = this.editedVertexMap!.field_mapping.map( + ({ column_name }) => column_name + ); + + this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => + !existedFieldColumnNames.includes(column_name) && + !this.editedVertexMap!.id_fields.includes(column_name) + ).forEach((columnName) => { + this.setVertexFieldMappingKey( + type, + columnName, + selectedVertex?.properties.find(({ name }) => name === columnName) + ?.name + ); + }); + } + } else { + if (type === 'new') { + this.newVertexType.field_mapping = []; + } else { + this.editedVertexMap!.field_mapping = []; + } + } + } + + @action + toggleEdgeSelectAllFieldMapping( + type: 'new' | 'edit', + selectAll: boolean, + selectedEdge?: EdgeType + ) { + if (selectAll) { + if (type === 'new') { + const existedFieldColumnNames = this.newEdgeType.field_mapping.map( + ({ column_name }) => column_name + ); + + this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => + !existedFieldColumnNames.includes(column_name) && + !this.newEdgeType.source_fields.includes(column_name) && + !this.newEdgeType.target_fields.includes(column_name) + ).forEach((columnName) => { + this.setEdgeFieldMappingKey( + type, + columnName, + selectedEdge?.properties.find(({ name }) => name === columnName) + ?.name + ); + }); + } else { + const existedFieldColumnNames = this.editedEdgeMap!.field_mapping.map( + ({ column_name }) => column_name + ); + + this.selectedFileInfo!.file_setting.column_names.filter( + (column_name) => + !existedFieldColumnNames.includes(column_name) && + !this.editedEdgeMap!.source_fields.includes(column_name) && + !this.editedEdgeMap!.target_fields.includes(column_name) + ).map((columnName) => { + this.setEdgeFieldMappingKey( + type, + columnName, + selectedEdge?.properties.find(({ name }) => name === columnName) + ?.name + ); + }); + } + } else { + if (type === 'new') { + this.newEdgeType.field_mapping = []; + } else { + this.editedEdgeMap!.field_mapping = []; + } + } + } + + toggleCustomNullValue( + type: 'new' | 'edit', + collection: 'vertex' | 'edge', + flag: boolean + ) { + if (type === 'new') { + if (collection === 'vertex') { + if (flag) { + this.newVertexType.null_values.customized = ['']; + } else { + this.newVertexType.null_values.customized = []; + } + } else { + if (flag) { + this.newEdgeType.null_values.customized = ['']; + } else { + this.newEdgeType.null_values.customized = []; + } + } + } else { + if (collection === 'vertex') { + if (flag) { + this.editedVertexMap!.null_values.customized = ['']; + } else { + this.editedVertexMap!.null_values.customized = []; + } + } else { + if (flag) { + this.editedEdgeMap!.null_values.customized = ['']; + } else { + this.editedEdgeMap!.null_values.customized = []; + } + } + } + } + + editCheckedNullValues( + type: 'new' | 'edit', + collection: 'vertex' | 'edge', + values: string[] + ) { + if (type === 'new') { + if (collection === 'vertex') { + this.newVertexType.null_values.checked = values; + } else { + this.newEdgeType.null_values.checked = values; + } + } else { + if (collection === 'vertex') { + this.editedVertexMap!.null_values.checked = values; + } else { + this.editedEdgeMap!.null_values.checked = values; + } + } + } + + addCustomNullValues(type: 'new' | 'edit', collection: 'vertex' | 'edge') { + if (type === 'new') { + if (collection === 'vertex') { + this.newVertexType.null_values.customized.push(''); + } else { + this.newEdgeType.null_values.customized.push(''); + } + } else { + if (collection === 'vertex') { + this.editedVertexMap!.null_values.customized.push(''); + } else { + this.editedVertexMap!.null_values.customized.push(''); + } + } + } + + editCustomNullValues( + type: 'new' | 'edit', + collection: 'vertex' | 'edge', + value: string, + nullValueIndex: number + ) { + if (type === 'new') { + if (collection === 'vertex') { + this.newVertexType.null_values.customized[nullValueIndex] = value; + } else { + this.newEdgeType.null_values.customized[nullValueIndex] = value; + } + } else { + if (collection === 'vertex') { + this.editedVertexMap!.null_values.customized[nullValueIndex] = value; + } else { + this.editedEdgeMap!.null_values.customized[nullValueIndex] = value; + } + } + } + + @action + addVertexValueMapping(type: 'new' | 'edit') { + const newValueMapping = { + column_name: '', + values: [ + { + column_value: '', + mapped_value: '' + } + ] + }; + + if (type === 'new') { + this.newVertexType.value_mapping.push(newValueMapping); + } else { + this.editedVertexMap!.value_mapping.push(newValueMapping); + } + } + + @action + addEdgeValueMapping(type: 'new' | 'edit') { + const newValueMapping = { + column_name: '', + values: [ + { + column_value: '', + mapped_value: '' + } + ] + }; + + if (type === 'new') { + this.newEdgeType.value_mapping.push(newValueMapping); + } else { + this.editedEdgeMap!.value_mapping.push(newValueMapping); + } + } + + @action + addVertexValueMappingValue(type: 'new' | 'edit', vertexMapIndex: number) { + const newValue = { + column_value: '', + mapped_value: '' + }; + + if (type === 'new') { + this.newVertexType.value_mapping[vertexMapIndex].values.push(newValue); + } else { + this.editedVertexMap!.value_mapping[vertexMapIndex].values.push(newValue); + } + } + + @action + addEdgeValueMappingValue(type: 'new' | 'edit', vertexMapIndex: number) { + const newValue = { + column_value: '', + mapped_value: '' + }; + + if (type === 'new') { + this.newEdgeType.value_mapping[vertexMapIndex].values.push(newValue); + } else { + this.editedEdgeMap!.value_mapping[vertexMapIndex].values.push(newValue); + } + } + + @action + editVertexValueMappingColumnName( + type: 'new' | 'edit', + value: string, + valueMapIndex: number + ) { + if (type === 'new') { + this.newVertexType.value_mapping[valueMapIndex].column_name = value; + } else { + this.editedVertexMap!.value_mapping[valueMapIndex].column_name = value; + } + } + + @action + editEdgeValueMappingColumnName( + type: 'new' | 'edit', + value: string, + valueMapIndex: number + ) { + if (type === 'new') { + this.newEdgeType.value_mapping[valueMapIndex].column_name = value; + } else { + this.editedEdgeMap!.value_mapping[valueMapIndex].column_name = value; + } + } + + @action + editVertexValueMappingColumnValueName( + type: 'new' | 'edit', + field: 'column_value' | 'mapped_value', + value: string, + valueMapIndex: number, + valueIndex: number + ) { + if (type === 'new') { + this.newVertexType.value_mapping[valueMapIndex].values[valueIndex][ + field + ] = value; + } else { + this.editedVertexMap!.value_mapping[valueMapIndex].values[valueIndex][ + field + ] = value; + } + } + + @action + editEdgeValueMappingColumnValueName( + type: 'new' | 'edit', + field: 'column_value' | 'mapped_value', + value: string, + valueMapIndex: number, + valueIndex: number + ) { + if (type === 'new') { + this.newEdgeType.value_mapping[valueMapIndex].values[valueIndex][ + field + ] = value; + } else { + this.editedEdgeMap!.value_mapping[valueMapIndex].values[valueIndex][ + field + ] = value; + } + } + + @action + removeVertexValueMapping(type: 'new' | 'edit', valueMapIndex: number) { + if (type === 'new') { + remove( + this.newVertexType.value_mapping, + (_, index) => index === valueMapIndex + ); + } else { + remove( + this.editedVertexMap!.value_mapping, + (_, index) => index === valueMapIndex + ); + } + } + + @action + removeEdgeValueMapping(type: 'new' | 'edit', valueMapIndex: number) { + if (type === 'new') { + remove( + this.newEdgeType.value_mapping, + (_, index) => index === valueMapIndex + ); + } else { + remove( + this.editedEdgeMap!.value_mapping, + (_, index) => index === valueMapIndex + ); + } + } + + @action + removeVertexValueMappingValue( + type: 'new' | 'edit', + valueMapIndex: number, + valueIndex: number + ) { + if (type === 'new') { + remove( + this.newVertexType.value_mapping[valueMapIndex].values, + (_, index) => index === valueIndex + ); + } else { + remove( + this.editedVertexMap!.value_mapping[valueMapIndex].values, + (_, index) => index === valueIndex + ); + } + } + + @action + removeEdgeValueMappingValue( + type: 'new' | 'edit', + valueMapIndex: number, + valueIndex: number + ) { + if (type === 'new') { + remove( + this.newEdgeType.value_mapping[valueMapIndex].values, + (_, index) => index === valueIndex + ); + } else { + remove( + this.editedEdgeMap!.value_mapping[valueMapIndex].values, + (_, index) => index === valueIndex + ); + } + } + + @action + resetNewMap(newMap: 'vertex' | 'edge') { + if (newMap === 'vertex') { + this.newVertexType = createNewVertexType(); + } else { + this.newEdgeType = createNewEdgeType(); + } + } + + @action + resetEditMapping(editMapping: 'vertex' | 'edge') { + if (editMapping === 'vertex') { + this.editedVertexMap = createNewVertexType(); + } else { + this.editedEdgeMap = createNewEdgeType(); + } + } + + @action + validateFileInfo( + category: 'delimiter' | 'charset' | 'date_format' | 'skipped_line' + ) { + if (this.selectedFileInfo?.file_setting[category] === '') { + this.validateFileInfoErrorMessage[category] = i18next.t( + 'addition.store.cannot-be-empty1' + ); + return; + } + + if (category === 'date_format') { + const date_format = this.selectedFileInfo!.file_setting.date_format; + + if ( + date_format === 'yyyy-MM-dd' || + date_format === 'yyyy-MM-dd HH:mm:ss' || + date_format === 'yyyy-MM-dd HH:mm:ss.SSS' + ) { + this.validateFileInfoErrorMessage.date_format = ''; + return; + } + + if ( + !validateGraphProperty( + 'DATE', + // hack + this.selectedFileInfo!.file_setting.date_format.replace(/\w/g, '1') + ) + ) { + this.validateFileInfoErrorMessage.date_format = i18next.t( + 'addition.store.incorrect-time-format' + ); + return; + } + } + + this.validateFileInfoErrorMessage[category] = ''; + } + + @action + validateValueMapping( + type: 'vertex' | 'edge', + status: 'new' | 'edit', + category: 'null_values' | 'value_mappings', + optionIndex: number, + valueMapOptions?: { + field: 'column_name' | 'column_value' | 'mapped_value'; + valueIndex?: number; + } + ) { + let mapping; + + if (type === 'vertex') { + mapping = status === 'new' ? this.newVertexType : this.editedVertexMap; + } else { + mapping = status === 'new' ? this.newEdgeType : this.editedEdgeMap; + } + + if (category === 'null_values') { + const value = mapping!.null_values.customized[optionIndex]; + + if (isEmpty(value)) { + this.validateAdvanceConfigErrorMessage.null_values[ + optionIndex + ] = i18next.t('data-configs.validator.no-empty'); + } else { + this.validateAdvanceConfigErrorMessage.null_values[optionIndex] = ''; + } + } + + if (category === 'value_mappings') { + const { column_name, values } = mapping!.value_mapping[optionIndex]; + + if (valueMapOptions?.field === 'column_name') { + this.validateAdvanceConfigErrorMessage.value_mapping[ + optionIndex + ].column_name = isEmpty(column_name) + ? i18next.t('data-configs.validator.no-empty') + : ''; + } else { + const { column_value, mapped_value } = values[ + valueMapOptions?.valueIndex! + ]; + + if (valueMapOptions?.field === 'column_value') { + this.validateAdvanceConfigErrorMessage.value_mapping[ + optionIndex + ].values[valueMapOptions!.valueIndex!].column_value = isEmpty( + column_value + ) + ? i18next.t('data-configs.validator.no-empty') + : ''; + } + + if (valueMapOptions?.field === 'mapped_value') { + this.validateAdvanceConfigErrorMessage.value_mapping[ + optionIndex + ].values[valueMapOptions!.valueIndex!].mapped_value = isEmpty( + mapped_value + ) + ? i18next.t('data-configs.validator.no-empty') + : ''; + } + } + } + } + + @action + addValidateValueMappingOption( + category: 'null_values' | 'value_mappings' | 'value_mappings_value', + valueMapIndex?: number + ) { + if (category === 'null_values') { + this.validateAdvanceConfigErrorMessage.null_values.push(''); + } + + if (category === 'value_mappings') { + this.validateAdvanceConfigErrorMessage.value_mapping.push({ + column_name: '', + values: [ + { + column_value: '', + mapped_value: '' + } + ] + }); + } + + if (category === 'value_mappings_value') { + this.validateAdvanceConfigErrorMessage.value_mapping[ + valueMapIndex! + ].values.push({ + column_value: '', + mapped_value: '' + }); + } + } + + @action + syncValidateNullAndValueMappings(type: 'vertex' | 'edge') { + const { null_values, value_mapping } = + type === 'vertex' ? this.editedVertexMap! : this.editedEdgeMap!; + + null_values.customized.forEach(() => { + this.validateAdvanceConfigErrorMessage.null_values.push(''); + }); + + value_mapping.forEach(({ values }) => { + this.validateAdvanceConfigErrorMessage.value_mapping.push({ + column_name: '', + values: values.map(() => ({ + column_value: '', + mapped_value: '' + })) + }); + }); + } + + @action + removeValidateValueMappingOption( + type: 'vertex' | 'edge', + status: 'new' | 'edit', + category: 'null_values' | 'value_mappings' | 'value_mappings_value', + optionIndex: number, + valueMappingValueIndex?: number + ) { + let mapping; + + if (type === 'vertex') { + mapping = status === 'new' ? this.newVertexType : this.editedVertexMap; + } else { + mapping = status === 'new' ? this.newEdgeType : this.editedEdgeMap; + } + + if (category === 'null_values') { + remove( + this.validateAdvanceConfigErrorMessage.null_values, + (_, index) => index === optionIndex + ); + } + + if (category === 'value_mappings') { + remove( + this.validateAdvanceConfigErrorMessage.value_mapping, + (_, index) => index === optionIndex + ); + } + + if (category === 'value_mappings_value') { + remove( + this.validateAdvanceConfigErrorMessage.value_mapping[optionIndex] + .values, + (_, index) => index === valueMappingValueIndex + ); + } + } + + @action + allowAddPropertyMapping(type: 'vertex' | 'edge') { + let valueMapping; + + if (type === 'vertex') { + valueMapping = this.isExpandTypeConfig + ? this.editedVertexMap!.value_mapping + : this.newVertexType.value_mapping; + } else { + valueMapping = this.isExpandTypeConfig + ? this.editedEdgeMap!.value_mapping + : this.newEdgeType.value_mapping; + } + + return valueMapping.every((_, valueMapIndex) => + this.allowAddPropertyValueMapping(type, valueMapIndex) + ); + } + + @action + allowAddPropertyValueMapping(type: 'vertex' | 'edge', valueMapIndex: number) { + let currentValueMapping; + + if (type === 'vertex') { + currentValueMapping = this.isExpandTypeConfig + ? this.editedVertexMap!.value_mapping + : this.newVertexType.value_mapping; + } else { + currentValueMapping = this.isExpandTypeConfig + ? this.editedEdgeMap!.value_mapping + : this.newEdgeType.value_mapping; + } + + // when status is edit, init currentValueMapping is empty + // it's weired that TS has no error in destruction below + // where column_name or values could be undefined + // if (isEmpty(currentValueMapping[valueMapIndex])) { + // return true; + // } + + const { column_name, values } = currentValueMapping[valueMapIndex]; + + return ( + !isEmpty(column_name) && + values.every( + ({ column_value, mapped_value }) => + !isEmpty(column_value) && !isEmpty(mapped_value) + ) && + this.validateAdvanceConfigErrorMessage.value_mapping[ + valueMapIndex + ].values.every( + ({ column_value, mapped_value }) => + isEmpty(column_value) && isEmpty(mapped_value) + ) + ); + } + + @action + resetValidateFileInfoErrorMessage() { + this.validateFileInfoErrorMessage = createValidateFileInfoErrorMessage(); + } + + @action + resetValidateValueMapping(category: 'null_values' | 'value_mapping' | 'all') { + switch (category) { + case 'null_values': + case 'value_mapping': + this.validateAdvanceConfigErrorMessage[category] = []; + return; + case 'all': + this.validateAdvanceConfigErrorMessage = createValidateAdvanceConfigErrorMessage(); + return; + } + } + + @action + resetDataMaps() { + this.isExpandTypeConfig = false; + this.isAddNewTypeConfig = false; + + this.newVertexType = createNewVertexType(); + this.editedVertexMap = null; + + this.newEdgeType = createNewEdgeType(); + this.editedEdgeMap = null; + + this.validateFileInfoErrorMessage = createValidateFileInfoErrorMessage(); + this.validateAdvanceConfigErrorMessage = createValidateAdvanceConfigErrorMessage(); + + this.requestStatus = initRequestStatus(); + this.errorInfo = initErrorInfo(); + } + + @action + dispose() { + this.resetDataMaps(); + + this.readOnly = false; + this.lock = false; + this.isIrregularProcess = false; + this.isExpandFileConfig = true; + this.fileMapInfos = []; + this.preFetchedFileMapInfos = []; + this.selectedFileId = NaN; + this.selectedFileInfo = null; + } + + fetchDataMaps = flow(function* fetchDataMaps(this: DataMapStore) { + this.requestStatus.fetchDataMaps = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings`, + { + params: { + page_size: -1 + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchDataMaps.code = result.data.status; + throw new Error(result.data.message); + } + + this.fileMapInfos = result.data.data.records; + this.requestStatus.fetchDataMaps = 'success'; + } catch (error) { + this.requestStatus.fetchDataMaps = 'failed'; + this.errorInfo.fetchDataMaps.message = error.message; + console.error(error.message); + } + }); + + updateFileConfig = flow(function* updateFileConfig( + this: DataMapStore, + fileId: number + ) { + this.requestStatus.updateFileConfig = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/file-setting`, + this.selectedFileInfo?.file_setting + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.updateFileConfig.code = result.data.status; + throw new Error(result.data.message); + } + + this.selectedFileInfo!.file_setting = result.data.data.file_setting; + this.requestStatus.updateFileConfig = 'success'; + } catch (error) { + this.requestStatus.updateFileConfig = 'failed'; + this.errorInfo.updateFileConfig.message = error.message; + console.error(error.message); + } + }); + + updateVertexMap = flow(function* updateVertexMap( + this: DataMapStore, + method: 'add' | 'upgrade' | 'delete', + fileId: number + ) { + this.requestStatus.updateVertexMap = 'pending'; + + try { + let result: AxiosResponse>; + + switch (method) { + case 'add': { + const newVertexType = cloneDeep(this.newVertexType); + + if ( + newVertexType.null_values.checked.includes('NULL') && + !newVertexType.null_values.checked.includes('null') + ) { + newVertexType.null_values.checked.push('null'); + } + + result = yield axios + .post( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/vertex-mappings`, + newVertexType + ) + .catch(checkIfLocalNetworkOffline); + break; + } + case 'upgrade': { + const editedVertexMap = cloneDeep(this.editedVertexMap); + + if ( + editedVertexMap!.null_values.checked.includes('NULL') && + !editedVertexMap!.null_values.checked.includes('null') + ) { + editedVertexMap!.null_values.checked.push('null'); + } + + result = yield axios + .put( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/vertex-mappings/${this.editedVertexMap?.id}`, + editedVertexMap + ) + .catch(checkIfLocalNetworkOffline); + break; + } + case 'delete': + result = yield axios + .delete( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/vertex-mappings/${this.editedVertexMap?.id}` + ) + .catch(checkIfLocalNetworkOffline); + break; + } + + if (result.data.status !== 200) { + this.errorInfo.updateVertexMap.code = result.data.status; + throw new Error(result.data.message); + } + + this.selectedFileInfo!.vertex_mappings = result.data.data.vertex_mappings; + this.requestStatus.updateVertexMap = 'success'; + } catch (error) { + this.requestStatus.updateVertexMap = 'failed'; + this.errorInfo.updateVertexMap.message = error.message; + console.error(error.message); + } + }); + + updateEdgeMap = flow(function* updateEdgeMap( + this: DataMapStore, + method: 'add' | 'upgrade' | 'delete', + fileId: number + ) { + this.requestStatus.updateEdgeMap = 'pending'; + + try { + let result: AxiosResponse>; + + switch (method) { + case 'add': { + const newEdgeType = cloneDeep(this.newEdgeType); + + if ( + newEdgeType.null_values.checked.includes('NULL') && + !newEdgeType.null_values.checked.includes('null') + ) { + newEdgeType.null_values.checked.push('null'); + } + + result = yield axios + .post( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/edge-mappings`, + newEdgeType + ) + .catch(checkIfLocalNetworkOffline); + break; + } + case 'upgrade': { + const editedEdgeMap = cloneDeep(this.editedEdgeMap); + + if ( + editedEdgeMap!.null_values.checked.includes('NULL') && + !editedEdgeMap!.null_values.checked.includes('null') + ) { + editedEdgeMap!.null_values.checked.push('null'); + } + + result = yield axios + .put( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/edge-mappings/${this.editedEdgeMap?.id}`, + this.editedEdgeMap + ) + .catch(checkIfLocalNetworkOffline); + break; + } + case 'delete': + result = yield axios + .delete( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/${fileId}/edge-mappings/${this.editedEdgeMap?.id}` + ) + .catch(checkIfLocalNetworkOffline); + break; + } + + if (result.data.status !== 200) { + this.errorInfo.updateEdgeMap.code = result.data.status; + throw new Error(result.data.message); + } + + this.selectedFileInfo!.edge_mappings = result.data.data.edge_mappings; + this.requestStatus.updateEdgeMap = 'success'; + } catch (error) { + this.requestStatus.updateEdgeMap = 'failed'; + this.errorInfo.updateEdgeMap.message = error.message; + console.error(error.message); + } + }); + + deleteVertexMap = flow(function* deleteVertexMap( + this: DataMapStore, + mapIndex: number + ) { + this.requestStatus.deleteVertexMap = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .delete>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ + this.dataImportRootStore.currentJobId + }/file-mappings/${this.selectedFileInfo!.id}/vertex-mappings/${ + this.selectedFileInfo?.vertex_mappings[mapIndex].id + }` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.deleteVertexMap.code = result.data.status; + throw new Error(result.data.message); + } + + this.selectedFileInfo!.vertex_mappings = result.data.data.vertex_mappings; + this.requestStatus.deleteVertexMap = 'success'; + } catch (error) { + this.requestStatus.deleteVertexMap = 'failed'; + this.errorInfo.deleteVertexMap.message = error.message; + console.error(error.message); + } + }); + + deleteEdgeMap = flow(function* deleteEdgeMap( + this: DataMapStore, + mapIndex: number + ) { + this.requestStatus.deleteEdgeMap = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .delete>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ + this.dataImportRootStore.currentJobId + }/file-mappings/${this.selectedFileInfo!.id}/edge-mappings/${ + this.selectedFileInfo?.edge_mappings[mapIndex].id + }` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.deleteEdgeMap.code = result.data.status; + throw new Error(result.data.message); + } + + this.selectedFileInfo!.edge_mappings = result.data.data.edge_mappings; + this.requestStatus.deleteEdgeMap = 'success'; + } catch (error) { + this.requestStatus.deleteEdgeMap = 'failed'; + this.errorInfo.deleteEdgeMap.message = error.message; + console.error(error.message); + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts new file mode 100644 index 000000000..c25c2f4ff --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/dataImportStore/serverDataImportStore.ts @@ -0,0 +1,516 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { size, isUndefined } from 'lodash-es'; +import isInt from 'validator/lib/isInt'; + +import { DataImportRootStore } from './dataImportRootStore'; +import i18next from '../../../i18n'; +import { baseUrl, responseData } from '../../types/common'; +import { + LoadParameter, + ImportTasks, + AllImportTasksRecords +} from '../../types/GraphManagementStore/dataImportStore'; +import { + initRequestStatus, + initErrorInfo, + createValidateFileInfoErrorMessage +} from '../../../stores/factory/dataImportStore/serverDataImportStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +export class ServerDataImportStore { + dataImportRootStore: DataImportRootStore; + + constructor(dataImportRootStore: DataImportRootStore) { + this.dataImportRootStore = dataImportRootStore; + } + + @observable requestStatus = initRequestStatus(); + @observable errorInfo = initErrorInfo(); + + // v1.3.1 + @observable readOnly = false; + @observable importConfigReadOnly = false; + @observable isIrregularProcess = false; + + @observable isExpandImportConfig = true; + @observable isImporting = false; + @observable isImportFinished = false; + @observable importConfigs: LoadParameter | null = null; + @observable + validateImportConfigErrorMessage = createValidateFileInfoErrorMessage(); + + @observable importTasks: ImportTasks[] = []; + @observable.ref fileImportTaskIds: number[] = []; + @observable errorLogs = ''; + + @computed get isServerStartImport() { + return this.requestStatus.startImport !== 'standby'; + } + + @computed get successImportFileStatusNumber() { + return size(this.importTasks.filter(({ status }) => status === 'SUCCEED')); + } + + @computed get pausedImportFileNumber() { + return size(this.importTasks.filter(({ status }) => status === 'PAUSED')); + } + + @computed get abortImportFileNumber() { + return size(this.importTasks.filter(({ status }) => status === 'STOPPED')); + } + + @action + switchReadOnly(isReadOnly: boolean) { + this.readOnly = isReadOnly; + } + + @action + switchImportConfigReadOnly(isReadOnly: boolean) { + this.importConfigReadOnly = isReadOnly; + } + + @action + switchIrregularProcess(flag: boolean) { + this.isIrregularProcess = flag; + } + + @action + switchExpandImportConfig(flag: boolean) { + this.isExpandImportConfig = flag; + } + + @action + switchImporting(flag: boolean) { + this.isImporting = flag; + } + + @action + switchImportFinished(flag: boolean) { + this.isImportFinished = flag; + } + + @action + switchFetchImportStatus(status: string) { + this.requestStatus.fetchImportTasks = status; + } + + @action + syncImportConfigs(configs: LoadParameter) { + this.importConfigs = configs; + } + + @action + mutateImportConfigs( + key: T, + value: LoadParameter[T] + ) { + this.importConfigs![key] = value; + } + + @action + validateImportConfigs(key: keyof LoadParameter) { + switch (key) { + case 'max_parse_errors': + case 'max_insert_errors': + if (this.importConfigs![key] === '') { + this.validateImportConfigErrorMessage[key] = i18next.t( + 'server-data-import.validator.no-empty' + ); + + return; + } else if ( + !isInt(String(this.importConfigs![key]), { min: -1 }) || + String(Number(this.importConfigs![key])) === '0' + ) { + this.validateImportConfigErrorMessage[key] = i18next.t( + 'server-data-import.validator.need-integer-with-negative' + ); + + return; + } + + break; + case 'insert_timeout': + case 'retry_interval': + case 'retry_times': + if (this.importConfigs![key] === '') { + this.validateImportConfigErrorMessage[key] = i18next.t( + 'server-data-import.validator.no-empty' + ); + + return; + } else if (!isInt(String(this.importConfigs![key]), { min: 1 })) { + this.validateImportConfigErrorMessage[key] = i18next.t( + 'server-data-import.validator.need-integer' + ); + + return; + } + + break; + } + + this.validateImportConfigErrorMessage[key] = ''; + } + + @action + resetValidateImportConfigs() { + this.validateImportConfigErrorMessage = createValidateFileInfoErrorMessage(); + } + + @action + resetImportTasks() { + this.importTasks = []; + } + + @action + dispose() { + this.readOnly = false; + this.importConfigReadOnly = false; + this.isIrregularProcess = false; + this.requestStatus = initRequestStatus(); + this.errorInfo = initErrorInfo(); + this.errorLogs = ''; + this.isExpandImportConfig = true; + this.isImporting = false; + this.isImportFinished = false; + this.importConfigs = null; + this.importTasks = []; + this.fileImportTaskIds = []; + this.validateImportConfigErrorMessage = createValidateFileInfoErrorMessage(); + } + + fetchImportTasks = flow(function* fetchImportTasks( + this: ServerDataImportStore, + taskIds: number[] + ) { + this.requestStatus.fetchImportTasks = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ + this.dataImportRootStore.currentJobId + }/load-tasks/ids?${taskIds.map((id) => 'task_ids=' + id).join('&')}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchImportTasks.code = result.data.status; + throw new Error(result.data.message); + } + + this.importTasks = result.data.data; + + if (!this.importTasks.some(({ status }) => status === 'RUNNING')) { + this.switchFetchImportStatus('pending'); + this.switchImporting(false); + this.switchImportFinished(true); + } + + this.requestStatus.fetchImportTasks = 'success'; + } catch (error) { + this.requestStatus.fetchImportTasks = 'failed'; + this.errorInfo.fetchImportTasks.message = error.message; + console.error(error.message); + } + }); + + fetchAllImportTasks = flow(function* fetchAllImportTasks( + this: ServerDataImportStore + ) { + this.requestStatus.fetchImportTasks = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchImportTasks.code = result.data.status; + throw new Error(result.data.message); + } + + this.importTasks = result.data.data.records; + + if (!this.importTasks.some(({ status }) => status === 'RUNNING')) { + this.switchFetchImportStatus('pending'); + this.switchImporting(false); + this.switchImportFinished(true); + } + + this.requestStatus.fetchImportTasks = 'success'; + } catch (error) { + this.requestStatus.fetchImportTasks = 'failed'; + this.errorInfo.fetchImportTasks.message = error.message; + console.error(error.message); + } + }); + + setConfigParams = flow(function* setConfigParams( + this: ServerDataImportStore + ) { + this.requestStatus.setConfigParams = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/file-mappings/load-parameter`, + this.importConfigs + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.setConfigParams.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.setConfigParams = 'success'; + } catch (error) { + this.requestStatus.setConfigParams = 'failed'; + this.errorInfo.setConfigParams.message = error.message; + console.error(error.message); + } + }); + + startImport = flow(function* startImport( + this: ServerDataImportStore, + fileIds: number[] + ) { + this.requestStatus.startImport = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${ + this.dataImportRootStore.currentJobId + }/load-tasks/start?${fileIds + .map((id) => 'file_mapping_ids=' + id) + .join('&')}`, + {} + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.startImport.code = result.data.status; + throw new Error(result.data.message); + } + + this.fileImportTaskIds = result.data.data.map(({ id }) => id); + this.requestStatus.startImport = 'success'; + } catch (error) { + this.requestStatus.startImport = 'failed'; + this.errorInfo.startImport.message = error.message; + console.error(error.message); + } + }); + + pauseImport = flow(function* pauseImport( + this: ServerDataImportStore, + taskId: number + ) { + this.requestStatus.pauseImport = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/pause`, + {}, + { + params: { + task_id: taskId + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.pauseImport.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.pauseImport = 'success'; + } catch (error) { + this.requestStatus.pauseImport = 'failed'; + this.errorInfo.pauseImport.message = error.message; + console.error(error.message); + } + }); + + resumeImport = flow(function* resumeImport( + this: ServerDataImportStore, + taskId: number + ) { + this.requestStatus.resumeImport = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/resume`, + {}, + { + params: { + task_id: taskId + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.resumeImport.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.resumeImport = 'success'; + } catch (error) { + this.requestStatus.resumeImport = 'failed'; + this.errorInfo.resumeImport.message = error.message; + console.error(error.message); + } + }); + + abortImport = flow(function* abortImport( + this: ServerDataImportStore, + taskId: number + ) { + this.requestStatus.abortImport = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/stop`, + {}, + { + params: { + task_id: taskId + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.abortImport.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.abortImport = 'success'; + } catch (error) { + this.requestStatus.abortImport = 'failed'; + this.errorInfo.abortImport.message = error.message; + console.error(error.message); + } + }); + + retryImport = flow(function* retryImport( + this: ServerDataImportStore, + taskId: number + ) { + this.requestStatus.retryImport = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/retry`, + {}, + { + params: { + task_id: taskId + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.retryImport.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.retryImport = 'success'; + } catch (error) { + this.requestStatus.retryImport = 'failed'; + this.errorInfo.retryImport.message = error.message; + console.error(error.message); + } + }); + + deleteTaskImport = flow(function* deleteTaskImport( + this: ServerDataImportStore, + taskId: number + ) { + this.requestStatus.deleteTaskImport = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .delete>( + `${baseUrl}/${this.dataImportRootStore.currentId}/job-manager/${this.dataImportRootStore.currentJobId}/load-tasks/${taskId}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.deleteTaskImport.code = result.data.status; + throw new Error(result.data.message); + } + + this.requestStatus.deleteTaskImport = 'success'; + } catch (error) { + this.requestStatus.deleteTaskImport = 'failed'; + this.errorInfo.deleteTaskImport.message = error.message; + console.error(error.message); + } + }); + + checkErrorLogs = flow(function* checkErrorLogs( + this: ServerDataImportStore, + id: number, + jobId: number, + taskId: number + ) { + this.requestStatus.checkErrorLogs = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .get>( + `${baseUrl}/${id}/job-manager/${jobId}/load-tasks/${taskId}/reason` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.checkErrorLogs.code = result.data.status; + throw new Error(result.data.message); + } + + this.errorLogs = result.data.data; + this.requestStatus.checkErrorLogs = 'success'; + } catch (error) { + this.requestStatus.checkErrorLogs = 'failed'; + this.errorInfo.checkErrorLogs.message = error.message; + console.error(error.message); + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/graphManagementStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/graphManagementStore.ts new file mode 100644 index 000000000..d22e5e782 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/graphManagementStore.ts @@ -0,0 +1,571 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action, flow } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; + +import { baseUrl, responseData } from '../types/common'; +import { + LincenseInfo, + GraphData, + GraphDataConfig, + GraphDataPageConfig, + GraphDataResponse +} from '../types/GraphManagementStore/graphManagementStore'; +import i18next from '../../i18n'; + +export class GraphManagementStore { + [key: string]: any; + + // display create new graph layout + @observable showCreateNewGraph = false; + + // display delete modal after dropdown click in GraphList + @observable showDeleteModal = false; + + // disable all other buttons except from the current new/edit layout + @observable selectedEditIndex: number | null = null; + + // values from the Search component + @observable searchWords = ''; + + @observable errorInfo = { + fetchLicenseInfo: { + code: NaN, + message: '' + }, + fetchIdList: { + code: NaN, + message: '' + }, + fetchGraphData: { + code: NaN, + message: '' + }, + AddGraphData: { + code: NaN, + message: '' + }, + upgradeGraphData: { + code: NaN, + message: '' + }, + deleteGraphData: { + code: NaN, + message: '' + } + }; + + // searched results rather than initial fetched result + @observable.shallow isSearched = { + status: false, + value: '' + }; + + // is sidebar in graphdata details has expanded + @observable isExpanded = false; + + // is clicekd submit or save to validate + @observable isValidated = false; + + @observable.shallow requestStatus = { + fetchLicenseInfo: 'standby', + fetchIdList: 'standby', + fetchGraphData: 'standby', + AddGraphData: 'standby', + upgradeGraphData: 'standby', + deleteGraphData: 'standby' + }; + + @observable validateErrorMessage: Record = { + name: '', + graph: '', + host: '', + port: '', + usernameAndPassword: '' + }; + + @observable.shallow newGraphData: GraphDataConfig = { + name: '', + graph: '', + host: '', + port: '', + username: '', + password: '' + }; + + @observable.shallow editGraphData: GraphDataConfig = { + name: '', + graph: '', + host: '', + port: '', + username: '', + password: '' + }; + + @observable.ref idList: { id: number; name: string }[] = []; + @observable.ref graphData: GraphData[] = []; + @observable.ref licenseInfo: LincenseInfo | null = null; + + @observable.shallow graphDataPageConfig: GraphDataPageConfig = { + pageNumber: 1, + pageSize: 10, + pageTotal: 0 + }; + + @action + dispose() { + this.showCreateNewGraph = false; + this.showDeleteModal = false; + this.selectedEditIndex = null; + this.searchWords = ''; + this.isSearched = { + status: false, + value: '' + }; + this.isValidated = false; + this.isExpanded = false; + this.requestStatus = { + fetchLicenseInfo: 'standby', + fetchIdList: 'standby', + fetchGraphData: 'standby', + AddGraphData: 'standby', + upgradeGraphData: 'standby', + deleteGraphData: 'standby' + }; + this.graphData = []; + this.graphDataPageConfig = { + pageNumber: 1, + pageSize: 10, + pageTotal: 0 + }; + this.resetGraphDataConfig('new'); + this.resetGraphDataConfig('edit'); + this.resetErrorInfo(); + this.resetValidateErrorMessage(); + } + + @action + switchCreateNewGraph(flag: boolean) { + this.showCreateNewGraph = flag; + } + + @action + switchDeleteModal(flag: boolean) { + this.showDeleteModal = flag; + } + + @action + switchExpanded(flag: boolean) { + this.isExpanded = flag; + } + + @action + changeSelectedEditIndex(index: number | null) { + this.selectedEditIndex = index; + } + + @action + mutateSearchWords(text: string) { + this.searchWords = text; + } + + @action + mutateGraphDataConfig(key: string, type: 'new' | 'edit') { + return (eventTarget: HTMLInputElement) => { + this.isValidated = false; + + if (type === 'new') { + this.newGraphData[key] = eventTarget.value; + } + + if (type === 'edit') { + this.editGraphData[key] = eventTarget.value; + } + }; + } + + @action + swtichIsSearchedStatus(isSearched: boolean) { + this.isSearched.status = isSearched; + + isSearched + ? (this.isSearched.value = this.searchWords) + : (this.isSearched.value = ''); + } + + @action + fillInGraphDataConfig(index: number) { + this.editGraphData.id = String(this.graphData[index].id); + this.editGraphData.name = this.graphData[index].name; + this.editGraphData.graph = this.graphData[index].graph; + this.editGraphData.host = this.graphData[index].host; + this.editGraphData.port = String(this.graphData[index].port); + this.editGraphData.username = this.graphData[index].username; + this.editGraphData.password = this.graphData[index].password; + } + + @action + fillInGraphDataDefaultConfig() { + this.newGraphData.name = 'test'; + this.newGraphData.graph = 'hugegraph'; + this.newGraphData.host = '0.0.0.0'; + this.newGraphData.port = '8080'; + } + + @action + resetGraphDataConfig(type: 'new' | 'edit') { + if (type === 'new') { + Object.keys(this.newGraphData).forEach((key) => { + this.newGraphData[key] = ''; + }); + } + + if (type === 'edit') { + Object.keys(this.newGraphData).forEach((key) => { + this.editGraphData[key] = ''; + }); + } + } + + @action + mutatePageNumber(pageNumber: number) { + this.graphDataPageConfig.pageNumber = pageNumber; + } + + @action + validate(type: 'new' | 'edit') { + const nameReg = /^[A-Za-z]\w{0,47}$/; + const hostReg = /((\d{1,3}\.){3}\d{1,3}|([\w!~*'()-]+\.)*[\w!~*'()-]+)$/; + const portReg = /^([1-9]|[1-9]\d{1}|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/; + const dataName = type + 'GraphData'; + let readyToSubmit = true; + + this.resetValidateErrorMessage(); + + if (!nameReg.test(this[dataName].name)) { + this[dataName].name.length === 0 + ? (this.validateErrorMessage.name = i18next.t( + 'addition.store.required' + )) + : (this.validateErrorMessage.name = i18next.t( + 'addition.store.no-match-input-requirements' + )); + readyToSubmit = false; + } + + if (!nameReg.test(this[dataName].graph)) { + this[dataName].graph.length === 0 + ? (this.validateErrorMessage.graph = i18next.t( + 'addition.store.required' + )) + : (this.validateErrorMessage.graph = i18next.t( + 'addition.store.no-match-input-requirements' + )); + readyToSubmit = false; + } + + if (!hostReg.test(this[dataName].host)) { + this[dataName].host.length === 0 + ? (this.validateErrorMessage.host = i18next.t( + 'addition.store.required' + )) + : (this.validateErrorMessage.host = i18next.t('addition.store.rule1')); + readyToSubmit = false; + } + + if (!portReg.test(this[dataName].port)) { + this[dataName].port.length === 0 + ? (this.validateErrorMessage.port = i18next.t( + 'addition.store.required' + )) + : (this.validateErrorMessage.port = i18next.t('addition.store.rule2')); + readyToSubmit = false; + } + + if ( + dataName === 'newGraphData' && + ((this[dataName].username.length !== 0 && + this[dataName].password.length === 0) || + (this[dataName].username.length === 0 && + this[dataName].password.length !== 0)) + ) { + this.validateErrorMessage.usernameAndPassword = i18next.t( + 'addition.store.rule3' + ); + readyToSubmit = false; + } + + return readyToSubmit; + } + + @action + switchValidateStatus(flag: boolean) { + this.isValidated = flag; + } + + @action + resetErrorInfo() { + this.errorInfo = { + fetchLicenseInfo: { + code: NaN, + message: '' + }, + fetchIdList: { + code: NaN, + message: '' + }, + fetchGraphData: { + code: NaN, + message: '' + }, + AddGraphData: { + code: NaN, + message: '' + }, + upgradeGraphData: { + code: NaN, + message: '' + }, + deleteGraphData: { + code: NaN, + message: '' + } + }; + } + + @action + resetValidateErrorMessage() { + Object.keys(this.validateErrorMessage).forEach((key) => { + this.validateErrorMessage[key] = ''; + }); + } + + fetchLicenseInfo = flow(function* fetchLicenseInfo( + this: GraphManagementStore + ) { + this.resetErrorInfo(); + this.requestStatus.fetchLicenseInfo = 'pending'; + + try { + const result: AxiosResponse> = yield axios.get( + '/about' + ); + + if (result.data.status !== 200) { + this.errorInfo.fetchLicenseInfo.code = result.data.status; + throw new Error(result.data.message); + } + + this.licenseInfo = result.data.data; + } catch (error) { + this.requestStatus.fetchLicenseInfo = 'failed'; + this.errorInfo.fetchLicenseInfo.message = error.message; + console.error(error.message); + } + }); + + fetchIdList = flow(function* fetchIdList(this: GraphManagementStore) { + this.resetErrorInfo(); + this.requestStatus.fetchIdList = 'pending'; + + try { + const result: AxiosResponse = yield axios.get< + GraphData + >(baseUrl, { + params: { + page_size: -1 + } + }); + + if (result.data.status === 200 || result.data.status === 401) { + if (result.data.status === 200) { + this.requestStatus.fetchIdList = 'success'; + } + + this.idList = result.data.data.records.map(({ id, name }) => ({ + id, + name + })); + + this.graphData = result.data.data.records; + this.graphDataPageConfig.pageTotal = result.data.data.total; + } + + if (result.data.status !== 200) { + this.errorInfo.fetchIdList.code = result.data.status; + throw new Error(result.data.message); + } + } catch (error) { + this.requestStatus.fetchIdList = 'failed'; + this.errorInfo.fetchIdList.message = error.message; + console.error(error.message); + } + }); + + fetchGraphDataList = flow(function* fetchGraphDataList( + this: GraphManagementStore + ) { + this.resetErrorInfo(); + const url = + `${baseUrl}?page_no=${this.graphDataPageConfig.pageNumber}&page_size=${this.graphDataPageConfig.pageSize}` + + (this.isSearched.status && this.searchWords !== '' + ? `&content=${this.searchWords}` + : ''); + + this.requestStatus.fetchGraphData = 'pending'; + + try { + const result: AxiosResponse = yield axios.get< + GraphData + >(url); + + if (result.data.status === 200 || result.data.status === 401) { + if (result.data.status === 200) { + this.requestStatus.fetchGraphData = 'success'; + } + + this.graphData = result.data.data.records; + this.graphDataPageConfig.pageTotal = result.data.data.total; + } + + if (result.data.status !== 200) { + this.errorInfo.fetchGraphData.code = result.data.status; + throw new Error(result.data.message); + } + } catch (error) { + this.requestStatus.fetchGraphData = 'failed'; + this.errorInfo.fetchGraphData.message = error.message; + console.error(error.message); + } + }); + + AddGraphData = flow(function* AddGraphData(this: GraphManagementStore) { + this.resetErrorInfo(); + this.requestStatus.AddGraphData = 'pending'; + const filteredParams = filterParams(this.newGraphData); + + try { + const result: AxiosResponse = yield axios.post< + GraphDataResponse + >(baseUrl, filteredParams); + + if (result.data.status === 200 || result.data.status === 401) { + if (result.data.status === 200) { + this.requestStatus.AddGraphData = 'success'; + } + } + + if (result.data.status !== 200) { + this.errorInfo.AddGraphData.code = result.data.status; + throw new Error(result.data.message); + } + } catch (error) { + this.requestStatus.AddGraphData = 'failed'; + this.errorInfo.AddGraphData.message = error.message; + console.error(error.message); + } + }); + + upgradeGraphData = flow(function* upgradeGraphData( + this: GraphManagementStore, + id: number + ) { + this.resetErrorInfo(); + this.requestStatus.upgradeGraphData = 'pending'; + const filteredParams = filterParams(this.editGraphData); + + try { + const result: AxiosResponse = yield axios.put< + GraphDataResponse + >(`${baseUrl}/${id}`, filteredParams); + + if (result.data.status === 200 || result.data.status === 401) { + if (result.data.status === 200) { + this.requestStatus.upgradeGraphData = 'success'; + } + } + + if (result.data.status !== 200) { + this.errorInfo.upgradeGraphData.code = result.data.status; + throw new Error(result.data.message); + } + } catch (error) { + this.requestStatus.upgradeGraphData = 'failed'; + this.errorInfo.upgradeGraphData.message = error.message; + console.error(error.message); + } + }); + + deleteGraphData = flow(function* deleteGraphData( + this: GraphManagementStore, + id + ) { + this.resetErrorInfo(); + this.requestStatus.deleteGraphData = 'pending'; + + try { + const result: AxiosResponse = yield axios.delete< + GraphDataResponse + >(`${baseUrl}/${id}`); + + if (result.data.status === 200 || result.data.status === 401) { + if (result.data.status === 200) { + this.requestStatus.deleteGraphData = 'success'; + } + + // if current pageNumber has no data after delete, set the pageNumber to the previous + if ( + this.graphData.length === 1 && + this.graphDataPageConfig.pageNumber > 1 + ) { + this.graphDataPageConfig.pageNumber = + this.graphDataPageConfig.pageNumber - 1; + } + } + + if (result.data.status !== 200) { + this.errorInfo.deleteGraphData.code = result.data.status; + throw new Error(result.data.message); + } + } catch (error) { + this.requestStatus.deleteGraphData = 'failed'; + this.errorInfo.deleteGraphData.message = error.message; + console.error(error.message); + } + }); +} + +function filterParams(originParams: GraphDataConfig): GraphDataConfig { + const newParams = {} as GraphDataConfig; + + Object.keys(originParams).forEach((key) => { + const value = originParams[key]; + + if (typeof value !== 'undefined') { + newParams[key] = originParams[key]; + } + }); + + return newParams; +} + +// For DI in subclass +export const GraphManagementStoreInstance = new GraphManagementStore(); + +export default createContext(GraphManagementStoreInstance); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts new file mode 100644 index 000000000..5fdaca468 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/edgeTypeStore.ts @@ -0,0 +1,1533 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { cloneDeep, isUndefined, remove } from 'lodash-es'; + +import { MetadataConfigsRootStore } from './metadataConfigsStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +import { baseUrl, responseData } from '../../types/common'; +import { + EdgeType, + EditEdgeTypeParams, + EdgeTypeListResponse, + PageConfig, + CheckedReusableData, + EdgeTypeValidateFields, + EdgeTypeValidatePropertyIndexes +} from '../../types/GraphManagementStore/metadataConfigsStore'; + +import SelectedSolidArrowIcon from '../../../assets/imgs/ic_arrow_selected.svg'; +import NoSelectedSolidArrowIcon from '../../../assets/imgs/ic_arrow.svg'; +import SelectedSolidStraightIcon from '../../../assets/imgs/ic_straight_selected.svg'; +import NoSelectedSolidStraightIcon from '../../../assets/imgs/ic_straight.svg'; +import i18next from '../../../i18n'; +export class EdgeTypeStore { + metadataConfigsRootStore: MetadataConfigsRootStore; + + constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { + this.metadataConfigsRootStore = MetadataConfigsRootStore; + } + + @observable validateLicenseOrMemories = true; + @observable currentTabStatus = 'list'; + + @observable.shallow requestStatus = { + fetchEdgeTypeList: 'pending', + addEdgeType: 'pending', + updateEdgeType: 'pending', + deleteEdgeType: 'pending', + checkConflict: 'pending', + recheckConflict: 'pending', + reuseEdgeType: 'pending' + }; + + @observable errorMessage = ''; + + // should user able to create new vertex type + @observable isCreatedReady = false; + // should user able to create new property index + @observable isAddNewPropertyIndexReady = true; + + // only have to check property + @observable isEditReady = true; + + @observable.ref colorSchemas = [ + '#5c73e6', + '#569380', + '#8ecc93', + '#fe9227', + '#fe5b5d', + '#fd6ace', + '#4d8dda', + '#57c7e3', + '#ffe081', + '#c570ff', + '#2b65ff', + '#0eb880', + '#76c100', + '#ed7600', + '#e65055', + '#a64ee6', + '#108cee', + '#00b5d9', + '#f2ca00', + '#e048ae' + ]; + + @observable.ref edgeShapeSchemas = [ + { + blackicon: NoSelectedSolidArrowIcon, + blueicon: SelectedSolidArrowIcon, + flag: true, + shape: 'solid' + }, + { + blackicon: NoSelectedSolidStraightIcon, + blueicon: SelectedSolidStraightIcon, + flag: false, + shape: 'solid' + } + ]; + + @observable.ref thicknessSchemas = [ + { ch: '粗', en: 'THICK' }, + { ch: '中', en: 'NORMAL' }, + { ch: '细', en: 'FINE' } + ]; + + @observable edgeTypeListPageConfig: PageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + @observable.shallow newEdgeType: EdgeType = { + name: '', + source_label: '', + target_label: '', + link_multi_times: false, + properties: [], + sort_keys: [], + property_indexes: [], + open_label_index: false, + style: { + color: '#5c73e6', + icon: null, + with_arrow: true, + thickness: 'NORMAL', + display_fields: ['~id'] + } + }; + + @observable.ref edgeTypes: EdgeType[] = []; + + @observable.ref selectedEdgeType: EdgeType | null = null; + @observable.ref selectedEdgeTypeNames: string[] = []; + + @observable.ref editedSelectedEdgeType: EditEdgeTypeParams = { + append_properties: [], + append_property_indexes: [], + remove_property_indexes: [], + style: { + color: null, + icon: null, + with_arrow: null, + thickness: 'NORMAL', + display_fields: [] + } + }; + + @observable addedPropertiesInSelectedEdgeType: Set = new Set(); + + // reuse + @observable reusableEdgeTypes: EdgeType[] = []; + @observable checkedReusableData: CheckedReusableData | null = null; + @observable + editedCheckedReusableData: CheckedReusableData | null = null; + + @observable reusableEdgeTypeNameChangeIndexes: Set = new Set< + number + >(); + @observable reusableVertexTypeNameChangeIndexes: Set = new Set< + number + >(); + @observable reusablePropertyNameChangeIndexes: Set = new Set< + number + >(); + @observable reusablePropertyIndexNameChangeIndexes: Set = new Set< + number + >(); + + @observable validateNewEdgeTypeErrorMessage: Record< + EdgeTypeValidateFields, + string | EdgeTypeValidatePropertyIndexes[] + > = { + name: '', + sourceLabel: '', + targetLabel: '', + properties: '', + sortKeys: '', + propertyIndexes: [], + displayFeilds: [] + }; + + @observable.shallow validateEditEdgeTypeErrorMessage: Record< + 'propertyIndexes', + EdgeTypeValidatePropertyIndexes[] + > = { + propertyIndexes: [] + }; + + @observable validateReuseErrorMessage: Record< + 'edgeType' | 'vertexType' | 'property' | 'property_index', + string + > = { + edgeType: '', + vertexType: '', + property: '', + property_index: '' + }; + + @computed get reusableEdgeTypeDataMap() { + const dataMap: Record> = {}; + + this.reusableEdgeTypes.forEach(({ name }) => { + dataMap[name] = { + key: name, + title: name + }; + }); + + return dataMap; + } + + @computed get isReadyToReuse() { + return ( + this.editedCheckedReusableData && + this.editedCheckedReusableData!.propertykey_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + this.editedCheckedReusableData!.vertexlabel_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + this.editedCheckedReusableData!.propertyindex_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + this.editedCheckedReusableData!.edgelabel_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + // no data standingby validation + this.reusableEdgeTypeNameChangeIndexes.size === 0 && + this.reusableVertexTypeNameChangeIndexes.size === 0 && + this.reusablePropertyNameChangeIndexes.size === 0 && + this.reusablePropertyIndexNameChangeIndexes.size === 0 + ); + } + + @action + changeCurrentTabStatus(status: string) { + this.currentTabStatus = status; + } + + @action + mutateNewEdgeType(newEdgeType: EdgeType) { + this.newEdgeType = newEdgeType; + } + + @action + mutateSelectedEdgeTypeNames(names: string[]) { + this.selectedEdgeTypeNames = names; + } + + @action + mutatePageNumber(pageNumber: number) { + this.edgeTypeListPageConfig.pageNumber = pageNumber; + } + + @action + mutatePageSort(sort: 'desc' | 'asc') { + this.edgeTypeListPageConfig.sort = sort; + } + + @action + selectEdgeType(index: number | null) { + if (index === null) { + this.selectedEdgeType = null; + return; + } + + this.selectedEdgeType = cloneDeep(this.edgeTypes[index]); + } + + @action + mutateSelectedProperty(selectedProperty: EdgeType) { + this.selectedEdgeType = selectedProperty; + } + + @action + mutateEditedSelectedEdgeType(editedSelectedEdgeType: EditEdgeTypeParams) { + this.editedSelectedEdgeType = editedSelectedEdgeType; + } + + @action + resetNewEdgeType() { + this.newEdgeType = { + name: '', + source_label: '', + target_label: '', + link_multi_times: false, + properties: [], + sort_keys: [], + property_indexes: [], + open_label_index: false, + style: { + color: '#5c73e6', + icon: null, + with_arrow: true, + thickness: 'NORMAL', + display_fields: ['~id'] + } + }; + + this.isCreatedReady = false; + } + + @action + resetAddedPropertiesInSelectedEdgeType() { + this.addedPropertiesInSelectedEdgeType.clear(); + } + + @action + resetEditedSelectedEdgeType() { + this.editedSelectedEdgeType = { + append_properties: [], + append_property_indexes: [], + remove_property_indexes: [], + style: { + color: null, + icon: null, + with_arrow: null, + thickness: 'NORMAL', + display_fields: [] + } + }; + + this.resetAddedPropertiesInSelectedEdgeType(); + } + + // reuse + + @action + mutateEditedReusableData(newEditedReusableVertexTypes: CheckedReusableData) { + this.editedCheckedReusableData = newEditedReusableVertexTypes; + } + + @action + mutateReusableEdgeTypeChangeIndexes(index: number) { + this.reusableEdgeTypeNameChangeIndexes.add(index); + } + + @action + mutateReusableVertexTypeChangeIndexes(index: number) { + this.reusableVertexTypeNameChangeIndexes.add(index); + } + + @action + mutateReusablePropertyNameChangeIndexes(index: number) { + this.reusablePropertyNameChangeIndexes.add(index); + } + + @action + mutateReusablePropertyIndexNameChangeIndexes(index: number) { + this.reusablePropertyIndexNameChangeIndexes.add(index); + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusableEdgeTypeName(index: number) { + this.editedCheckedReusableData!.edgelabel_conflicts[ + index + ].entity.name = this.checkedReusableData!.edgelabel_conflicts[ + index + ].entity.name; + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusableVertexTypeName(index: number) { + this.editedCheckedReusableData!.vertexlabel_conflicts[ + index + ].entity.name = this.checkedReusableData!.vertexlabel_conflicts[ + index + ].entity.name; + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusablePropertyName(index: number) { + this.editedCheckedReusableData!.propertykey_conflicts[ + index + ].entity.name = this.checkedReusableData!.propertykey_conflicts[ + index + ].entity.name; + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusablePropertyIndexName(index: number) { + this.editedCheckedReusableData!.propertyindex_conflicts[ + index + ].entity.name = this.checkedReusableData!.propertyindex_conflicts[ + index + ].entity.name; + } + + @action + clearReusableNameChangeIndexes() { + this.reusableEdgeTypeNameChangeIndexes.clear(); + this.reusableVertexTypeNameChangeIndexes.clear(); + this.reusablePropertyNameChangeIndexes.clear(); + this.reusablePropertyIndexNameChangeIndexes.clear(); + } + + @action + resetReusableEdgeTypes() { + this.reusableEdgeTypes = []; + } + + @action + validateNewEdgeType(category: EdgeTypeValidateFields, initial = false) { + let isReady = true; + + if (category === 'name') { + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(this.newEdgeType.name)) { + if (this.newEdgeType.name.length === 0) { + !initial && + (this.validateNewEdgeTypeErrorMessage.name = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } else { + !initial && + (this.validateNewEdgeTypeErrorMessage.name = i18next.t( + 'addition.store.rule4' + )); + isReady = false; + } + } else { + this.validateNewEdgeTypeErrorMessage.name = ''; + } + } + + if (category === 'sourceLabel') { + if (this.newEdgeType.source_label === '') { + !initial && + (this.validateNewEdgeTypeErrorMessage.properties = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'targetLabel') { + if (this.newEdgeType.target_label === '') { + !initial && + (this.validateNewEdgeTypeErrorMessage.properties = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'properties') { + if ( + this.newEdgeType.properties.length === 0 && + this.newEdgeType.link_multi_times + ) { + !initial && + (this.validateNewEdgeTypeErrorMessage.properties = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'sortKeys') { + if ( + this.newEdgeType.link_multi_times && + this.newEdgeType.sort_keys.length === 0 + ) { + !initial && + (this.validateNewEdgeTypeErrorMessage.sortKeys = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'displayFeilds') { + if (this.newEdgeType.style.display_fields.length === 0) { + !initial && + (this.validateNewEdgeTypeErrorMessage.displayFeilds = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'propertyIndexes') { + this.isAddNewPropertyIndexReady = true; + this.validateNewEdgeTypeErrorMessage.propertyIndexes = this.newEdgeType.property_indexes.map( + ({ name, type, fields }) => { + const validatedPropertyIndex = { + name: '', + type: '', + properties: '' + }; + + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { + if (!initial) { + if (name.length !== 0) { + validatedPropertyIndex.name = i18next.t('addition.store.rule4'); + } else { + validatedPropertyIndex.name = i18next.t( + 'addition.store.item-is-required' + ); + } + } + + isReady = false; + this.isAddNewPropertyIndexReady = false; + } else { + validatedPropertyIndex.name = ''; + } + + if (type.length === 0) { + !initial && + (validatedPropertyIndex.type = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + this.isAddNewPropertyIndexReady = false; + } else { + validatedPropertyIndex.type = ''; + } + + if (Array.isArray(fields)) { + if (fields.length === 0) { + !initial && + (validatedPropertyIndex.properties = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + this.isAddNewPropertyIndexReady = false; + } + } else { + validatedPropertyIndex.properties = ''; + } + + return validatedPropertyIndex; + } + ); + } + + return isReady; + } + + @action + validateAllNewEdgeType(initial = false) { + this.isCreatedReady = + this.validateNewEdgeType('name', initial) && + this.validateNewEdgeType('sourceLabel', initial) && + this.validateNewEdgeType('targetLabel', initial) && + this.validateNewEdgeType('properties', initial) && + this.validateNewEdgeType('sortKeys', initial) && + this.validateNewEdgeType('propertyIndexes', initial) && + this.validateNewEdgeType('displayFeilds', initial); + } + + @action + validateEditEdgeType(initial = false) { + this.isEditReady = true; + + this.validateEditEdgeTypeErrorMessage.propertyIndexes = this.editedSelectedEdgeType.append_property_indexes.map( + ({ name, type, fields }) => { + const validatedPropertyIndex = { + name: '', + type: '', + properties: '' + }; + + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { + if (!initial) { + if (name.length !== 0) { + validatedPropertyIndex.name = i18next.t('addition.store.rule4'); + } else { + validatedPropertyIndex.name = i18next.t( + 'addition.store.item-is-required' + ); + } + } + + this.isEditReady = false; + } else { + validatedPropertyIndex.name = ''; + } + + if (type.length === 0) { + !initial && + (validatedPropertyIndex.type = i18next.t( + 'addition.store.item-is-required' + )); + this.isEditReady = false; + } else { + validatedPropertyIndex.type = ''; + } + + if (Array.isArray(fields)) { + if (fields.length === 0) { + !initial && + (validatedPropertyIndex.properties = i18next.t( + 'addition.store.item-is-required' + )); + this.isEditReady = false; + } + } else { + validatedPropertyIndex.properties = ''; + } + + return validatedPropertyIndex; + } + ); + } + + @action + validateReuseData( + category: 'edgeType' | 'vertexType' | 'property' | 'property_index', + originalValue: string, + newValue: string + ) { + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(newValue)) { + if (newValue.length === 0) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.item-is-required' + ); + } else { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.rule4' + ); + } + + return false; + } + + // if value has changed + if (originalValue !== newValue) { + if (category === 'edgeType') { + if ( + !isUndefined( + this.checkedReusableData!.edgelabel_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-edge-name-notice' + ); + + return false; + } + } + + if (category === 'vertexType') { + if ( + !isUndefined( + this.checkedReusableData!.vertexlabel_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) || + !isUndefined( + this.checkedReusableData!.edgelabel_conflicts.find( + ({ entity }) => + entity.source_label === newValue || + entity.target_label === newValue + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-vertex-name-notice' + ); + + return false; + } + } + + if (category === 'property') { + // check if there's an existed value equals to new value + if ( + !isUndefined( + this.checkedReusableData!.propertykey_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) || + !isUndefined( + this.checkedReusableData!.propertyindex_conflicts.find( + ({ entity }) => + !isUndefined( + entity.fields.find((fieldName) => fieldName === newValue) + ) + ) + ) || + !isUndefined( + this.checkedReusableData!.vertexlabel_conflicts.find( + ({ entity }) => + !isUndefined( + entity.properties.find(({ name }) => name === newValue) + ) || + !isUndefined( + entity.primary_keys.find((key) => key === newValue) + ) || + !isUndefined( + entity.property_indexes.find( + ({ fields }) => + !isUndefined( + fields.find((fieldName) => fieldName === newValue) + ) + ) + ) + ) + ) || + !isUndefined( + this.checkedReusableData!.edgelabel_conflicts.find( + ({ entity }) => + !isUndefined( + entity.properties.find(({ name }) => name === newValue) + ) || + !isUndefined( + entity.sort_keys.find((key) => key === newValue) + ) || + !isUndefined( + entity.property_indexes.find( + ({ fields }) => + !isUndefined( + fields.find((fieldName) => fieldName === newValue) + ) + ) + ) + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-property-name-notice' + ); + + return false; + } + } + + if (category === 'property_index') { + if ( + !isUndefined( + this.checkedReusableData!.propertyindex_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) || + !isUndefined( + this.checkedReusableData!.vertexlabel_conflicts.find( + ({ entity }) => + !isUndefined( + entity.property_indexes.find(({ name }) => name === newValue) + ) + ) + ) || + !isUndefined( + this.checkedReusableData!.edgelabel_conflicts.find( + ({ entity }) => + !isUndefined( + entity.property_indexes.find(({ name }) => name === newValue) + ) + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-index-name-notice' + ); + + return false; + } + } + } + + return true; + } + + @action + mutateReuseData( + category: 'edgeType' | 'vertexType' | 'property' | 'property_index', + originalValue: string, + newValue: string + ) { + const editedCheckedReusableData = cloneDeep(this.editedCheckedReusableData); + + if (category === 'edgeType') { + } + + if (category === 'vertexType') { + editedCheckedReusableData!.edgelabel_conflicts.forEach( + ({ entity }, index) => { + if (entity.source_label === originalValue) { + entity.source_label = newValue; + this.reusableEdgeTypeNameChangeIndexes.add(index); + } + + if (entity.target_label === originalValue) { + entity.target_label = newValue; + this.reusableEdgeTypeNameChangeIndexes.add(index); + } + } + ); + } + + if (category === 'property') { + editedCheckedReusableData!.edgelabel_conflicts.forEach( + ({ entity }, index) => { + const mutatePropertyIndex = entity.properties.findIndex( + ({ name }) => name === originalValue + ); + + if (mutatePropertyIndex !== -1) { + entity.properties[mutatePropertyIndex].name = newValue; + // property name in current vertex label has been edited + this.reusableEdgeTypeNameChangeIndexes.add(index); + } + + const sortKeyIndex = entity.sort_keys.findIndex( + (key) => key === originalValue + ); + + if (sortKeyIndex !== -1) { + entity.sort_keys[sortKeyIndex] = newValue; + this.reusableEdgeTypeNameChangeIndexes.add(index); + } + + entity.property_indexes.forEach(({ fields }) => { + const mutatePropertyIndexIndex = fields.findIndex( + (fieldName) => fieldName === originalValue + ); + + if (mutatePropertyIndexIndex !== -1) { + fields[mutatePropertyIndex] = newValue; + this.reusableEdgeTypeNameChangeIndexes.add(index); + } + }); + } + ); + + editedCheckedReusableData!.vertexlabel_conflicts.forEach( + ({ entity }, index) => { + const mutatePropertyIndex = entity.properties.findIndex( + ({ name }) => name === originalValue + ); + + if (mutatePropertyIndex !== -1) { + entity.properties[mutatePropertyIndex].name = newValue; + // property name in current vertex label has been edited + this.reusableVertexTypeNameChangeIndexes.add(index); + + // current vertex belongs to which edge + const mutateEdgeIndex = editedCheckedReusableData!.edgelabel_conflicts.findIndex( + (edge) => + edge.entity.source_label === entity.name || + edge.entity.target_label === entity.name + ); + + // property name in source_label or target_label has been edited + this.reusableEdgeTypeNameChangeIndexes.add(mutateEdgeIndex); + } + + const primaryKeyIndex = entity.primary_keys.findIndex( + (key) => key === originalValue + ); + + if (primaryKeyIndex !== -1) { + entity.primary_keys[primaryKeyIndex] = newValue; + + this.reusableVertexTypeNameChangeIndexes.add(index); + } + + entity.property_indexes.forEach(({ fields }) => { + const mutatePropertyIndexIndex = fields.findIndex( + (fieldName) => fieldName === originalValue + ); + + if (mutatePropertyIndexIndex !== -1) { + fields[mutatePropertyIndex] = newValue; + this.reusableVertexTypeNameChangeIndexes.add(index); + } + }); + } + ); + + editedCheckedReusableData!.propertyindex_conflicts.forEach( + ({ entity }, index) => { + const mutateIndex = entity.fields.findIndex( + (fieldName) => fieldName === originalValue + ); + + if (mutateIndex !== -1) { + entity.fields[mutateIndex] = newValue; + this.reusablePropertyIndexNameChangeIndexes.add(index); + } + } + ); + } + + if (category === 'property_index') { + editedCheckedReusableData!.edgelabel_conflicts.forEach( + ({ entity }, index) => { + const mutateVertexIndex = entity.property_indexes.findIndex( + ({ name }) => name === originalValue + ); + + if (mutateVertexIndex !== -1) { + entity.property_indexes[mutateVertexIndex].name = newValue; + this.reusableVertexTypeNameChangeIndexes.add(index); + } + } + ); + + editedCheckedReusableData!.vertexlabel_conflicts.forEach( + ({ entity }, index) => { + const mutateVertexIndex = entity.property_indexes.findIndex( + ({ name }) => name === originalValue + ); + + if (mutateVertexIndex !== -1) { + entity.property_indexes[mutateVertexIndex].name = newValue; + this.reusableVertexTypeNameChangeIndexes.add(index); + } + } + ); + } + + this.editedCheckedReusableData = editedCheckedReusableData; + this.checkedReusableData = cloneDeep(editedCheckedReusableData); + } + + @action + deleteReuseData( + category: + | 'edgelabel_conflicts' + | 'vertexlabel_conflicts' + | 'propertykey_conflicts' + | 'propertyindex_conflicts', + index: number + ) { + if (this.editedCheckedReusableData !== null) { + const editedCheckedReusableData = cloneDeep( + this.editedCheckedReusableData + ); + + if (category === 'edgelabel_conflicts') { + const deletedEdgeType = + editedCheckedReusableData.edgelabel_conflicts[index]; + const deletedPropertyNames: string[] = []; + const deletedPropertyIndexNames: string[] = []; + const deletedSourceVertexNames = deletedEdgeType.entity.source_label; + const deletedTargetVertexNames = deletedEdgeType.entity.target_label; + + deletedEdgeType.entity.properties.forEach(({ name }) => { + deletedPropertyNames.push(name); + }); + + deletedEdgeType.entity.property_indexes.forEach(({ name }) => { + deletedPropertyIndexNames.push(name); + }); + + editedCheckedReusableData.edgelabel_conflicts.splice(index, 1); + + // if there's no edge labels, return since it will move back to the previous step + if (editedCheckedReusableData.edgelabel_conflicts.length === 0) { + return; + } + + // remove source vertex + if ( + isUndefined( + editedCheckedReusableData.edgelabel_conflicts.find( + ({ entity }) => + entity.source_label === deletedSourceVertexNames || + entity.target_label === deletedSourceVertexNames + ) + ) + ) { + remove( + editedCheckedReusableData.vertexlabel_conflicts, + ({ entity }) => entity.name === deletedSourceVertexNames + ); + } + + // remove target vertex + if ( + isUndefined( + editedCheckedReusableData.edgelabel_conflicts.find( + ({ entity }) => + entity.source_label === deletedTargetVertexNames || + entity.target_label === deletedTargetVertexNames + ) + ) + ) { + remove( + editedCheckedReusableData.vertexlabel_conflicts, + ({ entity }) => entity.name === deletedTargetVertexNames + ); + } + + deletedPropertyIndexNames.forEach((propertyIndexName) => { + editedCheckedReusableData.vertexlabel_conflicts.forEach( + ({ entity }) => { + remove( + entity.property_indexes, + ({ name }) => name === propertyIndexName + ); + } + ); + + editedCheckedReusableData.edgelabel_conflicts.forEach( + ({ entity }) => { + remove( + entity.property_indexes, + ({ name }) => name === propertyIndexName + ); + } + ); + + remove( + editedCheckedReusableData.propertyindex_conflicts, + ({ entity }) => entity.name === propertyIndexName + ); + }); + + deletedPropertyNames + .filter( + (propertyName) => + !isUndefined( + editedCheckedReusableData.vertexlabel_conflicts.find( + ({ entity }) => + isUndefined( + entity.properties.find( + ({ name }) => name === propertyName + ) + ) + ) + ) && + !isUndefined( + editedCheckedReusableData.edgelabel_conflicts.find( + ({ entity }) => + isUndefined( + entity.properties.find( + ({ name }) => name === propertyName + ) + ) + ) + ) + ) + .forEach((propertyName) => { + remove( + editedCheckedReusableData.propertykey_conflicts, + ({ entity }) => entity.name === propertyName + ); + }); + } + + if (category === 'propertykey_conflicts') { + const deletedName = + editedCheckedReusableData.propertykey_conflicts[index].entity.name; + // remove property in properties + editedCheckedReusableData.propertykey_conflicts.splice(index, 1); + + // remove property in property index + editedCheckedReusableData.propertyindex_conflicts.forEach( + ({ entity }) => { + remove(entity.fields, (name) => name === deletedName); + } + ); + + remove( + editedCheckedReusableData.propertyindex_conflicts, + ({ entity }) => entity.fields.length === 0 + ); + + // remove property in vertex labels + editedCheckedReusableData.vertexlabel_conflicts.forEach( + ({ entity }, vertexlabelIndex) => { + const cb = (param: { name: string } | string) => { + const name = typeof param === 'string' ? param : param.name; + + if (name === deletedName) { + this.reusableVertexTypeNameChangeIndexes.add(vertexlabelIndex); + return true; + } + + return false; + }; + + remove(entity.properties, cb); + remove(entity.primary_keys, cb); + + entity.property_indexes.forEach(({ fields }) => { + remove(fields, cb); + }); + } + ); + + // remove property in edge labels + editedCheckedReusableData.edgelabel_conflicts.forEach( + ({ entity }, edgelabelIndex) => { + const cb = (param: { name: string } | string) => { + const name = typeof param === 'string' ? param : param.name; + + if (name === deletedName) { + this.reusableEdgeTypeNameChangeIndexes.add(edgelabelIndex); + return true; + } + + return false; + }; + + remove(entity.properties, cb); + remove(entity.sort_keys, cb); + + entity.property_indexes.forEach(({ fields }) => { + remove(fields, cb); + }); + } + ); + } + + if (category === 'propertyindex_conflicts') { + const { + name: deletedPropertyIndexName + } = editedCheckedReusableData.propertyindex_conflicts[index].entity; + + editedCheckedReusableData.propertyindex_conflicts.splice(index, 1); + + // delete property index in vertex label + editedCheckedReusableData.vertexlabel_conflicts.forEach( + ({ entity }, index) => { + const deletedIndex = entity.property_indexes.findIndex( + ({ name }) => name === deletedPropertyIndexName + ); + + if (deletedIndex !== -1) { + this.reusableVertexTypeNameChangeIndexes.add(index); + entity.property_indexes.splice(deletedIndex, 1); + } + } + ); + + editedCheckedReusableData.edgelabel_conflicts.forEach(({ entity }) => { + const deletedIndex = entity.property_indexes.findIndex( + ({ name }) => name === deletedPropertyIndexName + ); + + if (deletedIndex !== -1) { + this.reusableEdgeTypeNameChangeIndexes.add(index); + entity.property_indexes.splice(deletedIndex, 1); + } + }); + } + + this.mutateEditedReusableData(editedCheckedReusableData); + } + } + + @action + resetValidateNewEdgeTypeMessage( + category?: EdgeTypeValidateFields, + propertIndexIndex?: number, + propertIndexProperty?: keyof EdgeTypeValidatePropertyIndexes + ) { + if (isUndefined(category)) { + this.validateNewEdgeTypeErrorMessage = { + name: '', + sourceLabel: '', + targetLabel: '', + properties: '', + sortKeys: '', + propertyIndexes: [], + displayFeilds: [] + }; + + return; + } + + if (category === 'propertyIndexes') { + (this.validateNewEdgeTypeErrorMessage + .propertyIndexes as EdgeTypeValidatePropertyIndexes[])[ + propertIndexIndex as number + ][propertIndexProperty as keyof EdgeTypeValidatePropertyIndexes] = ''; + + return; + } + + this.validateNewEdgeTypeErrorMessage[category] = ''; + } + + @action + resetValidateReuseErrorMessage( + category?: 'edgeType' | 'vertexType' | 'property' | 'property_index' + ) { + if (isUndefined(category)) { + this.validateReuseErrorMessage = { + edgeType: '', + property: '', + property_index: '', + vertexType: '' + }; + + return; + } + + this.validateReuseErrorMessage[category] = ''; + } + + @action + dispose() { + this.currentTabStatus = 'list'; + this.requestStatus = { + fetchEdgeTypeList: 'pending', + addEdgeType: 'pending', + updateEdgeType: 'pending', + deleteEdgeType: 'pending', + checkConflict: 'pending', + recheckConflict: 'pending', + reuseEdgeType: 'pending' + }; + this.errorMessage = ''; + + this.isCreatedReady = false; + this.isAddNewPropertyIndexReady = true; + this.isEditReady = true; + + this.edgeTypeListPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + this.resetNewEdgeType(); + this.edgeTypes = []; + this.selectedEdgeType = null; + this.selectedEdgeTypeNames = []; + this.editedSelectedEdgeType = { + append_properties: [], + append_property_indexes: [], + remove_property_indexes: [], + style: { + color: null, + icon: null, + with_arrow: null, + thickness: 'NORMAL', + display_fields: [] + } + }; + this.resetValidateNewEdgeTypeMessage(); + this.resetReusableEdgeTypes(); + this.validateReuseErrorMessage = { + edgeType: '', + vertexType: '', + property: '', + property_index: '' + }; + } + + fetchEdgeTypeList = flow(function* fetchEdgeTypeList( + this: EdgeTypeStore, + options?: { fetchAll?: boolean; reuseId?: number } + ) { + this.requestStatus.fetchEdgeTypeList = 'pending'; + + const conn_id = + options && typeof options.reuseId === 'number' + ? options.reuseId + : this.metadataConfigsRootStore.currentId; + + try { + const result: AxiosResponse> = yield axios + .get(`${baseUrl}/${conn_id}/schema/edgelabels`, { + params: { + page_no: this.edgeTypeListPageConfig.pageNumber, + page_size: !options ? 10 : -1, + name_order: + this.edgeTypeListPageConfig.sort !== '' + ? this.edgeTypeListPageConfig.sort + : null + } + }) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + if (result.data.status === 401) { + this.validateLicenseOrMemories = false; + } + + throw new Error(result.data.message); + } + + if (options && typeof options.reuseId === 'number') { + this.reusableEdgeTypes = result.data.data.records; + } else { + this.edgeTypes = result.data.data.records; + this.edgeTypeListPageConfig.pageTotal = result.data.data.total; + } + + if (this.currentTabStatus !== 'reuse') { + result.data.data.records.length === 0 + ? (this.currentTabStatus = 'empty') + : (this.currentTabStatus = 'list'); + } + + this.requestStatus.fetchEdgeTypeList = 'success'; + } catch (error) { + this.requestStatus.fetchEdgeTypeList = 'failed'; + this.errorMessage = error.message; + } + }); + + addEdgeType = flow(function* addEdgeType(this: EdgeTypeStore) { + this.requestStatus.addEdgeType = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels`, + { + name: this.newEdgeType.name, + source_label: this.newEdgeType.source_label, + target_label: this.newEdgeType.target_label, + link_multi_times: this.newEdgeType.link_multi_times, + properties: this.newEdgeType.properties, + sort_keys: this.newEdgeType.sort_keys, + property_indexes: this.newEdgeType.property_indexes, + open_label_index: this.newEdgeType.open_label_index, + style: this.newEdgeType.style + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.addEdgeType = 'success'; + } catch (error) { + this.requestStatus.addEdgeType = 'failed'; + this.errorMessage = error.message; + } + }); + + updateEdgeType = flow(function* updateEdgeType(this: EdgeTypeStore) { + this.requestStatus.updateEdgeType = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .put( + `${baseUrl}/${ + this.metadataConfigsRootStore.currentId + }/schema/edgelabels/${this.selectedEdgeType!.name}`, + { + append_properties: this.editedSelectedEdgeType.append_properties, + append_property_indexes: this.editedSelectedEdgeType + .append_property_indexes, + remove_property_indexes: this.editedSelectedEdgeType + .remove_property_indexes, + style: this.editedSelectedEdgeType.style + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.updateEdgeType = 'success'; + } catch (error) { + this.requestStatus.updateEdgeType = 'failed'; + this.errorMessage = error.message; + } + }); + + deleteEdgeType = flow(function* deleteEdgeType( + this: EdgeTypeStore, + selectedEdgeTypeNames: string[] + ) { + this.requestStatus.deleteEdgeType = 'pending'; + + const combinedParams = selectedEdgeTypeNames + .map((name) => 'names=' + name) + .join('&'); + + try { + const result: AxiosResponse> = yield axios + .delete( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels?` + + combinedParams + + `&skip_using=${String( + Array.isArray(selectedEdgeTypeNames) && + selectedEdgeTypeNames.length !== 1 + )}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + if ( + selectedEdgeTypeNames.length === this.edgeTypes.length && + this.edgeTypeListPageConfig.pageNumber === + Math.ceil(this.edgeTypeListPageConfig.pageTotal / 10) && + this.edgeTypeListPageConfig.pageNumber > 1 + ) { + this.edgeTypeListPageConfig.pageNumber = + this.edgeTypeListPageConfig.pageNumber - 1; + } + + this.requestStatus.deleteEdgeType = 'success'; + } catch (error) { + this.requestStatus.deleteEdgeType = 'failed'; + this.errorMessage = error.message; + } + }); + + checkConflict = flow(function* checkConflict( + this: EdgeTypeStore, + reuseId: string, + selectedEdgeTypes: string[] + ) { + this.requestStatus.checkConflict = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels/check_conflict`, + { + edgelabels: selectedEdgeTypes.map((selectedEdgeType) => + this.reusableEdgeTypes.find( + ({ name }) => name === selectedEdgeType + ) + ) + }, + { + params: { + reused_conn_id: this.metadataConfigsRootStore.graphManagementStore.idList.find( + ({ name }) => name === reuseId + )!.id + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.checkedReusableData = result.data.data; + this.editedCheckedReusableData = cloneDeep(result.data.data); + this.requestStatus.checkConflict = 'success'; + } catch (error) { + this.requestStatus.checkConflict = 'failed'; + this.errorMessage = error.message; + } + }); + + recheckConflict = flow(function* recheckConflict(this: EdgeTypeStore) { + this.requestStatus.recheckConflict = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels/recheck_conflict`, + { + propertykeys: this.editedCheckedReusableData!.propertykey_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ), + propertyindexes: this.editedCheckedReusableData!.propertyindex_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ), + vertexlabels: this.editedCheckedReusableData!.vertexlabel_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ), + edgelabels: this.editedCheckedReusableData!.edgelabel_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ) + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.checkedReusableData = result.data.data; + this.editedCheckedReusableData = cloneDeep(result.data.data); + this.requestStatus.recheckConflict = 'success'; + } catch (error) { + this.requestStatus.recheckConflict = 'failed'; + this.errorMessage = error.message; + } + }); + + reuseEdgeType = flow(function* reuseEdgeType(this: EdgeTypeStore) { + this.requestStatus.reuseEdgeType = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/edgelabels/reuse`, + this.editedCheckedReusableData + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.reuseEdgeType = 'success'; + } catch (error) { + this.requestStatus.reuseEdgeType = 'failed'; + this.errorMessage = error.message; + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts new file mode 100644 index 000000000..ee99ed87b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/graphViewStore.ts @@ -0,0 +1,334 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios from 'axios'; +import { isUndefined, cloneDeep, clone } from 'lodash-es'; + +import vis from 'vis-network'; +import { MetadataConfigsRootStore } from './metadataConfigsStore'; +import { + checkIfLocalNetworkOffline, + vertexRadiusMapping, + edgeWidthMapping +} from '../../utils'; + +import { baseUrl } from '../../types/common'; +import type { + GraphViewData, + DrawerTypes +} from '../../types/GraphManagementStore/metadataConfigsStore'; +import i18next from '../../../i18n'; + +export class GraphViewStore { + metadataConfigsRootStore: MetadataConfigsRootStore; + + constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { + this.metadataConfigsRootStore = MetadataConfigsRootStore; + } + + @observable.ref colorMappings: Record = {}; + @observable.ref vertexSizeMappings: Record = {}; + @observable.ref vertexWritingMappings: Record = {}; + @observable.ref edgeColorMappings: Record = {}; + @observable.ref edgeWithArrowMappings: Record = {}; + @observable.ref edgeThicknessMappings: Record = {}; + @observable.ref edgeWritingMappings: Record = {}; + + @observable currentDrawer: DrawerTypes = ''; + @observable currentSelected = ''; + @observable isNodeOrEdgeClicked = false; + + // avoid to re-assign value to originalGraphViewData from re-rendering + // have to set a flag to inform data is empty + @observable isGraphVertexEmpty = true; + + @observable visNetwork: vis.Network | null = null; + @observable visDataSet: Record<'nodes' | 'edges', any> | null = null; + @observable.ref graphViewData: GraphViewData | null = null; + @observable.ref originalGraphViewData: GraphViewData | null = null; + + @observable.shallow requestStatus = { + fetchGraphViewData: 'standby' + }; + + @observable errorInfo = { + fetchGraphViewData: { + code: NaN, + message: '' + } + }; + + @computed get graphNodes() { + if (this.originalGraphViewData === null) { + return []; + } + + return this.originalGraphViewData.vertices.map( + ({ id, label, properties, primary_keys }) => { + return { + id, + label: id.length <= 15 ? id : id.slice(0, 15) + '...', + vLabel: id, + value: vertexRadiusMapping[this.vertexSizeMappings[label]], + font: { size: 16 }, + properties, + title: ` + + + ${Object.entries(properties) + .map(([key, value]) => { + const convertedValue = + value.toLowerCase() === 'text' + ? 'string' + : value.toLowerCase(); + + const primaryKeyIndex = primary_keys.findIndex( + (primaryKey) => primaryKey === key + ); + + return ``; + }) + .join('')} + `, + color: { + background: this.colorMappings[label] || '#5c73e6', + border: this.colorMappings[label] || '#5c73e6', + highlight: { background: '#fb6a02', border: '#fb6a02' }, + hover: { background: '#ec3112', border: '#ec3112' } + }, + // reveal label when zoom to max + scaling: { + label: { + max: Infinity, + maxVisible: Infinity + } + }, + chosen: { + node( + values: any, + id: string, + selected: boolean, + hovering: boolean + ) { + if (hovering || selected) { + values.shadow = true; + values.shadowColor = 'rgba(0, 0, 0, 0.6)'; + values.shadowX = 0; + values.shadowY = 0; + values.shadowSize = 25; + } + + if (selected) { + values.size += 5; + } + } + } + }; + } + ); + } + + @computed get graphEdges() { + if (this.originalGraphViewData === null) { + return []; + } + + return this.originalGraphViewData.edges.map( + ({ id, label, source, target, properties, sort_keys }) => { + return { + id, + label: label.length < 15 ? label : label.slice(0, 15) + '...', + properties, + source, + target, + from: source, + to: target, + font: { size: 16, strokeWidth: 0, color: '#666' }, + arrows: this.edgeWithArrowMappings[label] === true ? 'to' : '', + value: edgeWidthMapping[this.edgeThicknessMappings[label]], + title: ` + + + ${Object.entries(properties) + .map(([key, value]) => { + const convertedValue = + value.toLowerCase() === 'text' + ? 'string' + : value.toLowerCase(); + + const sortKeyIndex = sort_keys.findIndex( + (sortKey) => sortKey === key + ); + + return ``; + }) + .join('')} + `, + color: this.edgeColorMappings[label] || '#5c73e6' + }; + } + ); + } + + @action + setCurrentDrawer(drawer: DrawerTypes) { + this.currentDrawer = drawer; + } + + @action + switchNodeOrEdgeClicked(flag: boolean) { + this.isNodeOrEdgeClicked = flag; + } + + @action + switchGraphDataEmpty(flag: boolean) { + this.isGraphVertexEmpty = flag; + } + + @action + setVisNetwork(visNetwork: vis.Network) { + this.visNetwork = visNetwork; + } + + @action + setVisDataSet(visDataSet: Record<'nodes' | 'edges', any>) { + this.visDataSet = visDataSet; + } + + @action + dispose() { + this.edgeColorMappings = {}; + this.currentDrawer = ''; + this.currentSelected = ''; + this.colorMappings = {}; + this.edgeColorMappings = {}; + this.graphViewData = null; + this.isNodeOrEdgeClicked = false; + this.isGraphVertexEmpty = true; + this.visNetwork = null; + this.visDataSet = null; + this.graphViewData = null; + this.originalGraphViewData = null; + this.requestStatus = { + fetchGraphViewData: 'standby' + }; + this.errorInfo = { + fetchGraphViewData: { + code: NaN, + message: '' + } + }; + } + + fetchGraphViewData = flow(function* fetchGraphViewData( + this: GraphViewStore, + colorMappings?: Record, + vertexSizeMappings?: Record, + vertexWritingMappings?: Record, + edgeColorMappings?: Record, + edgeThicknessMappings?: Record, + edgeWithArrowMappings?: Record, + edgeWritingMappings?: Record + ) { + this.requestStatus.fetchGraphViewData = 'pending'; + + if (!isUndefined(colorMappings)) { + this.colorMappings = colorMappings; + } + if (!isUndefined(vertexSizeMappings)) { + this.vertexSizeMappings = vertexSizeMappings; + } + if (!isUndefined(vertexWritingMappings)) { + this.vertexWritingMappings = vertexWritingMappings; + } + if (!isUndefined(edgeColorMappings)) { + this.edgeColorMappings = edgeColorMappings; + } + if (!isUndefined(edgeThicknessMappings)) { + this.edgeThicknessMappings = edgeThicknessMappings; + } + if (!isUndefined(edgeWithArrowMappings)) { + this.edgeWithArrowMappings = edgeWithArrowMappings; + } + if (!isUndefined(edgeWritingMappings)) { + this.edgeWritingMappings = edgeWritingMappings; + } + + try { + const result = yield axios + .get( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/graphview` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + this.errorInfo.fetchGraphViewData.code = result.data.status; + throw new Error(result.data.message); + } + + const data = result.data.data; + + if (data.vertices.length !== 0) { + this.switchGraphDataEmpty(false); + } + + this.originalGraphViewData = data; + this.graphViewData = data; + + this.requestStatus.fetchGraphViewData = 'success'; + } catch (error) { + this.requestStatus.fetchGraphViewData = 'failed'; + this.errorInfo.fetchGraphViewData.message = error.message; + console.error(error.message); + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts new file mode 100644 index 000000000..bc204b6d3 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataConfigsStore.ts @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action } from 'mobx'; + +import { MetadataPropertyStore } from './metadataPropertyStore'; +import { VertexTypeStore } from './vertexTypeStore'; +import { EdgeTypeStore } from './edgeTypeStore'; +import { MetadataPropertyIndexStore } from './metadataPropertyIndexStore'; +import { GraphViewStore } from './graphViewStore'; + +import { + GraphManagementStore, + GraphManagementStoreInstance +} from '../graphManagementStore'; + +export class MetadataConfigsRootStore { + graphManagementStore: GraphManagementStore; + metadataPropertyStore: MetadataPropertyStore; + vertexTypeStore: VertexTypeStore; + edgeTypeStore: EdgeTypeStore; + metadataPropertyIndexStore: MetadataPropertyIndexStore; + graphViewStore: GraphViewStore; + + @observable currentId: number | null = null; + + constructor(GraphManagementStore: GraphManagementStore) { + this.graphManagementStore = GraphManagementStore; + + this.metadataPropertyStore = new MetadataPropertyStore(this); + this.vertexTypeStore = new VertexTypeStore(this); + this.edgeTypeStore = new EdgeTypeStore(this); + this.metadataPropertyIndexStore = new MetadataPropertyIndexStore(this); + this.graphViewStore = new GraphViewStore(this); + } + + @action + setCurrentId(id: number | null) { + this.currentId = id; + } + + @action + dispose() { + this.currentId = null; + } +} + +export default createContext( + new MetadataConfigsRootStore(GraphManagementStoreInstance) +); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts new file mode 100644 index 000000000..eff06eb70 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyIndexStore.ts @@ -0,0 +1,245 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; + +import { MetadataConfigsRootStore } from './metadataConfigsStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +import { baseUrl, responseData } from '../../types/common'; +import { + MetadataPropertyIndex, + MetadataPropertyIndexResponse, + PageConfig +} from '../../types/GraphManagementStore/metadataConfigsStore'; + +export class MetadataPropertyIndexStore { + metadataConfigsRootStore: MetadataConfigsRootStore; + + constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { + this.metadataConfigsRootStore = MetadataConfigsRootStore; + } + + @observable validateLicenseOrMemories = true; + @observable searchWords = ''; + @observable.shallow isSearched = { + status: false, + value: '' + }; + + @observable.shallow requestStatus = { + fetchMetadataPropertIndexes: 'pending' + }; + + @observable metadataPropertyIndexPageConfig: PageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + @observable errorMessage = ''; + + @observable.ref metadataPropertyIndexes: MetadataPropertyIndex[] = [ + { + owner: 'person', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'person', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age'] + }, + { + owner: 'person', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['city'] + }, + { + owner: 'company', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'company', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'company', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'city', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'city', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'city', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + }, + { + owner: 'name', + owner_type: 'VERTEX_LABEL', + name: 'personByBorn', + type: 'RANGE', + fields: ['age', 'city'] + } + ]; + + @computed get collpaseInfo(): null | number[][] { + const collpaseNumbers: number[] = []; + + this.metadataPropertyIndexes.forEach( + ({ owner }: MetadataPropertyIndex, index: number) => { + // first owner has default rowSpanStart = 1 + if (index === 0) { + collpaseNumbers.push(1); + return; + } + + // if owner equals to the previous one, plus the owner rowSpan by 1 + // else push this different owner rowSpanStartIndex in to array + owner === this.metadataPropertyIndexes[index - 1].owner + ? ++collpaseNumbers[collpaseNumbers.length - 1] + : collpaseNumbers.push(1); + } + ); + + if (collpaseNumbers.length === this.metadataPropertyIndexes.length) { + return null; + } + + const collpaseStartIndexes: number[] = [0]; + + collpaseNumbers + .slice(0, collpaseNumbers.length - 1) + .reduce((prev, curr) => { + collpaseStartIndexes.push(prev + curr); + return prev + curr; + }, 0); + + return [collpaseStartIndexes, collpaseNumbers]; + } + + @action + mutateSearchWords(text: string) { + this.searchWords = text; + } + + @action + mutatePageNumber(pageNumber: number) { + this.metadataPropertyIndexPageConfig.pageNumber = pageNumber; + } + + @action + switchIsSearchedStatus(isSearched: boolean) { + this.isSearched.status = isSearched; + + isSearched + ? (this.isSearched.value = this.searchWords) + : (this.isSearched.value = ''); + } + + @action + dispose() { + this.searchWords = ''; + this.isSearched = { + status: false, + value: '' + }; + this.requestStatus = { + fetchMetadataPropertIndexes: 'pending' + }; + this.metadataPropertyIndexPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + this.errorMessage = ''; + this.metadataPropertyIndexes = []; + } + + fetchMetadataPropertIndexes = flow(function* fetchMetadataPropertIndexes( + this: MetadataPropertyIndexStore, + indexType: 'vertex' | 'edge' + ) { + this.requestStatus.fetchMetadataPropertIndexes = 'pending'; + + try { + const result: AxiosResponse< + responseData + > = yield axios + .get( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertyindexes`, + { + params: { + page_no: this.metadataPropertyIndexPageConfig.pageNumber, + page_size: 10, + is_vertex_label: indexType === 'vertex', + content: + this.isSearched.status && this.searchWords !== '' + ? this.searchWords + : null + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + if (result.data.status === 401) { + this.validateLicenseOrMemories = false; + } + + throw new Error(result.data.message); + } + + this.metadataPropertyIndexes = result.data.data.records; + this.metadataPropertyIndexPageConfig.pageTotal = result.data.data.total; + this.requestStatus.fetchMetadataPropertIndexes = 'success'; + } catch (error) { + this.requestStatus.fetchMetadataPropertIndexes = 'failed'; + this.errorMessage = error.message; + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts new file mode 100644 index 000000000..669c1ab28 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/metadataPropertyStore.ts @@ -0,0 +1,590 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { cloneDeep } from 'lodash-es'; +import { v4 } from 'uuid'; + +import { MetadataConfigsRootStore } from './metadataConfigsStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +import { baseUrl, responseData } from '../../types/common'; +import { + MetadataProperty, + MetadataPropertyListResponse, + PageConfig, + CheckedReusableData, + NewMetadataProperty +} from '../../types/GraphManagementStore/metadataConfigsStore'; +import i18next from '../../../i18n'; + +export class MetadataPropertyStore { + metadataConfigsRootStore: MetadataConfigsRootStore; + + constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { + this.metadataConfigsRootStore = MetadataConfigsRootStore; + } + + @observable validateLicenseOrMemories = true; + @observable currentTabStatus = 'list'; + + @observable.shallow requestStatus = { + fetchMetadataPropertyList: 'standby', + checkIfUsing: 'standby', + addMetadataProperty: 'standby', + deleteMetadataProperty: 'standby', + checkConflict: 'standby', + recheckConflict: 'standby', + reuseMetadataProperties: 'standy' + }; + + @observable errorMessage = ''; + + @observable searchWords = ''; + + @observable isSearched = { + status: false, + value: '' + }; + + @observable metadataPropertyPageConfig: PageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + @observable isCreateNewProperty = false; + // should user able to create new vertex type + @observable isCreatedReady = false; + + @observable newMetadataProperty: NewMetadataProperty = { + name: v4(), + // real input name, to handle
key problems + _name: '', + data_type: 'string', + cardinality: 'single' + }; + + @observable.ref metadataProperties: MetadataProperty[] = []; + + @observable metadataPropertyUsingStatus: Record | null = + null; + + @observable selectedMetadataProperty: MetadataProperty | null = null; + // table selection from user + @observable.ref selectedMetadataPropertyNames: string[] = []; + + // reuse + @observable reuseableProperties: MetadataProperty[] = []; + @observable + checkedReusableProperties: CheckedReusableData | null = null; + @observable + editedCheckedReusableProperties: CheckedReusableData | null = null; + @observable reusablePropertyNameChangeIndexes: Set = + new Set(); + + @observable validateNewPropertyErrorMessage = { + name: '' + }; + + @observable validateRenameReusePropertyErrorMessage = { + name: '' + }; + + @computed get reunionMetadataProperty() { + return this.metadataProperties.length < 10 + ? [this.newMetadataProperty].concat(this.metadataProperties) + : [this.newMetadataProperty].concat(this.metadataProperties.slice(0, 9)); + } + + @computed get reuseablePropertyDataMap() { + const dataMap: Record> = {}; + + this.reuseableProperties.forEach(({ name }) => { + dataMap[name] = { + key: name, + title: name + }; + }); + + return dataMap; + } + + @computed get isReadyToReuse() { + return ( + this.editedCheckedReusableProperties && + this.editedCheckedReusableProperties!.propertykey_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + // no data standingby validation + this.reusablePropertyNameChangeIndexes.size === 0 + ); + } + + @action + changeCurrentTabStatus(status: string) { + this.currentTabStatus = status; + } + + @action + mutateSearchWords(text: string) { + this.searchWords = text; + } + + @action + mutatePageNumber(pageNumber: number) { + this.metadataPropertyPageConfig.pageNumber = pageNumber; + } + + @action + mutatePageSort(sort: 'desc' | 'asc') { + this.metadataPropertyPageConfig.sort = sort; + } + + @action + switchIsSearchedStatus(isSearched: boolean) { + this.isSearched.status = isSearched; + + isSearched + ? (this.isSearched.value = this.searchWords) + : (this.isSearched.value = ''); + } + + @action + switchIsCreateNewProperty(flag: boolean) { + this.isCreateNewProperty = flag; + } + + @action + resetNewProperties() { + this.mutateNewProperty({ + name: v4(), + _name: '', + data_type: 'string', + cardinality: 'single' + }); + + this.isCreatedReady = false; + } + + @action + selectProperty(index: number | null) { + if (index === null) { + this.selectedMetadataProperty = null; + return; + } + + this.selectedMetadataProperty = cloneDeep(this.metadataProperties[index]); + } + + @action + mutateNewProperty(newMetadataProperty: NewMetadataProperty) { + this.newMetadataProperty = newMetadataProperty; + } + + @action + mutateSelectedPropertyName(name: string) { + this.selectedMetadataProperty!.name = name; + } + + @action + mutateSelectedMetadataProperyNames(names: string[]) { + this.selectedMetadataPropertyNames = names; + } + + @action + mutateEditedReusableProperties( + newEditedReusableProperties: CheckedReusableData + ) { + this.editedCheckedReusableProperties = newEditedReusableProperties; + } + + @action + mutateReusablePropertyNameChangeIndexes(index: number) { + this.reusablePropertyNameChangeIndexes.add(index); + } + + @action + clearReusablePropertyNameChangeIndexes() { + this.reusablePropertyNameChangeIndexes.clear(); + } + + @action + resetReusablePropeties() { + this.reuseableProperties = []; + } + + @action + validateNewProperty() { + let isReady = true; + + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(this.newMetadataProperty._name!)) { + if (this.newMetadataProperty._name!.length === 0) { + this.validateNewPropertyErrorMessage.name = i18next.t( + 'addition.store.item-is-required' + ); + isReady = false; + } else { + this.validateNewPropertyErrorMessage.name = i18next.t( + 'addition.store.rule4' + ); + isReady = false; + } + } else { + this.validateNewPropertyErrorMessage.name = ''; + } + + this.isCreatedReady = isReady; + return isReady; + } + + @action + validateRenameReuseProperty(index: number) { + let isReady = true; + const propertyName = + this.editedCheckedReusableProperties!.propertykey_conflicts[index].entity + .name; + + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(propertyName)) { + if (propertyName.length === 0) { + this.validateRenameReusePropertyErrorMessage.name = i18next.t( + 'addition.store.item-is-required' + ); + isReady = false; + } else { + this.validateRenameReusePropertyErrorMessage.name = i18next.t( + 'addition.store.rule4' + ); + isReady = false; + } + } else { + this.validateRenameReusePropertyErrorMessage.name = ''; + } + + return isReady; + } + + @action + resetValidateNewProperty() { + this.validateNewPropertyErrorMessage.name = ''; + } + + @action + resetValidateRenameReuseProperty() { + this.validateRenameReusePropertyErrorMessage.name = ''; + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusablePropertyName(index: number) { + this.editedCheckedReusableProperties!.propertykey_conflicts[ + index + ].entity.name = + this.checkedReusableProperties!.propertykey_conflicts[index].entity.name; + } + + @action + dispose() { + this.currentTabStatus = 'list'; + this.requestStatus = { + fetchMetadataPropertyList: 'standby', + checkIfUsing: 'standby', + addMetadataProperty: 'standby', + deleteMetadataProperty: 'standby', + checkConflict: 'standby', + recheckConflict: 'standby', + reuseMetadataProperties: 'standy' + }; + this.errorMessage = ''; + this.searchWords = ''; + this.isSearched = { + status: false, + value: '' + }; + this.metadataPropertyPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + this.isCreateNewProperty = false; + this.isCreatedReady = false; + this.resetNewProperties(); + this.metadataProperties = []; + this.metadataPropertyUsingStatus = null; + this.selectedMetadataProperty = null; + this.selectedMetadataPropertyNames = []; + + this.resetValidateNewProperty(); + this.resetValidateRenameReuseProperty(); + + // reuse + this.reuseableProperties = []; + this.checkedReusableProperties = null; + this.editedCheckedReusableProperties = null; + } + + fetchMetadataPropertyList = flow(function* fetchMetadataPropertyList( + this: MetadataPropertyStore, + options?: { fetchAll?: boolean; reuseId?: number } + ) { + this.requestStatus.fetchMetadataPropertyList = 'pending'; + const conn_id = + options && typeof options.reuseId === 'number' + ? options.reuseId + : this.metadataConfigsRootStore.currentId; + + try { + const result: AxiosResponse> = + yield axios + .get(`${baseUrl}/${conn_id}/schema/propertykeys`, { + params: { + page_no: this.metadataPropertyPageConfig.pageNumber, + page_size: !options ? 10 : -1, + name_order: + this.metadataPropertyPageConfig.sort !== '' + ? this.metadataPropertyPageConfig.sort + : null, + content: + this.isSearched.status && this.searchWords !== '' + ? this.searchWords + : null + } + }) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + if (result.data.status === 401) { + this.validateLicenseOrMemories = false; + } + + throw new Error(result.data.message); + } + + if (options && typeof options.reuseId === 'number') { + this.reuseableProperties = result.data.data.records; + } else { + this.metadataProperties = result.data.data.records; + this.metadataPropertyPageConfig.pageTotal = result.data.data.total; + } + + if (result.data.data.records.length === 0) { + if (this.isSearched.status === true) { + this.currentTabStatus = 'list'; + } else { + this.currentTabStatus = 'empty'; + } + } else if (this.currentTabStatus !== 'reuse') { + // if currentTabStatus is reuse, stay at reuse page + this.currentTabStatus = 'list'; + } + + this.requestStatus.fetchMetadataPropertyList = 'success'; + } catch (error) { + this.requestStatus.fetchMetadataPropertyList = 'failed'; + this.errorMessage = error.message; + } + }); + + checkIfUsing = flow(function* checkIfUsing( + this: MetadataPropertyStore, + selectedPropertyNames: string[] + ) { + this.requestStatus.checkIfUsing = 'pending'; + + try { + const result: AxiosResponse>> = + yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/check_using`, + { + names: selectedPropertyNames + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.metadataPropertyUsingStatus = result.data.data; + this.requestStatus.checkIfUsing = 'success'; + } catch (error) { + this.requestStatus.checkIfUsing = 'failed'; + this.errorMessage = error.message; + } + }); + + addMetadataProperty = flow(function* addMetadataProperty( + this: MetadataPropertyStore + ) { + this.requestStatus.addMetadataProperty = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys`, + { + name: this.newMetadataProperty._name, + data_type: + this.newMetadataProperty.data_type === 'string' + ? 'TEXT' + : this.newMetadataProperty.data_type.toUpperCase(), + cardinality: this.newMetadataProperty.cardinality.toUpperCase() + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.addMetadataProperty = 'success'; + } catch (error) { + this.requestStatus.addMetadataProperty = 'failed'; + this.errorMessage = error.message; + } + }); + + deleteMetadataProperty = flow(function* deleteMetadataProperty( + this: MetadataPropertyStore, + selectedPropertyNames: string[] + ) { + this.requestStatus.deleteMetadataProperty = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .delete( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys?` + + selectedPropertyNames.map((name) => 'names=' + name).join('&') + + `&skip_using=${String(selectedPropertyNames.length !== 1)}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + if ( + selectedPropertyNames.length === this.metadataProperties.length && + this.metadataPropertyPageConfig.pageNumber === + Math.ceil(this.metadataPropertyPageConfig.pageTotal / 10) && + this.metadataPropertyPageConfig.pageNumber > 1 + ) { + this.metadataPropertyPageConfig.pageNumber = + this.metadataPropertyPageConfig.pageNumber - 1; + } + + this.requestStatus.deleteMetadataProperty = 'success'; + } catch (error) { + this.requestStatus.deleteMetadataProperty = 'failed'; + this.errorMessage = error.message; + } + }); + + checkConflict = flow(function* checkConflict( + this: MetadataPropertyStore, + selectedNameList: string[] + ) { + this.requestStatus.checkConflict = 'pending'; + + try { + const result: AxiosResponse> = + yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/check_conflict`, + { + propertykeys: selectedNameList.map((selectedName) => + this.reuseableProperties.find( + ({ name }) => name === selectedName + ) + ) + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.checkedReusableProperties = result.data.data; + this.editedCheckedReusableProperties = cloneDeep(result.data.data); + this.requestStatus.checkConflict = 'success'; + } catch (error) { + this.requestStatus.checkConflict = 'failed'; + this.errorMessage = error.message; + } + }); + + recheckConflict = flow(function* recheckConflict( + this: MetadataPropertyStore + ) { + this.requestStatus.recheckConflict = 'pending'; + + try { + const result: AxiosResponse> = + yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/recheck_conflict`, + { + propertykeys: + this.editedCheckedReusableProperties!.propertykey_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ) + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.checkedReusableProperties = result.data.data; + this.editedCheckedReusableProperties = cloneDeep(result.data.data); + this.requestStatus.recheckConflict = 'success'; + } catch (error) { + this.requestStatus.recheckConflict = 'failed'; + this.errorMessage = error.message; + } + }); + + reuseMetadataProperties = flow(function* reuseMetadataProperties( + this: MetadataPropertyStore + ) { + this.requestStatus.reuseMetadataProperties = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/propertykeys/reuse`, + this.editedCheckedReusableProperties! + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.reuseMetadataProperties = 'success'; + } catch (error) { + this.requestStatus.reuseMetadataProperties = 'failed'; + this.errorMessage = error.message; + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts new file mode 100644 index 000000000..a91c0ad20 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/GraphManagementStore/metadataConfigsStore/vertexTypeStore.ts @@ -0,0 +1,1266 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { observable, action, flow, computed } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { cloneDeep, isUndefined, remove, size } from 'lodash-es'; + +import { MetadataConfigsRootStore } from './metadataConfigsStore'; +import { checkIfLocalNetworkOffline } from '../../utils'; + +import { baseUrl, responseData } from '../../types/common'; +import { + VertexType, + EditVertexTypeParams, + VertexTypeListResponse, + PageConfig, + CheckedReusableData, + VertexTypeValidateFields, + VertexTypeValidatePropertyIndexes +} from '../../types/GraphManagementStore/metadataConfigsStore'; +import i18next from '../../../i18n'; + +export class VertexTypeStore { + metadataConfigsRootStore: MetadataConfigsRootStore; + + constructor(MetadataConfigsRootStore: MetadataConfigsRootStore) { + this.metadataConfigsRootStore = MetadataConfigsRootStore; + } + + @observable validateLicenseOrMemories = true; + @observable currentTabStatus = 'list'; + + @observable.shallow requestStatus = { + fetchVertexTypeList: 'pending', + checkIfUsing: 'pending', + addVertexType: 'pending', + updateVertexType: 'pending', + deleteVertexType: 'pending', + checkConflict: 'pending', + recheckConflict: 'pending', + reuseVertexType: 'pending' + }; + + @observable vertexListPageConfig: PageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + + @observable errorMessage = ''; + + @observable.ref colorSchemas = [ + '#5c73e6', + '#569380', + '#8ecc93', + '#fe9227', + '#fe5b5d', + '#fd6ace', + '#4d8dda', + '#57c7e3', + '#ffe081', + '#c570ff', + '#2b65ff', + '#0eb880', + '#76c100', + '#ed7600', + '#e65055', + '#a64ee6', + '#108cee', + '#00b5d9', + '#f2ca00', + '#e048ae' + ]; + + @observable.ref vertexSizeSchemas = [ + { ch: '超小', en: 'TINY' }, + { ch: '小', en: 'SMALL' }, + { ch: '中', en: 'NORMAL' }, + { ch: '大', en: 'BIG' }, + { ch: '超大', en: 'HUGE' } + ]; + + @observable.shallow newVertexType: VertexType = { + name: '', + id_strategy: 'PRIMARY_KEY', + properties: [], + primary_keys: [], + property_indexes: [], + open_label_index: false, + style: { + color: '#5c73e6', + icon: null, + size: 'NORMAL', + display_fields: ['~id'] + } + }; + + // should user able to create new vertex type + @observable isCreatedReady = false; + // should user able to create new property index + @observable isAddNewPropertyIndexReady = true; + + // only have to check property + @observable isEditReady = true; + + @observable.ref selectedVertexType: VertexType | null = null; + @observable.ref selectedVertexTypeNames: string[] = []; + @observable.ref editedSelectedVertexType: EditVertexTypeParams = { + append_properties: [], + append_property_indexes: [], + remove_property_indexes: [], + style: { + color: '#5c73e6', + icon: null, + size: 'NORMAL', + display_fields: ['~id'] + } + }; + + @observable addedPropertiesInSelectedVertextType: Set = new Set(); + + @observable.ref vertexTypes: VertexType[] = []; + + @observable vertexTypeUsingStatus: Record | null = null; + + // reuse + @observable reusableVertexTypes: VertexType[] = []; + @observable checkedReusableData: CheckedReusableData | null = null; + @observable + editedCheckedReusableData: CheckedReusableData | null = null; + + @observable reusableVertexTypeNameChangeIndexes: Set = new Set< + number + >(); + @observable reusablePropertyNameChangeIndexes: Set = new Set< + number + >(); + @observable reusablePropertyIndexNameChangeIndexes: Set = new Set< + number + >(); + + @observable validateNewVertexTypeErrorMessage: Record< + VertexTypeValidateFields, + string | VertexTypeValidatePropertyIndexes[] + > = { + name: '', + properties: '', + primaryKeys: '', + displayFeilds: '', + propertyIndexes: [] + }; + + @observable.shallow validateEditVertexTypeErrorMessage: Record< + 'propertyIndexes', + VertexTypeValidatePropertyIndexes[] + > = { + propertyIndexes: [] + }; + + @observable validateReuseErrorMessage: Record< + 'vertexType' | 'property' | 'property_index', + string + > = { + vertexType: '', + property: '', + property_index: '' + }; + + @observable validateRenameReuseVertexErrorMessage: Record< + 'vertex' | 'property' | 'property_index', + { name: string } + > = { + vertex: { + name: '' + }, + property: { + name: '' + }, + property_index: { + name: '' + } + }; + + @computed get reusableVertexTypeDataMap() { + const dataMap: Record> = {}; + + this.reusableVertexTypes.forEach(({ name }) => { + dataMap[name] = { + key: name, + title: name + }; + }); + + return dataMap; + } + + @computed get isReadyToReuse() { + return ( + this.editedCheckedReusableData && + this.editedCheckedReusableData!.propertykey_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + this.editedCheckedReusableData!.vertexlabel_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + this.editedCheckedReusableData!.propertyindex_conflicts.every( + ({ status }) => status === 'PASSED' || status === 'EXISTED' + ) && + // no data standingby validation + this.reusableVertexTypeNameChangeIndexes.size === 0 && + this.reusablePropertyNameChangeIndexes.size === 0 && + this.reusablePropertyIndexNameChangeIndexes.size === 0 + ); + } + + @action + changeCurrentTabStatus(status: string) { + this.currentTabStatus = status; + } + + @action + mutateNewProperty(newVertexType: VertexType) { + this.newVertexType = newVertexType; + } + + @action + mutateSelectedVertexTypeNames(names: string[]) { + this.selectedVertexTypeNames = names; + } + + @action + mutatePageNumber(pageNumber: number) { + this.vertexListPageConfig.pageNumber = pageNumber; + } + + @action + mutatePageSort(sort: 'desc' | 'asc') { + this.vertexListPageConfig.sort = sort; + } + + @action + selectVertexType(index: number | null) { + if (index === null) { + this.selectedVertexType = null; + return; + } + + this.selectedVertexType = cloneDeep(this.vertexTypes[index]); + } + + @action + mutateSelectedProperty(selectedProperty: VertexType) { + this.selectedVertexType = selectedProperty; + } + + @action + mutateEditedSelectedVertexType( + editedSelectedVertexType: EditVertexTypeParams + ) { + this.editedSelectedVertexType = editedSelectedVertexType; + } + + @action + resetNewVertextType() { + this.newVertexType = { + name: '', + id_strategy: 'PRIMARY_KEY', + properties: [], + primary_keys: [], + property_indexes: [], + open_label_index: false, + style: { + color: '#5c73e6', + icon: null, + size: 'NORMAL', + display_fields: ['~id'] + } + }; + + this.isCreatedReady = false; + } + + @action + resetAddedPropertiesInSelectedVertextType() { + this.addedPropertiesInSelectedVertextType.clear(); + } + + @action + resetEditedSelectedVertexType() { + this.editedSelectedVertexType = { + append_properties: [], + append_property_indexes: [], + remove_property_indexes: [], + style: { + color: '#5c73e6', + icon: null, + size: 'NORMAL', + display_fields: ['~id'] + } + }; + + // need to clear checkbox status either + this.resetAddedPropertiesInSelectedVertextType(); + } + + // reuse + + @action + mutateEditedReusableData(newEditedReusableVertexTypes: CheckedReusableData) { + this.editedCheckedReusableData = newEditedReusableVertexTypes; + } + + @action + mutateReusableVertexTypeChangeIndexes(index: number) { + this.reusableVertexTypeNameChangeIndexes.add(index); + } + + @action + mutateReusablePropertyNameChangeIndexes(index: number) { + this.reusablePropertyNameChangeIndexes.add(index); + } + + @action + mutateReusablePropertyIndexNameChangeIndexes(index: number) { + this.reusablePropertyIndexNameChangeIndexes.add(index); + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusableVertexTypeName(index: number) { + this.editedCheckedReusableData!.vertexlabel_conflicts[ + index + ].entity.name = this.checkedReusableData!.vertexlabel_conflicts[ + index + ].entity.name; + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusablePropertyName(index: number) { + this.editedCheckedReusableData!.propertykey_conflicts[ + index + ].entity.name = this.checkedReusableData!.propertykey_conflicts[ + index + ].entity.name; + } + + // if cancel clicked, reset to the original name + @action + resetEditedReusablePropertyIndexName(index: number) { + this.editedCheckedReusableData!.propertyindex_conflicts[ + index + ].entity.name = this.checkedReusableData!.propertyindex_conflicts[ + index + ].entity.name; + } + + @action + clearReusableNameChangeIndexes() { + this.reusableVertexTypeNameChangeIndexes.clear(); + this.reusablePropertyNameChangeIndexes.clear(); + this.reusablePropertyIndexNameChangeIndexes.clear(); + } + + @action + resetReusableVertexTypes() { + this.reusableVertexTypes = []; + } + + @action + validateNewVertexType(category: VertexTypeValidateFields, initial = false) { + let isReady = true; + + // if initial is true, error message won't be assigned + // which intends to not pop up error layer + if (category === 'name') { + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(this.newVertexType.name)) { + if (this.newVertexType.name.length === 0) { + !initial && + (this.validateNewVertexTypeErrorMessage.name = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } else { + !initial && + (this.validateNewVertexTypeErrorMessage.name = i18next.t( + 'addition.store.rule4' + )); + isReady = false; + } + } else { + this.validateNewVertexTypeErrorMessage.name = ''; + } + } + + if (category === 'properties') { + if ( + this.newVertexType.properties.length === 0 && + this.newVertexType.id_strategy === 'PRIMARY_KEY' + ) { + !initial && + (this.validateNewVertexTypeErrorMessage.properties = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'primaryKeys') { + if ( + this.newVertexType.id_strategy === 'PRIMARY_KEY' && + this.newVertexType.primary_keys.length === 0 + ) { + !initial && + (this.validateNewVertexTypeErrorMessage.primaryKeys = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'displayFeilds') { + if (this.newVertexType.style.display_fields.length === 0) { + !initial && + (this.validateNewVertexTypeErrorMessage.displayFeilds = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + } + } + + if (category === 'propertyIndexes') { + this.isAddNewPropertyIndexReady = true; + + this.validateNewVertexTypeErrorMessage.propertyIndexes = this.newVertexType.property_indexes.map( + ({ name, type, fields }) => { + const validatedPropertyIndex = { + name: '', + type: '', + properties: '' + }; + + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { + if (!initial) { + if (name.length !== 0) { + validatedPropertyIndex.name = i18next.t('addition.store.rule4'); + } else { + validatedPropertyIndex.name = i18next.t( + 'addition.store.item-is-required' + ); + } + } + + isReady = false; + this.isAddNewPropertyIndexReady = false; + } else { + validatedPropertyIndex.name = ''; + } + + if (type.length === 0) { + !initial && + (validatedPropertyIndex.type = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + this.isAddNewPropertyIndexReady = false; + } else { + validatedPropertyIndex.type = ''; + } + + if (Array.isArray(fields)) { + if (fields.length === 0) { + !initial && + (validatedPropertyIndex.properties = i18next.t( + 'addition.store.item-is-required' + )); + isReady = false; + this.isAddNewPropertyIndexReady = false; + } + } else { + validatedPropertyIndex.properties = ''; + } + + return validatedPropertyIndex; + } + ); + } + + return isReady; + } + + @action + validateAllNewVertexType(initial = false) { + this.isCreatedReady = + this.validateNewVertexType('name', initial) && + this.validateNewVertexType('properties', initial) && + this.validateNewVertexType('primaryKeys', initial) && + this.validateNewVertexType('propertyIndexes', initial) && + this.validateNewVertexType('displayFeilds', initial); + } + + @action + validateEditVertexType(initial = false) { + this.isEditReady = true; + + this.validateEditVertexTypeErrorMessage.propertyIndexes = this.editedSelectedVertexType.append_property_indexes.map( + ({ name, type, fields }) => { + const validatedPropertyIndex = { + name: '', + type: '', + properties: '' + }; + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(name)) { + if (!initial) { + if (name.length !== 0) { + validatedPropertyIndex.name = i18next.t('addition.store.rule4'); + } else { + validatedPropertyIndex.name = i18next.t( + 'addition.store.item-is-required' + ); + } + } + + this.isEditReady = false; + } else { + validatedPropertyIndex.name = ''; + } + + if (type.length === 0) { + !initial && + (validatedPropertyIndex.type = i18next.t( + 'addition.store.item-is-required' + )); + this.isEditReady = false; + } else { + validatedPropertyIndex.type = ''; + } + + if (Array.isArray(fields)) { + if (fields.length === 0) { + !initial && + (validatedPropertyIndex.properties = i18next.t( + 'addition.store.item-is-required' + )); + this.isEditReady = false; + } + } else { + validatedPropertyIndex.properties = ''; + } + + return validatedPropertyIndex; + } + ); + } + + @action + validateReuseData( + category: 'vertexType' | 'property' | 'property_index', + originalValue: string, + newValue: string + ) { + if (!/^[\w\u4e00-\u9fa5]{1,128}$/.test(newValue)) { + if (newValue.length === 0) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.item-is-required' + ); + } else { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.rule4' + ); + } + + return false; + } + + // if value has changed + if (originalValue !== newValue) { + if (category === 'vertexType') { + if ( + !isUndefined( + this.checkedReusableData!.vertexlabel_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-vertex-name-notice' + ); + + return false; + } + } + + if (category === 'property') { + // check if there's an existed value equals to new value + if ( + !isUndefined( + this.checkedReusableData!.propertykey_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) || + !isUndefined( + this.checkedReusableData!.propertyindex_conflicts.find( + ({ entity }) => + !isUndefined( + entity.fields.find((fieldName) => fieldName === newValue) + ) + ) + ) || + !isUndefined( + this.checkedReusableData!.vertexlabel_conflicts.find( + ({ entity }) => + !isUndefined( + entity.properties.find(({ name }) => name === newValue) + ) || + !isUndefined( + entity.primary_keys.find((key) => key === newValue) + ) || + !isUndefined( + entity.property_indexes.find( + ({ fields }) => + !isUndefined( + fields.find((fieldName) => fieldName === newValue) + ) + ) + ) + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-property-name-notice' + ); + + return false; + } + } + + if (category === 'property_index') { + if ( + !isUndefined( + this.checkedReusableData!.propertyindex_conflicts.find( + ({ entity }) => entity.name === newValue + ) + ) || + !isUndefined( + this.checkedReusableData!.vertexlabel_conflicts.find( + ({ entity }) => + !isUndefined( + entity.property_indexes.find(({ name }) => name === newValue) + ) + ) + ) + ) { + this.validateReuseErrorMessage[category] = i18next.t( + 'addition.store.same-index-name-notice' + ); + + return false; + } + } + } + + return true; + } + + @action + mutateReuseData( + category: 'vertexType' | 'property' | 'property_index', + originalValue: string, + newValue: string + ) { + const editedCheckedReusableData = cloneDeep(this.editedCheckedReusableData); + + if (category === 'vertexType') { + } + + if (category === 'property') { + editedCheckedReusableData!.vertexlabel_conflicts.forEach( + ({ entity }, index) => { + const mutatePropertyIndex = entity.properties.findIndex( + ({ name }) => name === originalValue + ); + + if (mutatePropertyIndex !== -1) { + entity.properties[mutatePropertyIndex].name = newValue; + // property name in current vertex label has been edited + this.reusableVertexTypeNameChangeIndexes.add(index); + } + + const primaryKeyIndex = entity.primary_keys.findIndex( + (key) => key === originalValue + ); + + if (primaryKeyIndex !== -1) { + entity.primary_keys[primaryKeyIndex] = newValue; + this.reusableVertexTypeNameChangeIndexes.add(index); + } + + entity.property_indexes.forEach(({ fields }) => { + const mutatePropertyIndexIndex = fields.findIndex( + (fieldName) => fieldName === originalValue + ); + + if (mutatePropertyIndexIndex !== -1) { + fields[mutatePropertyIndex] = newValue; + this.reusableVertexTypeNameChangeIndexes.add(index); + } + }); + } + ); + + editedCheckedReusableData!.propertyindex_conflicts.forEach( + ({ entity }, index) => { + const mutateIndex = entity.fields.findIndex( + (fieldName) => fieldName === originalValue + ); + + if (mutateIndex !== -1) { + entity.fields[mutateIndex] = newValue; + this.reusablePropertyIndexNameChangeIndexes.add(index); + } + } + ); + } + + if (category === 'property_index') { + editedCheckedReusableData!.vertexlabel_conflicts.forEach( + ({ entity }, index) => { + const mutateVertexIndex = entity.property_indexes.findIndex( + ({ name }) => name === originalValue + ); + + if (mutateVertexIndex !== -1) { + entity.property_indexes[mutateVertexIndex].name = newValue; + this.reusableVertexTypeNameChangeIndexes.add(index); + } + } + ); + } + + this.editedCheckedReusableData = editedCheckedReusableData; + this.checkedReusableData = cloneDeep(editedCheckedReusableData); + } + + @action + deleteReuseData( + category: + | 'vertexlabel_conflicts' + | 'propertykey_conflicts' + | 'propertyindex_conflicts', + index: number + ) { + if (this.editedCheckedReusableData !== null) { + const editedCheckedReusableData = cloneDeep( + this.editedCheckedReusableData + ); + + if (category === 'vertexlabel_conflicts') { + const deletedVertexType = + editedCheckedReusableData.vertexlabel_conflicts[index]; + const deletedPropertyNames: string[] = []; + const deletedPropertyIndexNames: string[] = []; + + deletedVertexType.entity.properties.forEach(({ name }) => { + deletedPropertyNames.push(name); + }); + + deletedVertexType.entity.property_indexes.forEach(({ name }) => { + deletedPropertyIndexNames.push(name); + }); + + editedCheckedReusableData.vertexlabel_conflicts.splice(index, 1); + + // if there's no vertex labels, return since it will move back to the previous step + if (editedCheckedReusableData.vertexlabel_conflicts.length === 0) { + return; + } + + deletedPropertyIndexNames.forEach((propertyIndexName) => { + remove( + editedCheckedReusableData.propertyindex_conflicts, + ({ entity }) => entity.name === propertyIndexName + ); + }); + + deletedPropertyNames + .filter( + (propertyName) => + !isUndefined( + editedCheckedReusableData.vertexlabel_conflicts.find( + ({ entity }) => + isUndefined( + entity.properties.find( + ({ name }) => name === propertyName + ) + ) + ) + ) + ) + .forEach((propertyName) => { + remove( + editedCheckedReusableData.propertykey_conflicts, + ({ entity }) => entity.name === propertyName + ); + }); + } + + if (category === 'propertykey_conflicts') { + const deletedName = + editedCheckedReusableData.propertykey_conflicts[index].entity.name; + // remove property in properties + editedCheckedReusableData.propertykey_conflicts.splice(index, 1); + + // remove property in property index + editedCheckedReusableData.propertyindex_conflicts.forEach( + ({ entity }) => { + remove(entity.fields, (name) => name === deletedName); + } + ); + + remove( + editedCheckedReusableData.propertyindex_conflicts, + ({ entity }) => entity.fields.length === 0 + ); + + // remove property in vertex labels + editedCheckedReusableData.vertexlabel_conflicts.forEach( + ({ entity }, vertexlabelIndex) => { + const cb = (param: { name: string } | string) => { + const name = typeof param === 'string' ? param : param.name; + + if (name === deletedName) { + this.reusableVertexTypeNameChangeIndexes.add(vertexlabelIndex); + return true; + } + + return false; + }; + + remove(entity.properties, cb); + remove(entity.primary_keys, cb); + + entity.property_indexes.forEach(({ fields }) => { + remove(fields, cb); + }); + } + ); + } + + if (category === 'propertyindex_conflicts') { + const { + name: deletedPropertyIndexName, + fields + } = editedCheckedReusableData.propertyindex_conflicts[index].entity; + + editedCheckedReusableData.propertyindex_conflicts.splice(index, 1); + + // delete property index in vertex label + editedCheckedReusableData.vertexlabel_conflicts.forEach( + ({ entity }, index) => { + const deletedIndex = entity.property_indexes.findIndex( + ({ name }) => name === deletedPropertyIndexName + ); + + if (deletedIndex !== -1) { + this.reusableVertexTypeNameChangeIndexes.add(index); + entity.property_indexes.splice(deletedIndex, 1); + } + } + ); + } + + this.mutateEditedReusableData(editedCheckedReusableData); + } + } + + @action + resetValidateNewVertexTypeMessage( + category?: VertexTypeValidateFields, + propertIndexIndex?: number, + propertIndexProperty?: keyof VertexTypeValidatePropertyIndexes + ) { + if (isUndefined(category)) { + this.validateNewVertexTypeErrorMessage = { + name: '', + properties: '', + primaryKeys: '', + displayFeilds: '', + propertyIndexes: [] + }; + + return; + } + + if (category === 'propertyIndexes') { + (this.validateNewVertexTypeErrorMessage + .propertyIndexes as VertexTypeValidatePropertyIndexes[])[ + propertIndexIndex as number + ][propertIndexProperty as keyof VertexTypeValidatePropertyIndexes] = ''; + + return; + } + + this.validateNewVertexTypeErrorMessage[category] = ''; + } + + @action + resetValidateReuseErrorMessage( + category?: 'vertexType' | 'property' | 'property_index' + ) { + if (isUndefined(category)) { + this.validateReuseErrorMessage = { + property: '', + property_index: '', + vertexType: '' + }; + + return; + } + + this.validateReuseErrorMessage[category] = ''; + } + + @action + dispose() { + this.currentTabStatus = 'list'; + this.requestStatus = { + fetchVertexTypeList: 'pending', + checkIfUsing: 'pending', + addVertexType: 'pending', + updateVertexType: 'pending', + deleteVertexType: 'pending', + checkConflict: 'pending', + recheckConflict: 'pending', + reuseVertexType: 'pending' + }; + this.vertexListPageConfig = { + pageNumber: 1, + pageTotal: 0, + sort: '' + }; + this.errorMessage = ''; + + this.isCreatedReady = false; + this.isAddNewPropertyIndexReady = true; + this.isEditReady = true; + + this.resetNewVertextType(); + this.selectedVertexType = null; + this.selectedVertexTypeNames = []; + this.resetEditedSelectedVertexType(); + this.vertexTypes = []; + this.vertexTypeUsingStatus = null; + // reuse + this.reusableVertexTypes = []; + this.checkedReusableData = null; + this.editedCheckedReusableData = null; + this.resetValidateNewVertexTypeMessage(); + this.resetValidateReuseErrorMessage(); + } + + fetchVertexTypeList = flow(function* fetchVertexTypeList( + this: VertexTypeStore, + options?: { fetchAll?: boolean; reuseId?: number } + ) { + this.requestStatus.fetchVertexTypeList = 'pending'; + + const conn_id = + options && typeof options.reuseId === 'number' + ? options.reuseId + : this.metadataConfigsRootStore.currentId; + + try { + const result: AxiosResponse> = yield axios + .get(`${baseUrl}/${conn_id}/schema/vertexlabels`, { + params: { + page_no: this.vertexListPageConfig.pageNumber, + page_size: !options ? 10 : -1, + name_order: + this.vertexListPageConfig.sort !== '' + ? this.vertexListPageConfig.sort + : null + } + }) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + if (result.data.status === 401) { + this.validateLicenseOrMemories = false; + } + + throw new Error(result.data.message); + } + + if (options && typeof options.reuseId === 'number') { + this.reusableVertexTypes = result.data.data.records; + } else { + this.vertexTypes = result.data.data.records; + this.vertexListPageConfig.pageTotal = result.data.data.total; + } + + if (this.currentTabStatus !== 'reuse') { + result.data.data.records.length === 0 + ? (this.currentTabStatus = 'empty') + : (this.currentTabStatus = 'list'); + } + + this.requestStatus.fetchVertexTypeList = 'success'; + } catch (error) { + this.requestStatus.fetchVertexTypeList = 'failed'; + this.errorMessage = error.message; + } + }); + + checkIfUsing = flow(function* checkIfUsing( + this: VertexTypeStore, + selectedPropertyNames: string[] + ) { + this.requestStatus.checkIfUsing = 'pending'; + + try { + const result: AxiosResponse + >> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/check_using`, + { + names: selectedPropertyNames + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.vertexTypeUsingStatus = result.data.data; + this.requestStatus.checkIfUsing = 'success'; + } catch (error) { + this.requestStatus.checkIfUsing = 'failed'; + this.errorMessage = error.message; + } + }); + + addVertexType = flow(function* addVertexType(this: VertexTypeStore) { + this.requestStatus.addVertexType = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels`, + { + name: this.newVertexType.name, + id_strategy: this.newVertexType.id_strategy, + properties: this.newVertexType.properties, + primary_keys: this.newVertexType.primary_keys, + property_indexes: this.newVertexType.property_indexes, + open_label_index: this.newVertexType.open_label_index, + style: this.newVertexType.style + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.addVertexType = 'success'; + } catch (error) { + this.requestStatus.addVertexType = 'failed'; + this.errorMessage = error.message; + } + }); + + updateVertexType = flow(function* updateVertexType(this: VertexTypeStore) { + this.requestStatus.updateVertexType = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .put( + `${baseUrl}/${ + this.metadataConfigsRootStore.currentId + }/schema/vertexlabels/${this.selectedVertexType!.name}`, + { + append_properties: this.editedSelectedVertexType.append_properties, + append_property_indexes: this.editedSelectedVertexType + .append_property_indexes, + remove_property_indexes: this.editedSelectedVertexType + .remove_property_indexes, + style: this.editedSelectedVertexType.style + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.updateVertexType = 'success'; + } catch (error) { + this.requestStatus.updateVertexType = 'failed'; + this.errorMessage = error.message; + } + }); + + deleteVertexType = flow(function* deleteVertexType( + this: VertexTypeStore, + selectedVertexTypeNames: string[] + ) { + this.requestStatus.deleteVertexType = 'pending'; + + const combinedParams = selectedVertexTypeNames + .map((name) => 'names=' + name) + .join('&'); + + try { + const result: AxiosResponse> = yield axios + .delete( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels?` + + combinedParams + + `&skip_using=${String(size(selectedVertexTypeNames) !== 1)}` + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + if ( + selectedVertexTypeNames.length === this.vertexTypes.length && + this.vertexListPageConfig.pageNumber === + Math.ceil(this.vertexListPageConfig.pageTotal / 10) && + this.vertexListPageConfig.pageNumber > 1 + ) { + this.vertexListPageConfig.pageNumber = + this.vertexListPageConfig.pageNumber - 1; + } + + this.requestStatus.deleteVertexType = 'success'; + } catch (error) { + this.requestStatus.deleteVertexType = 'failed'; + this.errorMessage = error.message; + } + }); + + checkConflict = flow(function* checkConflict( + this: VertexTypeStore, + reuseId: string, + selectedVertexTypes: string[] + ) { + this.requestStatus.checkConflict = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/check_conflict`, + { + vertexlabels: selectedVertexTypes.map((selectedVertexType) => + this.reusableVertexTypes.find( + ({ name }) => name === selectedVertexType + ) + ) + }, + { + params: { + reused_conn_id: this.metadataConfigsRootStore.graphManagementStore.idList.find( + ({ name }) => name === reuseId + )!.id + } + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.checkedReusableData = result.data.data; + this.editedCheckedReusableData = cloneDeep(result.data.data); + this.requestStatus.checkConflict = 'success'; + } catch (error) { + this.requestStatus.checkConflict = 'failed'; + this.errorMessage = error.message; + } + }); + + recheckConflict = flow(function* recheckConflict(this: VertexTypeStore) { + this.requestStatus.recheckConflict = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/recheck_conflict`, + { + propertykeys: this.editedCheckedReusableData!.propertykey_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ), + propertyindexes: this.editedCheckedReusableData!.propertyindex_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ), + vertexlabels: this.editedCheckedReusableData!.vertexlabel_conflicts.map( + ({ entity }) => ({ + ...entity + }) + ) + } + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.checkedReusableData = result.data.data; + this.editedCheckedReusableData = cloneDeep(result.data.data); + this.requestStatus.recheckConflict = 'success'; + } catch (error) { + this.requestStatus.recheckConflict = 'failed'; + this.errorMessage = error.message; + } + }); + + reuseVertexType = flow(function* reuseVertexType(this: VertexTypeStore) { + this.requestStatus.reuseVertexType = 'pending'; + + try { + const result: AxiosResponse> = yield axios + .post( + `${baseUrl}/${this.metadataConfigsRootStore.currentId}/schema/vertexlabels/reuse`, + this.editedCheckedReusableData + ) + .catch(checkIfLocalNetworkOffline); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.requestStatus.reuseVertexType = 'success'; + } catch (error) { + this.requestStatus.reuseVertexType = 'failed'; + this.errorMessage = error.message; + } + }); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/appStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/appStore.ts new file mode 100644 index 000000000..d8819211f --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/appStore.ts @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { createContext } from 'react'; +import { observable, action, flow } from 'mobx'; +import axios, { AxiosResponse } from 'axios'; +import { responseData, baseUrl } from './types/common'; + +export class AppStore { + @observable user: string = 'Hi, User name'; + @observable currentId: number | null = null; + @observable currentTab: string = 'graph-management'; + @observable errorMessage = ''; + + @observable colorList: string[] = []; + + @observable.shallow requestStatus = { + fetchColorList: 'pending' + }; + + @action.bound + setCurrentId(id: number) { + this.currentId = id; + } + + @action.bound + switchCurrentTab(tab: string) { + this.currentTab = tab; + } + + @action.bound + setUser(user: string) { + this.user = user; + } + + @action + dispose() { + this.user = 'Hi, User name'; + this.currentTab = 'graph-management'; + this.requestStatus = { + fetchColorList: 'pending' + }; + } + + fetchColorList = flow(function* fetchColorList(this: AppStore) { + this.requestStatus.fetchColorList = 'pending'; + + try { + const result: AxiosResponse> = yield axios.get( + `${baseUrl}/${this.currentId}/schema/vertexlabels/optional-colors` + ); + + if (result.data.status !== 200) { + throw new Error(result.data.message); + } + + this.colorList = result.data.data; + this.requestStatus.fetchColorList = 'success'; + } catch (error) { + this.requestStatus.fetchColorList = 'failed'; + this.errorMessage = error.message; + console.error(error.message); + } + }); +} + +export default createContext(new AppStore()); diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/asyncTasksStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/asyncTasksStore.ts new file mode 100644 index 000000000..9a0a54052 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/asyncTasksStore.ts @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export function initRequestStatus() { + return { + fetchAsyncTaskList: 'standby', + fetchAsyncTask: 'standby', + deleteAsyncTask: 'standby', + abortAsyncTask: 'standby' + }; +} + +export function initErrorInfo() { + return { + fetchAsyncTaskList: { + code: NaN, + message: '' + }, + fetchAsyncTask: { + code: NaN, + message: '' + }, + deleteAsyncTask: { + code: NaN, + message: '' + }, + abortAsyncTask: { + code: NaN, + message: '' + } + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataAnalyzeStore/algorithmStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataAnalyzeStore/algorithmStore.ts new file mode 100644 index 000000000..b58aa6cd4 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataAnalyzeStore/algorithmStore.ts @@ -0,0 +1,529 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { v4 } from 'uuid'; + +export enum Algorithm { + loopDetection = 'loop-detection', + focusDetection = 'focus-detection', + shortestPath = 'shortest-path', + shortestPathAll = 'shortest-path-all', + allPath = 'all-path', + modelSimilarity = 'model-similarity', + neighborRank = 'neighbor-rank', + kStepNeighbor = 'k-step-neighbor', + kHop = 'k-hop', + customPath = 'custom-path', + radiographicInspection = 'radiographic-inspection', + sameNeighbor = 'same-neighbor', + weightedShortestPath = 'weighted-shortest-path', + singleSourceWeightedShortestPath = 'single-source-weighted-shortest-path', + jaccard = 'jaccard', + personalRankRecommendation = 'personal-rank' +} + +export function initializeRequestStatus() { + return { + fetchAlgorithmResult: 'standby' + }; +} + +export function initializeErrorInfo() { + return { + fetchAlgorithmResult: { + code: NaN, + message: '' + } + }; +} + +export function createLoopDetectionDefaultParams() { + return { + source: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + source_in_ring: true, + limit: '10', + capacity: '10000000' + }; +} + +export function createValidateLoopDetectionParamsErrorMessage() { + return { + source: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + source_in_ring: '', + limit: '', + capacity: '' + }; +} + +export function createFocusDetectionDefaultParams() { + return { + source: '', + target: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + capacity: '10000000', + limit: '10' + }; +} + +export function createValidateFocusDetectionParamsErrorMessage() { + return { + source: '', + target: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + skip_degree: '', + capacity: '', + limit: '' + }; +} + +export function createShortestPathDefaultParams() { + return { + source: '', + target: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + skip_degree: '0', + capacity: '10000000' + }; +} + +export function createValidateShortestPathParamsErrorMessage() { + return { + source: '', + target: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + skip_degree: '', + capacity: '' + }; +} + +export function createShortestPathAllDefaultParams() { + return { + source: '', + target: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + skip_degree: '0', + capacity: '10000000' + }; +} + +export function createValidateShortestPathAllParamsErrorMessage() { + return { + source: '', + target: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + skip_degree: '', + capacity: '' + }; +} + +export function createAllPathDefaultParams() { + return { + source: '', + target: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + skip_degree: '0', + capacity: '10000000', + limit: '10' + }; +} + +export function createValidateAllPathParamsErrorMessage() { + return { + source: '', + target: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + skip_degree: '', + capacity: '', + limit: '' + }; +} + +export function createModelSimilarityDefaultParams() { + return { + method: 'id', + source: '', + vertexType: '', + vertexProperty: [['', '']], + direction: 'BOTH', + least_neighbor: '', + similarity: '', + label: '__all__', + max_similar: '1', + least_similar: '1', + property_filter: '', + least_property_number: '', + max_degree: '10000', + capacity: '10000000', + limit: '10', + return_common_connection: false, + return_complete_info: false + }; +} + +export function createValidateModelSimilarParamsErrorMessage() { + return { + method: '', + source: '', + vertexType: '', + vertexProperty: '', + direction: '', + least_neighbor: '', + similarity: '', + label: '', + max_similar: '', + least_similar: '', + property_filter: '', + least_property_number: '', + max_degree: '', + capacity: '', + limit: '', + return_common_connection: '', + return_complete_info: '' + }; +} + +export function createNeighborRankDefaultParams(): { + source: string; + alpha: string; + capacity: string; + steps: { + uuid: string; + direction: string; + labels: string[]; + degree: string; + top: string; + }[]; +} { + return { + source: '', + alpha: '', + capacity: '10000000', + steps: [ + { + uuid: v4(), + direction: 'BOTH', + labels: ['__all__'], + degree: '10000', + top: '100' + } + ] + }; +} + +export function createValidateNeighborRankErrorMessage(): { + source: string; + alpha: string; + capacity: string; + steps: { + uuid: string; + direction: string; + labels: string; + degree: string; + top: string; + }[]; +} { + return { + source: '', + alpha: '', + capacity: '', + steps: [ + { + uuid: '', + direction: '', + labels: '', + degree: '', + top: '' + } + ] + }; +} + +export function createKStepNeighborDefaultParams() { + return { + source: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + limit: '10000000' + }; +} + +export function createValidateKStepNeighborParamsErrorMessage() { + return { + source: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + limit: '' + }; +} + +export function createKHopDefaultParams() { + return { + source: '', + direction: 'BOTH', + max_depth: '', + nearest: true, + label: '__all__', + max_degree: '10000', + limit: '10000000', + capacity: '10000000' + }; +} + +export function createValidateKHopParamsErrorMessage() { + return { + source: '', + direction: '', + max_depth: '', + nearest: '', + label: '', + max_degree: '', + limit: '', + capacity: '' + }; +} + +export function createCustomPathDefaultParams() { + return { + method: 'id', + source: '', + vertexType: '', + vertexProperty: [['', '']], + sort_by: 'NONE', + capacity: '10000000', + limit: '10', + steps: [ + { + uuid: v4(), + direction: 'BOTH', + labels: [], + properties: [['', '']], + weight_by: '', + default_weight: '', + degree: '10000', + sample: '100' + } + ] + }; +} + +export function createValidateCustomPathParamsErrorMessage() { + return { + method: '', + source: '', + vertexType: '', + vertexProperty: '', + sort_by: '', + capacity: '', + limit: '', + steps: [ + { + uuid: '', + direction: '', + labels: '', + properties: '', + weight_by: '', + default_weight: '', + degree: '', + sample: '' + } + ] + }; +} + +export function createRadiographicInspectionDefaultParams() { + return { + source: '', + direction: 'BOTH', + max_depth: '', + label: '__all__', + max_degree: '10000', + capacity: '1000000', + limit: '10' + }; +} + +export function createValidateRadiographicInspectionParamsErrorMessage() { + return { + source: '', + direction: '', + max_depth: '', + label: '', + max_degree: '', + capacity: '', + limit: '' + }; +} + +export function createSameNeighborDefaultParams() { + return { + vertex: '', + other: '', + direction: 'BOTH', + label: '__all__', + max_degree: '10000', + limit: '10000000' + }; +} + +export function createValidateSameNeighborParamsErrorMessage() { + return { + vertex: '', + other: '', + direction: '', + label: '', + max_degree: '', + limit: '' + }; +} + +export function createWeightedShortestPathDefaultParams() { + return { + source: '', + target: '', + direction: 'BOTH', + weight: '', + with_vertex: true, + label: '__all__', + max_degree: '10000', + skip_degree: '0', + capacity: '10000000' + }; +} + +export function createValidateWeightedShortestPathParamsErrorMessage() { + return { + source: '', + target: '', + direction: '', + weight: '', + with_vertex: '', + label: '', + max_degree: '', + skip_degree: '', + capacity: '' + }; +} + +export function createSingleSourceWeightedShortestPathDefaultParams() { + return { + source: '', + direction: 'BOTH', + weight: '', + with_vertex: true, + label: '__all__', + max_degree: '10000', + skip_degree: '0', + capacity: '10000000', + limit: '10' + }; +} + +export function createValidateSingleSourceWeightedShortestPathParamsErrorMessage() { + return { + source: '', + direction: '', + weight: '', + with_vertex: '', + label: '', + max_degree: '', + skip_degree: '', + capacity: '', + limit: '' + }; +} + +export function createJaccardDefaultParams() { + return { + vertex: '', + other: '', + direction: 'BOTH', + label: '__all__', + max_degree: '10000' + }; +} + +export function createValidateJaccardParamsErrorMessage() { + return { + vertex: '', + other: '', + direction: '', + label: '', + max_degree: '' + }; +} + +export function createPersonalRankDefaultParams() { + return { + source: '', + alpha: '', + max_depth: '', + with_label: 'SAME_LABEL', + label: '', + degree: '10000', + limit: '10000000', + sorted: true + }; +} + +export function createValidatePersonalRankParamsErrorMessage() { + return { + source: '', + alpha: '', + max_depth: '', + with_label: '', + label: '', + degree: '', + limit: '', + sorted: '' + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts new file mode 100644 index 000000000..236a95734 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataAnalyzeStore/dataAnalyzeStore.ts @@ -0,0 +1,183 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export function initalizeRequestStatus() { + return { + fetchIdList: 'standby', + fetchValueTypes: 'standby', + fetchVertexTypeList: 'standby', + fetchColorSchemas: 'standby', + fetchColorList: 'standby', + fetchEdgeTypes: 'standby', + fetchAllNodeStyle: 'standby', + fetchAllEdgeStyle: 'standby', + fetchAllPropertyIndexes: 'standby', + fetchGraphs: 'standby', + createAsyncTask: 'standby', + addGraphNode: 'standby', + fetchRelatedEdges: 'standby', + addGraphEdge: 'standby', + expandGraphNode: 'standby', + filteredGraphData: 'standby', + updateGraphProperties: 'standby', + fetchRelatedVertex: 'standby', + fetchFilteredPropertyOptions: 'standby', + addQueryCollection: 'standby', + editQueryCollection: 'standby', + deleteQueryCollection: 'standby', + fetchExecutionLogs: 'standby', + fetchFavoriteQueries: 'standby' + }; +} + +export function initalizeErrorInfo() { + return { + fetchIdList: { + code: NaN, + message: '' + }, + fetchValueTypes: { + code: NaN, + message: '' + }, + fetchVertexTypeList: { + code: NaN, + message: '' + }, + fetchColorSchemas: { + code: NaN, + message: '' + }, + fetchColorList: { + code: NaN, + message: '' + }, + fetchEdgeTypes: { + code: NaN, + message: '' + }, + fetchAllNodeStyle: { + code: NaN, + message: '' + }, + fetchAllEdgeStyle: { + code: NaN, + message: '' + }, + fetchAllPropertyIndexes: { + code: NaN, + message: '' + }, + fetchGraphs: { + code: NaN, + message: '' + }, + createAsyncTask: { + code: NaN, + message: '' + }, + addGraphNode: { + code: NaN, + message: '' + }, + fetchRelatedEdges: { + code: NaN, + message: '' + }, + addGraphEdge: { + code: NaN, + message: '' + }, + expandGraphNode: { + code: NaN, + message: '' + }, + filteredGraphData: { + code: NaN, + message: '' + }, + updateGraphProperties: { + code: NaN, + message: '' + }, + fetchRelatedVertex: { + code: NaN, + message: '' + }, + filteredPropertyOptions: { + code: NaN, + message: '' + }, + addQueryCollection: { + code: NaN, + message: '' + }, + editQueryCollection: { + code: NaN, + message: '' + }, + fetchExecutionLogs: { + code: NaN, + message: '' + }, + fetchFavoriteQueries: { + code: NaN, + message: '' + }, + deleteQueryCollection: { + code: NaN, + message: '' + } + }; +} + +export function createGraphNode() { + return { + id: '', + label: '', + properties: {} + }; +} + +export function createGraphEdge() { + return { + id: '', + source: '', + target: '', + label: '', + properties: {} + }; +} + +export function createGraphEditableProperties() { + return { + primary: new Map(), + nonNullable: new Map(), + nullable: new Map() + }; +} + +export function createNewGraphDataConfig() { + return { + id: '', + label: '', + properties: { + nullable: new Map(), + nonNullable: new Map() + } + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/dataImportRootStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/dataImportRootStore.ts new file mode 100644 index 000000000..442247a3d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/dataImportRootStore.ts @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export function initRequestStatus() { + return { + fetchFilehashes: 'standby', + uploadFiles: 'standby', + deleteFiles: 'standby', + fetchVertexTypeList: 'standby', + fetchEdgeTypeList: 'standby', + sendUploadCompleteSignal: 'standby', + sendMappingCompleteSignal: 'standby' + }; +} + +export function initErrorInfo() { + return { + fetchFilehashes: { + code: NaN, + message: '' + }, + uploadFiles: { + code: NaN, + message: '' + }, + deleteFiles: { + code: NaN, + message: '' + }, + fetchVertexTypeList: { + code: NaN, + message: '' + }, + fetchEdgeTypeList: { + code: NaN, + message: '' + }, + sendUploadCompleteSignal: { + code: NaN, + message: '' + }, + sendMappingCompleteSignal: { + code: NaN, + message: '' + } + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/dataMapStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/dataMapStore.ts new file mode 100644 index 000000000..297383095 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/dataMapStore.ts @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export function initRequestStatus() { + return { + updateFileConfig: 'standby', + fetchDataMaps: 'standby', + updateVertexMap: 'standby', + updateEdgeMap: 'standby', + deleteVertexMap: 'standby', + deleteEdgeMap: 'standby' + }; +} + +export function initErrorInfo() { + return { + updateFileConfig: { + code: NaN, + message: '' + }, + fetchDataMaps: { + code: NaN, + message: '' + }, + updateVertexMap: { + code: NaN, + message: '' + }, + updateEdgeMap: { + code: NaN, + message: '' + }, + deleteVertexMap: { + code: NaN, + message: '' + }, + deleteEdgeMap: { + code: NaN, + message: '' + } + }; +} + +export function createNewVertexType() { + return { + label: '', + id_fields: [''], + field_mapping: [], + value_mapping: [], + null_values: { + checked: ['NULL', 'null'], + customized: [] + } + }; +} + +export function createNewEdgeType() { + return { + label: '', + source_fields: [''], + target_fields: [''], + field_mapping: [], + value_mapping: [], + null_values: { + checked: ['NULL', 'null'], + customized: [] + } + }; +} + +export function createValidateFileInfoErrorMessage() { + return { + delimiter: '', + charset: '', + date_format: '', + skipped_line: '' + }; +} + +export function createValidateAdvanceConfigErrorMessage() { + return { + null_values: [], + value_mapping: [] + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/importManagmentStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/importManagmentStore.ts new file mode 100644 index 000000000..08be4a12b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/importManagmentStore.ts @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export function initRequestStatus() { + return { + fetchImportJobList: 'standby', + createNewJob: 'standby', + updateJobInfo: 'standby', + deleteJob: 'standby', + fetchFailedReason: 'standby' + }; +} + +export function initErrorInfo() { + return { + fetchImportJobList: { + code: NaN, + message: '' + }, + createNewJob: { + code: NaN, + message: '' + }, + updateJobInfo: { + code: NaN, + message: '' + }, + deleteJob: { + code: NaN, + message: '' + }, + fetchFailedReason: { + code: NaN, + message: '' + } + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/serverDataImportStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/serverDataImportStore.ts new file mode 100644 index 000000000..0cc588b1d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/factory/dataImportStore/serverDataImportStore.ts @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { LoadParameter } from '../../types/GraphManagementStore/dataImportStore'; + +export function initRequestStatus() { + return { + fetchImportTasks: 'standby', + fetchAllImportTasks: 'standby', + setConfigParams: 'standby', + startImport: 'standby', + pauseImport: 'standby', + resumeImport: 'standby', + abortImport: 'standby', + retryImport: 'standby', + deleteTaskImport: 'standby', + checkErrorLogs: 'standby' + }; +} + +export function initErrorInfo() { + return { + fetchImportTasks: { + code: NaN, + message: '' + }, + fetchAllImportTasks: { + code: NaN, + message: '' + }, + setConfigParams: { + code: NaN, + message: '' + }, + startImport: { + code: NaN, + message: '' + }, + pauseImport: { + code: NaN, + message: '' + }, + resumeImport: { + code: NaN, + message: '' + }, + abortImport: { + code: NaN, + message: '' + }, + retryImport: { + code: NaN, + message: '' + }, + deleteTaskImport: { + code: NaN, + message: '' + }, + checkErrorLogs: { + code: NaN, + message: '' + } + }; +} + +export function createValidateFileInfoErrorMessage(): Record< + keyof LoadParameter, + string +> { + return { + check_vertex: '', + insert_timeout: '', + max_parse_errors: '', + max_insert_errors: '', + retry_times: '', + retry_interval: '' + }; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/index.ts new file mode 100644 index 000000000..59f9b51c5 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/index.ts @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import AppStoreContext, { AppStore } from './appStore'; +import GraphManagementStoreContext, { + GraphManagementStore +} from './GraphManagementStore/graphManagementStore'; +import DataAnalyzeStoreContext, { + DataAnalyzeStore +} from './GraphManagementStore/dataAnalyzeStore/dataAnalyzeStore'; +import DataImportRootStoreContext, { + DataImportRootStore +} from './GraphManagementStore/dataImportStore/dataImportRootStore'; +import ImportManagerStoreContext, { + ImportManagerStore +} from './GraphManagementStore/dataImportStore/ImportManagerStore'; +import AsyncTasksStoreContext, { + AsyncTasksStore +} from './GraphManagementStore/asyncTasksStore'; + +export { + AppStore, + AppStoreContext, + GraphManagementStore, + GraphManagementStoreContext, + DataAnalyzeStore, + DataAnalyzeStoreContext, + DataImportRootStore, + DataImportRootStoreContext, + ImportManagerStore, + ImportManagerStoreContext, + AsyncTasksStore, + AsyncTasksStoreContext +}; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/asyncTasksStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/asyncTasksStore.ts new file mode 100644 index 000000000..48d31e170 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/asyncTasksStore.ts @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export interface AsyncTask { + id: number; + task_type: string; + task_name: string; + task_status: string; + task_create: string; + task_update: string; + task_result: string; +} + +export interface AsyncTaskListResponse { + records: AsyncTask[]; + total: number; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts new file mode 100644 index 000000000..7a2eed3ac --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/dataAnalyzeStore.ts @@ -0,0 +1,328 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { Node, Edge } from 'vis-network'; +import { dict, responseData } from '../common'; +import { EdgeType } from './metadataConfigsStore'; + +export type ColorSchemas = dict; +export type RuleMap = dict; + +export interface FetchColorSchemas { + status: number; + data: ColorSchemas; + message: string; +} + +export type FetchFilteredPropertyOptions = responseData; + +export interface GraphNode extends Node { + id: string; + label: string; + properties: dict; + chosen?: any; + vLabel?: string; + style?: dict; +} + +export interface GraphEdge extends Edge { + id: string; + label: string; + properties: dict; + source: string; + target: string; +} + +export interface GraphView { + vertices: GraphNode[]; + edges: GraphEdge[]; +} + +export interface NewGraphData { + id?: string; + label: string; + properties: { + nullable: Map; + nonNullable: Map; + }; +} + +export interface EditableProperties { + nonNullable: Map; + nullable: Map; +} + +export interface QueryResult { + table_view: { + header: string[]; + rows: dict[]; + }; + json_view: { + data: dict[]; + }; + graph_view: GraphView; + type: string; +} + +export type FetchGraphResponse = responseData; + +export interface ValueTypes { + name: string; + data_type: string; + cardinality: string; + create_time: string; +} + +export interface AddQueryCollectionParams { + name: string; + content: string; +} + +export interface ExecutionLogs { + id: number; + async_id: number; + async_status: + | 'UNKNOWN' + | 'SCHEDULING' + | 'SCHEDULED' + | 'QUEUED' + | 'RESTORING' + | 'RUNNING' + | 'SUCCESS' + | 'CANCELLING' + | 'CANCELLED' + | 'FAILED'; + type: string; + algorithm_name: string; + content: string; + status: 'SUCCESS' | 'RUNNING' | 'FAILED'; + duration: string; + create_time: string; +} + +export type ExecutionLogsResponse = responseData<{ + records: ExecutionLogs[]; + total: number; +}>; + +export interface FavoriteQuery { + id: number; + name: string; + content: string; + create_time: string; +} + +export type FavoriteQueryResponse = responseData<{ + records: FavoriteQuery[]; + total: number; +}>; + +/* algorithm store */ +export interface LoopDetectionParams { + source: string; + direction: string; + max_depth: string; + label: string; + source_in_ring: boolean; + max_degree: string; + limit: string; + capacity: string; +} + +export interface FocusDetectionParams { + source: string; + target: string; + direction: string; + max_depth: string; + label: string; + max_degree: string; + limit: string; + capacity: string; +} + +export interface ShortestPathAlgorithmParams { + source: string; + target: string; + direction: string; + max_depth: string; + label: string; + max_degree: string; + skip_degree: string; + capacity: string; +} + +// export type ShortestPathAllAlgorithmParams = ShortestPathAlgorithmParams; +export interface ShortestPathAllAlgorithmParams { + source: string; + target: string; + direction: string; + max_depth: string; + label: string; + max_degree: string; + skip_degree: string; + capacity: string; +} + +export type AllPathAlgorithmParams = { + source: string; + target: string; + direction: string; + max_depth: string; + label: string; + max_degree: string; + capacity: string; + limit: string; +}; + +export interface ModelSimilarityParams { + method: string; + source: string; + vertexType: string; + vertexProperty: string[][]; + direction: string; + least_neighbor: string; + similarity: string; + label: string; + max_similar: string; + least_similar: string; + property_filter: string; + least_property_number: string; + max_degree: string; + capacity: string; + limit: string; + return_common_connection: boolean; + return_complete_info: boolean; +} + +export interface NeighborRankRule { + uuid: string; + direction: string; + labels: string[]; + degree: string; + top: string; +} + +export interface NeighborRankParams { + source: string; + alpha: string; + capacity: string; + steps: NeighborRankRule[]; +} + +export interface KStepNeighbor { + source: string; + direction: string; + max_depth: string; + label: string; + max_degree: string; + limit: string; +} + +export interface KHop { + source: string; + direction: string; + max_depth: string; + nearest: boolean; + label: string; + max_degree: string; + limit: string; + capacity: string; +} + +export interface CustomPathParams { + method: string; + source: string; + vertexType: string; + vertexProperty: string[][]; + sort_by: string; + capacity: string; + limit: string; + steps: CustomPathRule[]; +} + +export interface CustomPathRule { + uuid: string; + direction: string; + labels: string[]; + properties: string[][]; + weight_by: string; + default_weight: string; + degree: string; + sample: string; +} + +export interface RadiographicInspection { + source: string; + direction: string; + max_depth: string; + label: string; + max_degree: string; + capacity: string; + limit: string; +} + +export interface SameNeighbor { + vertex: string; + other: string; + direction: string; + label: string; + max_degree: string; + limit: string; +} + +export interface WeightedShortestPath { + source: string; + target: string; + direction: string; + weight: string; + with_vertex: boolean; + label: string; + max_degree: string; + skip_degree: string; + capacity: string; +} + +export interface SingleSourceWeightedShortestPath { + source: string; + direction: string; + weight: string; + with_vertex: boolean; + label: string; + max_degree: string; + skip_degree: string; + capacity: string; + limit: string; +} + +export interface Jaccard { + vertex: string; + other: string; + direction: string; + label: string; + max_degree: string; +} + +export interface PersonalRank { + source: string; + alpha: string; + max_depth: string; + with_label: string; + label: string; + degree: string; + limit: string; + sorted: boolean; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/dataImportStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/dataImportStore.ts new file mode 100644 index 000000000..fbeb8c034 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/dataImportStore.ts @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { CancellablePromise } from 'mobx/lib/api/flow'; + +export interface JobGlance { + name: string; + description: string; +} + +export interface Job { + id: number; + conn_id: number; + job_name: string; + job_remarks: string; + job_size: string; + job_status: string; + job_duration: string; + update_time: string; + create_time: string; +} + +export interface JobResponse { + records: Job[]; + total: number; +} + +export interface JobFailedReason { + task_id: number; + file_id: number; + file_name: string; + reason: string; +} + +export interface FileUploadTask { + name: string; + size: number; + status: 'uploading' | 'failed' | 'success'; + chunkList: { + chunkIndex: number; + chunk: Blob; + }[]; + chunkTotal: number; + uploadedChunkTotal: number; + pendingChunkIndexes: number[]; + failedChunkIndexes: number[]; + uploadedChunksIndexes: number[]; +} + +export interface FileUploadResult { + id: string; + name: string; + size: string; + status: string; + cause: string | null; +} + +export interface FileUploadQueue { + fileName: string; + status: string; + task: CancellablePromise; +} + +export interface FileConfig { + has_header: boolean; + column_names: string[]; + column_values: string[]; + format: string; + delimiter: string; + charset: string; + date_format: string; + time_zone: string; + skipped_line: string; +} + +export type FileValidator = Pick< + FileConfig, + 'delimiter' | 'charset' | 'date_format' | 'skipped_line' +>; + +export interface FieldMapping { + column_name: string; + mapped_name: string; +} + +export interface ValueMapping { + column_name: string; + values: { + column_value: string; + mapped_value: string; + }[]; +} + +export type ValueMapValidator = { + null_values: string[]; + value_mapping: ValueMapping[]; +}; + +export interface NullValues { + checked: string[]; + customized: string[]; +} + +export interface VertexMap { + id?: string; + label: string; + id_fields: string[]; + field_mapping: FieldMapping[]; + value_mapping: ValueMapping[]; + null_values: NullValues; +} + +export interface EdgeMap { + id?: string; + label: string; + source_fields: string[]; + target_fields: string[]; + field_mapping: FieldMapping[]; + value_mapping: ValueMapping[]; + null_values: NullValues; +} + +export interface LoadParameter { + check_vertex: boolean; + insert_timeout: string; + max_parse_errors: string; + max_insert_errors: string; + retry_times: string; + retry_interval: string; +} + +export interface FileMapInfo { + id: number; + name: string; + total_lines: number; + total_size: string; + file_setting: FileConfig; + file_status: string; + vertex_mappings: VertexMap[]; + edge_mappings: EdgeMap[]; + load_parameter: LoadParameter; + last_access_time: string; +} + +export interface FileMapResult { + records: FileMapInfo[]; +} + +export interface ImportTasks { + id: number; + conn_id: number; + file_id: number; + vertices: string[]; + edges: string[]; + load_rate: number; + load_progress: number; + file_total_lines: number; + file_read_lines: number; + status: string; + duration: string; +} + +export interface AllImportTasksRecords { + records: ImportTasks[]; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/graphManagementStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/graphManagementStore.ts new file mode 100644 index 000000000..fdca50cb1 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/graphManagementStore.ts @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { responseData } from '../common'; + +export interface LincenseInfo { + name: string; + edition: string; + version: string; + allowed_graphs: number; + allowed_datasize: string; +} + +export interface GraphData { + id: number; + name: string; + graph: string; + host: string; + port: number; + create_time: string; + username: string; + enabled: boolean; + password: string; +} + +export interface GraphDataConfig { + [index: string]: string | undefined; + name: string; + graph: string; + host: string; + port: string; + username: string; + password: string; +} + +export interface GraphDataPageConfig { + pageNumber: number; + pageSize: number; + pageTotal: number; +} + +export interface GraphDataList { + records: GraphData[]; + total: number; +} + +export type GraphDataResponse = responseData; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/metadataConfigsStore.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/metadataConfigsStore.ts new file mode 100644 index 000000000..8ed2c3a8c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/GraphManagementStore/metadataConfigsStore.ts @@ -0,0 +1,219 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { dict } from '../common'; +import { VertexTypeStore } from '../../GraphManagementStore/metadataConfigsStore/vertexTypeStore'; + +export interface PageConfig { + pageNumber: number; + pageTotal: number; + sort: 'asc' | 'desc' | ''; +} + +// metadata property + +export interface MetadataProperty { + name: string; + data_type: string; + cardinality: string; + create_time?: string; +} + +export interface NewMetadataProperty extends MetadataProperty { + _name?: string; +} + +export interface MetadataPropertyListResponse { + records: MetadataProperty[]; + total: number; +} + +// vertex types + +export type VertexTypeProperty = { + name: string; + nullable: boolean; +}; + +export type VertexTypePropertyIndex = { + name: string; + type: string; + fields: string[]; +}; + +export type VertexTypeStyle = { + icon: string | null; + color: string | null; + size: string; + display_fields: string[]; +}; + +export type VertexTypeValidateFields = + | 'name' + | 'properties' + | 'primaryKeys' + | 'displayFeilds' + | 'propertyIndexes'; + +export type VertexTypeValidatePropertyIndexes = { + name: string; + type: string; + properties: string; +}; + +export interface EditVertexTypeParams { + append_properties: VertexTypeProperty[]; + append_property_indexes: VertexTypePropertyIndex[]; + remove_property_indexes: string[]; + style: { + color: string | null; + icon: null; + size: string; + display_fields: string[]; + }; +} + +export interface VertexType { + [index: string]: string | any[] | VertexTypeStyle | boolean; + + name: string; + id_strategy: string; + properties: VertexTypeProperty[]; + primary_keys: string[]; + property_indexes: VertexTypePropertyIndex[]; + open_label_index: boolean; + style: VertexTypeStyle; +} + +export interface VertexTypeListResponse { + records: VertexType[]; + total: number; +} + +export interface CheckedReusableData { + type: string; + propertykey_conflicts: { entity: MetadataProperty; status: string }[]; + propertyindex_conflicts: { entity: MetadataPropertyIndex; status: string }[]; + vertexlabel_conflicts: { entity: VertexType; status: string }[]; + edgelabel_conflicts: { entity: EdgeType; status: string }[]; +} + +export interface ReCheckedReusableData { + propertykeys: MetadataProperty[]; + propertyindexes: MetadataPropertyIndex[]; + vertexlabels: VertexType[]; +} + +// edge types + +type EdgeTypeProperty = VertexTypeProperty; +type EdgeTypePropertyIndex = VertexTypePropertyIndex; + +type EdgeTypeStyle = { + color: string | null; + icon: string | null; + with_arrow: boolean; + thickness: string; + display_fields: string[]; +}; + +export type EdgeTypeValidateFields = + | 'name' + | 'sourceLabel' + | 'targetLabel' + | 'properties' + | 'sortKeys' + | 'propertyIndexes' + | 'displayFeilds'; + +export type EdgeTypeValidatePropertyIndexes = VertexTypeValidatePropertyIndexes; + +export interface EditEdgeTypeParams { + append_properties: VertexTypeProperty[]; + append_property_indexes: VertexTypePropertyIndex[]; + remove_property_indexes: string[]; + style: { + color: string | null; + icon: null; + with_arrow: boolean | null; + thickness: string; + display_fields: string[]; + }; +} + +export interface EdgeType { + name: string; + source_label: string; + target_label: string; + link_multi_times: boolean; + properties: EdgeTypeProperty[]; + sort_keys: string[]; + property_indexes: EdgeTypePropertyIndex[]; + open_label_index: boolean; + style: EdgeTypeStyle; +} + +export interface EdgeTypeListResponse { + records: EdgeType[]; + total: number; +} + +// metadata property index + +export interface MetadataPropertyIndex { + owner: string; + owner_type: string; + name: string; + type: string; + fields: string[]; +} + +export interface MetadataPropertyIndexResponse { + records: MetadataPropertyIndex[]; + total: number; +} + +// graph view data + +export type DrawerTypes = + | 'create-property' + | 'create-vertex' + | 'create-edge' + | 'check-property' + | 'check-vertex' + | 'check-edge' + | 'edit-vertex' + | 'edit-edge' + | ''; + +export interface GraphViewData { + vertices: { + id: string; + label: string; + properties: Record; + primary_keys: string[]; + style?: dict; + }[]; + edges: { + id: string; + label: string; + source: string; + target: string; + properties: Record; + sort_keys: string[]; + }[]; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/common.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/common.ts new file mode 100644 index 000000000..ea4ec7eeb --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/types/common.ts @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export const baseUrl = '/api/v1.2/graph-connections'; + +export type dict = Record; + +export interface responseData { + status: number; + data: T; + message: string; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/utils/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/utils/index.ts new file mode 100644 index 000000000..a2d2c490c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/stores/utils/index.ts @@ -0,0 +1,273 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { isUndefined, size } from 'lodash-es'; +import isInt from 'validator/lib/isInt'; +import isFloat from 'validator/lib/isFloat'; +import isBoolean from 'validator/lib/isBoolean'; +import isISO8601 from 'validator/lib/isISO8601'; +import isUUID from 'validator/lib/isUUID'; +import isEmpty from 'validator/lib/isEmpty'; +import i18next from '../../i18n'; + +import type vis from 'vis-network'; +import type { + GraphNode, + GraphEdge +} from '../types/GraphManagementStore/dataAnalyzeStore'; +import type { + VertexTypeProperty, + MetadataProperty +} from '../types/GraphManagementStore/metadataConfigsStore'; + +/* variables */ + +export const vertexRadiusMapping: Record = { + HUGE: 40, + BIG: 30, + NORMAL: 20, + SMALL: 10, + TINY: 1 +}; + +export const edgeWidthMapping: Record = { + THICK: 45, + NORMAL: 20, + FINE: -10 +}; + +/* functions */ + +export function checkIfLocalNetworkOffline(error: any) { + if (error.request) { + throw new Error(i18next.t('addition.store.network-error')); + } +} + +export function mapMetadataProperties( + properties: VertexTypeProperty[], + propertyCollection: MetadataProperty[] +) { + const mappedProperties: Record = {}; + + properties.forEach(({ name }) => { + const value = propertyCollection.find( + ({ name: propertyName }) => propertyName === name + )!.data_type; + + mappedProperties[name] = value; + }); + + return mappedProperties; +} + +export function generateGraphModeId( + id: string, + source: string, + target: string +): string { + return `${source}-${id}->${target}`; +} + +export function convertArrayToString( + values: any[] | any, + separtor: string = ',' +) { + return Array.isArray(values) + ? values.filter((value) => value !== '').join(separtor) + : String(values); +} + +export function validateGraphProperty( + type: string, + value: string, + premitEmpty: boolean = false +) { + if (premitEmpty) { + if (value === '') { + return true; + } + } + + switch (type) { + case 'BOOLEAN': + return isBoolean(value); + case 'BYTE': + return isInt(value) && Number(value) > -128 && Number(value) <= 127; + case 'INT': + case 'LONG': + return isInt(value); + case 'FLOAT': + case 'DOUBLE': + return isFloat(value); + case 'TEXT': + case 'BLOB': + return !isEmpty(value); + case 'DATE': + return isISO8601(value); + case 'UUID': + return isUUID(value); + } +} + +export function addGraphNodes( + collection: GraphNode[], + visGraphNodes: vis.data.DataSet, + vertexSizeMapping: Record, + colorMappings: Record, + displayFieldMappings: Record +) { + collection.forEach(({ id, label, properties }) => { + const joinedLabel = !isUndefined(displayFieldMappings[label]) + ? displayFieldMappings[label] + .map((field) => (field === '~id' ? id : properties[field])) + .filter((label) => label !== undefined && label !== null) + .join('-') + : id; + + visGraphNodes.add({ + id, + label: + size(joinedLabel) <= 15 + ? joinedLabel + : joinedLabel.slice(0, 15) + '...', + vLabel: label, + value: vertexRadiusMapping[vertexSizeMapping[label]], + font: { size: 16 }, + properties, + title: ` +
+
${i18next.t('addition.common.vertex-type')}:
+
${label}
+
+
+
${i18next.t('addition.common.vertex-id')}:
+
${id}
+
+ ${Object.entries(properties) + .map(([key, value]) => { + return `
+
${key}:
+
${convertArrayToString(value)}
+
`; + }) + .join('')} + `, + color: { + background: colorMappings[label] || '#5c73e6', + border: colorMappings[label] || '#5c73e6', + highlight: { background: '#fb6a02', border: '#fb6a02' }, + hover: { background: '#ec3112', border: '#ec3112' } + }, + // reveal label when zoom to max + scaling: { + label: { + max: Infinity, + maxVisible: Infinity + } + }, + chosen: { + node(values: any, id: string, selected: boolean, hovering: boolean) { + if (hovering || selected) { + values.shadow = true; + values.shadowColor = 'rgba(0, 0, 0, 0.6)'; + values.shadowX = 0; + values.shadowY = 0; + values.shadowSize = 25; + } + + if (selected) { + values.size += 5; + } + } + } + }); + }); +} + +export function addGraphEdges( + collection: GraphEdge[], + visGraphEdges: vis.data.DataSet, + colorMappings: Record, + edgeThicknessMappings: Record, + edgeWithArrowMappings: Record, + displayFieldMappings: Record +) { + collection.forEach(({ id, label, source, target, properties }) => { + const joinedLabel = displayFieldMappings[label] + .map((field) => (field === '~id' ? label : properties[field])) + .join('-'); + + visGraphEdges.add({ + id, + label: + joinedLabel.length <= 15 + ? joinedLabel + : joinedLabel.slice(0, 15) + '...', + properties, + source, + target, + from: source, + to: target, + font: { size: 16, strokeWidth: 0, color: '#666' }, + arrows: edgeWithArrowMappings[label] ? 'to' : '', + color: colorMappings[label], + value: edgeWidthMapping[edgeThicknessMappings[label]], + title: ` +
+
${i18next.t('addition.common.edge-type')}:
+
${label}
+
+
+
${i18next.t('addition.common.edge-id')}:
+
${id}
+
+ ${Object.entries(properties) + .map(([key, value]) => { + return `
+
${key}:
+
${convertArrayToString(value)}
+
`; + }) + .join('')} + ` + }); + }); +} + +export function formatVertexIdText( + text: string, + replacedText: string, + revert: boolean = false +) { + if (!revert) { + return text === '~id' ? replacedText : text; + } else { + return text === replacedText ? '~id' : text; + } +} + +export function isGtNegativeOneButZero(value: string | number) { + if (typeof value === 'number') { + value = String(value); + } + + return !( + !isEmpty(value) && + (!isInt(value as string, { min: -1 }) || String(Number(value)) === '0') + ); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/third-party.d.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/third-party.d.ts new file mode 100644 index 000000000..9e63323ba --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/third-party.d.ts @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +declare module 'hubble-ui'; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/calcAlgorithmFormWidth.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/calcAlgorithmFormWidth.ts new file mode 100644 index 000000000..76e1a896c --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/calcAlgorithmFormWidth.ts @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export function calcAlgorithmFormWidth( + expand: boolean, + min: number, + max: number +) { + return expand ? min : max; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/convertStringToJSON.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/convertStringToJSON.ts new file mode 100644 index 000000000..975563027 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/convertStringToJSON.ts @@ -0,0 +1,32 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export default function convertStringToJSON(text: any): object | null { + if (typeof text !== 'string') { + return null; + } + + let context; + + try { + context = JSON.parse(text); + } catch (e) { + return null; + } + + return typeof context === 'object' && context !== null ? context : null; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/filterEmptyAlgorightmParams.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/filterEmptyAlgorightmParams.ts new file mode 100644 index 000000000..6918ddc0a --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/filterEmptyAlgorightmParams.ts @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { omitBy, cloneDeep, isEmpty } from 'lodash-es'; + +export function removeLabelKey>( + params: T, + isCloned = true, + key = 'label' +) { + const paramObject = isCloned ? params : cloneDeep(params); + + if (paramObject[key] === '__all__') { + delete paramObject[key]; + } + + return paramObject; +} + +export function filterEmptyAlgorightmParams(params: object, keys: string[]) { + return omitBy(params, (value, key) => keys.includes(key) && isEmpty(value)); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/formatAlgorithmStatement.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/formatAlgorithmStatement.ts new file mode 100644 index 000000000..56b46cc93 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/formatAlgorithmStatement.ts @@ -0,0 +1,271 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import { + isUndefined, + cloneDeep, + trimEnd, + isEmpty, + isObject, + fromPairs +} from 'lodash-es'; + +import type { TFunction, i18n } from 'i18next'; +import type { + NeighborRankParams, + CustomPathParams +} from '../stores/types/GraphManagementStore/dataAnalyzeStore'; + +export const AlgorithmInternalNameMapping: Record = { + rings: 'loop-detection', + crosspoints: 'focus-detection', + shortpath: 'shortest-path', + allshortpath: 'shortest-path-all', + paths: 'all-path', + fsimilarity: 'model-similarity', + neighborrank: 'neighbor-rank', + kneighbor: 'k-step-neighbor', + kout: 'k-hop', + customizedpaths: 'custom-path', + rays: 'radiographic-inspection', + sameneighbors: 'same-neighbor', + weightedshortpath: 'weighted-shortest-path', + singleshortpath: 'single-source-weighted-shortest-path', + jaccardsimilarity: 'jaccard', + personalrank: 'personal-rank' +}; + +export function formatAlgorithmStatement( + content: string, + algorithmType: string | undefined, + translator: TFunction, + i18n: i18n +) { + if (isUndefined(algorithmType)) { + return ['']; + } + + const algorithmName = translator( + `data-analyze.algorithm-forms.api-name-mapping.${algorithmType}` + ); + let algorithmParams = JSON.parse(content); + const statements: string[] = [algorithmName]; + + if (algorithmType === 'fsimilarity') { + let convertedParams: Record; + + if (!isUndefined(algorithmParams.sources)) { + convertedParams = { + source: algorithmParams.sources.ids ?? [], + 'vertex-type': algorithmParams.sources.label ?? '', + 'vertex-property': algorithmParams.sources.properties ?? [], + direction: algorithmParams.direction, + least_neighbor: algorithmParams.min_neighbors, + similarity: algorithmParams.alpha, + label: + algorithmParams.label === null || algorithmParams.label === '__all__' + ? translator( + `data-analyze.algorithm-forms.model-similarity.pre-value` + ) + : algorithmParams.label, + max_similar: algorithmParams.top, + least_similar: algorithmParams.min_similars, + property_filter: algorithmParams.group_property, + least_property_number: algorithmParams.min_groups, + max_degree: algorithmParams.max_degree, + capacity: algorithmParams.capacity, + limit: algorithmParams.limit, + return_common_connection: algorithmParams.with_intermediary, + return_complete_info: algorithmParams.with_vertex + }; + } else { + // no need to convert relative fields in temp log (which sources field is undefined) + convertedParams = { ...algorithmParams }; + convertedParams['vertex-type'] = convertedParams.vertexType; + convertedParams['vertex-property'] = convertedParams.vertexProperty; + convertedParams.label = + algorithmParams.label === null || algorithmParams.label === '__all__' + ? translator( + `data-analyze.algorithm-forms.model-similarity.pre-value` + ) + : algorithmParams.label; + + delete convertedParams.vertexType; + delete convertedParams.vertexProperty; + } + + algorithmParams = convertedParams; + } + + if (algorithmType === 'neighborrank') { + const convertedParams = cloneDeep(algorithmParams); + + convertedParams.steps = []; + + (algorithmParams as NeighborRankParams).steps.forEach( + ({ degree, direction, labels, top }, stepIndex) => { + const step: Record = {}; + + step[ + trimEnd( + translator( + 'data-analyze.algorithm-forms.neighbor-rank.options.degree' + ), + ':' + ) + ] = degree; + step[ + trimEnd( + translator( + 'data-analyze.algorithm-forms.neighbor-rank.options.direction' + ), + ':' + ) + ] = direction; + step[ + trimEnd( + translator( + 'data-analyze.algorithm-forms.neighbor-rank.options.label' + ), + ':' + ) + ] = isEmpty(labels) + ? translator('data-analyze.algorithm-forms.neighbor-rank.pre-value') + : labels.map((label) => + // value may be "__all__" from temp log (local) + label === '__all__' + ? translator( + 'data-analyze.algorithm-forms.neighbor-rank.pre-value' + ) + : label + ); + step[ + trimEnd( + translator( + 'data-analyze.algorithm-forms.neighbor-rank.options.top' + ), + ':' + ) + ] = top; + + convertedParams.steps[stepIndex] = step; + } + ); + + algorithmParams = convertedParams; + } + + // params struct fetched from server is not as consistent as front end + if (algorithmType === 'kout' && algorithmParams.hasOwnProperty('step')) { + algorithmParams.direction = algorithmParams.step.direction; + algorithmParams.max_degree = algorithmParams.step.degree; + algorithmParams.skip_degree = algorithmParams.step.skip_degree; + algorithmParams.label = algorithmParams.step.labels[0] ?? null; + + delete algorithmParams.step; + } + + if (algorithmType === 'customizedpaths') { + let convertedParams: Record; + + if (!isUndefined(algorithmParams.sources)) { + convertedParams = { + source: algorithmParams.sources.ids ?? [], + 'vertex-type': algorithmParams.sources.label ?? '', + 'vertex-property': algorithmParams.sources.properties ?? [], + capacity: algorithmParams.capacity, + limit: algorithmParams.limit, + sort_by: algorithmParams.sort_by, + steps: [] + }; + } else { + convertedParams = { + ...algorithmParams, + source: algorithmParams.source.split(','), + 'vertex-type': algorithmParams.vertexType, + 'vertex-property': fromPairs( + algorithmParams.vertexProperty.map( + ([key, value]: [string, string]) => [key, value.split(',')] + ) + ) + }; + + delete convertedParams.vertexType; + delete convertedParams.vertexProperty; + } + + (algorithmParams as CustomPathParams).steps.forEach((step, stepIndex) => { + const convertedStep: Record = {}; + + delete step.uuid; + + if (step.default_weight !== '') { + step.weight_by = step.default_weight; + } + + delete step.default_weight; + + Object.entries(step).forEach(([key, value]) => { + convertedStep[ + trimEnd( + translator( + `data-analyze.algorithm-forms.custom-path.options.${key}` + ), + ':' + ) + ] = value; + }); + + convertedParams.steps[stepIndex] = convertedStep; + }); + + algorithmParams = convertedParams; + } + + Object.entries(algorithmParams).forEach(([key, value]) => { + value = isObject(value) ? JSON.stringify(value, null, 4) : value; + + // label value could be null when it means all + if (key === 'label' && (value === null || value === '__all__')) { + value = translator( + `data-analyze.algorithm-forms.${AlgorithmInternalNameMapping[algorithmType]}.pre-value` + ); + } + + // personal rank customized + if (algorithmType === 'personalrank' && key === 'with_label') { + value = translator( + `data-analyze.algorithm-forms.personal-rank.with-label-radio-value.${(value as string).toLowerCase()}` + ); + } + + const fullPathKey = `data-analyze.algorithm-forms.${AlgorithmInternalNameMapping[algorithmType]}.options.${key}`; + + // remove redundant key from server + if (!i18n.exists(fullPathKey)) { + return; + } + + key = translator( + `data-analyze.algorithm-forms.${AlgorithmInternalNameMapping[algorithmType]}.options.${key}` + ); + + statements.push(`${key} ${value}`); + }); + + return statements; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/getUnicodeLength.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/getUnicodeLength.ts new file mode 100644 index 000000000..35b920f1b --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/getUnicodeLength.ts @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export default function getUnicodeLength(str?: string) { + if (typeof str === 'undefined') { + return 0; + } + + return str.replace(/[^\x00-\xff]/g, '01').length; +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/index.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/index.ts new file mode 100644 index 000000000..0caa170cd --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/index.ts @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +import convertStringToJSON from './convertStringToJSON'; +import getUnicodeLength from './getUnicodeLength'; +import { + AlgorithmInternalNameMapping, + formatAlgorithmStatement +} from './formatAlgorithmStatement'; +import isDataTypeNumeric from './isDataTypeNumeric'; +import { calcAlgorithmFormWidth } from './calcAlgorithmFormWidth'; +import { + removeLabelKey, + filterEmptyAlgorightmParams +} from './filterEmptyAlgorightmParams'; + +export { + convertStringToJSON, + getUnicodeLength, + AlgorithmInternalNameMapping, + formatAlgorithmStatement, + isDataTypeNumeric, + calcAlgorithmFormWidth, + removeLabelKey, + filterEmptyAlgorightmParams +}; diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/isDataTypeNumeric.ts b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/isDataTypeNumeric.ts new file mode 100644 index 000000000..8b9d0e408 --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/src/utils/isDataTypeNumeric.ts @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +export default function isDataTypeNumeric(type: string | undefined) { + return ( + type === 'BYTE' || + type === 'INT' || + type === 'LONG' || + type === 'FLOAT' || + type === 'DOUBLE' || + type === 'DATE' + ); +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/tsconfig-extend.json b/hugegraph-hubble/hubble-fe-old(legacy)/tsconfig-extend.json new file mode 100644 index 000000000..5d35b2a3d --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/tsconfig-extend.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "hubble-ui": ["src/components/hubble-ui"] + } + } +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/tsconfig.json b/hugegraph-hubble/hubble-fe-old(legacy)/tsconfig.json new file mode 100644 index 000000000..0acd731ef --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "downlevelIteration": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + "experimentalDecorators": true + }, + "include": [ + "src" + ], + "extends": "./tsconfig-extend.json" +} diff --git a/hugegraph-hubble/hubble-fe-old(legacy)/yarn.lock b/hugegraph-hubble/hubble-fe-old(legacy)/yarn.lock new file mode 100644 index 000000000..712d00e2e --- /dev/null +++ b/hugegraph-hubble/hubble-fe-old(legacy)/yarn.lock @@ -0,0 +1,13380 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ant-design/colors@^6.0.0": + version "6.0.0" + resolved "https://registry.npmmirror.com/@ant-design/colors/download/@ant-design/colors-6.0.0.tgz#9b9366257cffcc47db42b9d0203bb592c13c0298" + integrity sha1-m5NmJXz/zEfbQrnQIDu1ksE8Apg= + dependencies: + "@ctrl/tinycolor" "^3.4.0" + +"@ant-design/icons-svg@^4.2.1": + version "4.2.1" + resolved "https://registry.npmmirror.com/@ant-design/icons-svg/download/@ant-design/icons-svg-4.2.1.tgz?cache=0&sync_timestamp=1632478308697&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40ant-design%2Ficons-svg%2Fdownload%2F%40ant-design%2Ficons-svg-4.2.1.tgz#8630da8eb4471a4aabdaed7d1ff6a97dcb2cf05a" + integrity sha1-hjDajrRHGkqr2u19H/apfcss8Fo= + +"@ant-design/icons@^4.7.0": + version "4.7.0" + resolved "https://registry.npmmirror.com/@ant-design/icons/download/@ant-design/icons-4.7.0.tgz?cache=0&sync_timestamp=1632478665145&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40ant-design%2Ficons%2Fdownload%2F%40ant-design%2Ficons-4.7.0.tgz#8c3cbe0a556ba92af5dc7d1e70c0b25b5179af0f" + integrity sha1-jDy+ClVrqSr13H0ecMCyW1F5rw8= + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons-svg" "^4.2.1" + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-util "^5.9.4" + +"@ant-design/react-slick@~0.28.1": + version "0.28.4" + resolved "https://registry.npmmirror.com/@ant-design/react-slick/download/@ant-design/react-slick-0.28.4.tgz#8b296b87ad7c7ae877f2a527b81b7eebd9dd29a9" + integrity sha1-iylrh618euh38qUnuBt+69ndKak= + dependencies: + "@babel/runtime" "^7.10.4" + classnames "^2.2.5" + json2mq "^0.2.0" + lodash "^4.17.21" + resize-observer-polyfill "^1.5.0" + +"@babel/code-frame@7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4= + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/code-frame/download/@babel/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.9.0": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/compat-data/download/@babel/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + +"@babel/core@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@>=7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.4.5": + version "7.16.12" + resolved "https://registry.npmmirror.com/@babel/core/download/@babel/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.16.8", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/generator/download/@babel/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== + dependencies: + "@babel/types" "^7.16.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.8.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7", "@babel/helper-create-class-features-plugin@^7.8.3": + version "7.16.10" + resolved "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/download/@babel/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-environment-visitor/download/@babel/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-function-name/download/@babel/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.16.0.tgz?cache=0&sync_timestamp=1635567064131&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40babel%2Fhelper-skip-transparent-expression-wrappers%2Fdownload%2F%40babel%2Fhelper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha1-DuM4gHAUfDrgUeSH7KPrsOLouwk= + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.16.7", "@babel/helpers@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/helpers/download/@babel/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/highlight@^7.16.7", "@babel/highlight@^7.8.3": + version "7.16.10" + resolved "https://registry.npmmirror.com/@babel/highlight/download/@babel/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.9.0": + version "7.16.12" + resolved "https://registry.npmmirror.com/@babel/parser/download/@babel/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/download/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/download/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@^7.8.3": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" + integrity sha1-XgZlSvXNBLYIkVqtqbKmeIAERk4= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-class-static-block/download/@babel/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-decorators@7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" + integrity sha1-IVaGCrZcWr8GjD9nBCGEBBBmVD4= + dependencies: + "@babel/helper-create-class-features-plugin" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-decorators" "^7.8.3" + +"@babel/plugin-proposal-dynamic-import@^7.16.7", "@babel/plugin-proposal-dynamic-import@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.16.7", "@babel/plugin-proposal-json-strings@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" + integrity sha1-5FciU/3u1lzd7s/as/kor+sv1dI= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" + integrity sha1-XWdpQJaZ7Js7aGhM2BFs7f+Tutg= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.7", "@babel/plugin-proposal-numeric-separator@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.16.7", "@babel/plugin-proposal-object-rest-spread@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7", "@babel/plugin-proposal-optional-catch-binding@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" + integrity sha1-MdsWsVTDnWuKZFKSRyuYOUwpKlg= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.16.7", "@babel/plugin-proposal-optional-chaining@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-private-property-in-object/download/@babel/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/download/@babel/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha1-qYP7Gusuw/btBCohD2QOkOeG/g0= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA= + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-class-static-block/download/@babel/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha1-GV34mxRrS3izv4l/16JXyEZZ1AY= + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.16.7.tgz#f66a0199f16de7c1ef5192160ccf5d069739e3d3" + integrity sha512-vQ+PxL+srA7g6Rx6I1e15m55gftknl2X8GCUW1JTlkTaXZLJOS0UcaY0eK9jYT7IYf4awn6qwyghVHLDz1WyMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/download/@babel/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha1-Yr+Ysto80h1iYVT8lu5bPLaOrLM= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha1-AolkqbqA28CUyRXEh618TnpmRlo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-flow@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-flow/download/@babel/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" + integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-json-strings@^7.8.0", "@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha1-ypHvRjA1MESLkGZSusLp/plB9pk= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c= + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/download/@babel/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/download/@babel/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha1-YRGiZbz7Ag6579D9/X0mQCue1sE= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io= + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-private-property-in-object/download/@babel/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0= + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw= + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/download/@babel/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-arrow-functions@^7.16.7", "@babel/plugin-transform-arrow-functions@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.16.8", "@babel/plugin-transform-async-to-generator@^7.8.3": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7", "@babel/plugin-transform-block-scoped-functions@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.16.7", "@babel/plugin-transform-block-scoping@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.16.7", "@babel/plugin-transform-classes@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.16.7", "@babel/plugin-transform-computed-properties@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-destructuring@^7.16.7", "@babel/plugin-transform-destructuring@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.16.7", "@babel/plugin-transform-duplicate-keys@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-exponentiation-operator@^7.16.7", "@babel/plugin-transform-exponentiation-operator@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-flow-strip-types@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/download/@babel/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" + integrity sha1-ijU4qkBDTgALj0Sjxcmscim9I5I= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow" "^7.8.3" + +"@babel/plugin-transform-for-of@^7.16.7", "@babel/plugin-transform-for-of@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-function-name@^7.16.7", "@babel/plugin-transform-function-name@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.16.7", "@babel/plugin-transform-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-member-expression-literals@^7.16.7", "@babel/plugin-transform-member-expression-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.16.7", "@babel/plugin-transform-modules-amd@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.16.8", "@babel/plugin-transform-modules-commonjs@^7.9.0": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.16.7", "@babel/plugin-transform-modules-systemjs@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.16.7", "@babel/plugin-transform-modules-umd@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8", "@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.16.7", "@babel/plugin-transform-new-target@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-object-super@^7.16.7", "@babel/plugin-transform-object-super@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.16.7", "@babel/plugin-transform-parameters@^7.8.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-property-literals@^7.16.7", "@babel/plugin-transform-property-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-constant-elements@^7.0.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-constant-elements/download/@babel/plugin-transform-react-constant-elements-7.16.7.tgz#19e9e4c2df2f6c3e6b3aea11778297d81db8df62" + integrity sha512-lF+cfsyTgwWkcw715J88JhMYJ5GpysYNLhLP1PkvkhTRN7B3e74R/1KsDxFxhRpSn0UUD3IWM4GvdBR2PEbbQQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-display-name@7.8.3": + version "7.8.3" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" + integrity sha1-cN7Zh8kWCfeDU9120vsqC7mR6OU= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-transform-react-display-name@^7.16.7", "@babel/plugin-transform-react-display-name@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-display-name/download/@babel/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx-development@^7.16.7", "@babel/plugin-transform-react-jsx-development@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-development/download/@babel/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.16.7" + +"@babel/plugin-transform-react-jsx-self@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/download/@babel/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" + integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx-source@^7.9.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/download/@babel/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" + integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.9.1": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx/download/@babel/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" + integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-react-pure-annotations/download/@babel/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" + integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-regenerator@^7.16.7", "@babel/plugin-transform-regenerator@^7.8.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.16.7", "@babel/plugin-transform-reserved-words@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-runtime@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.9.0.tgz#45468c0ae74cc13204e1d3b1f4ce6ee83258af0b" + integrity sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.16.7", "@babel/plugin-transform-spread@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.16.7", "@babel/plugin-transform-sticky-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.16.7", "@babel/plugin-transform-template-literals@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.16.7", "@babel/plugin-transform-typeof-symbol@^7.8.4": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typescript@^7.9.0": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-typescript/download/@babel/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.8.3": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" + integrity sha1-pfxCSA6VCuj12fjyu8A/UnIt86g= + dependencies: + "@babel/compat-data" "^7.9.0" + "@babel/helper-compilation-targets" "^7.8.7" + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-proposal-async-generator-functions" "^7.8.3" + "@babel/plugin-proposal-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-json-strings" "^7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator" "^7.8.3" + "@babel/plugin-proposal-object-rest-spread" "^7.9.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining" "^7.9.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-transform-arrow-functions" "^7.8.3" + "@babel/plugin-transform-async-to-generator" "^7.8.3" + "@babel/plugin-transform-block-scoped-functions" "^7.8.3" + "@babel/plugin-transform-block-scoping" "^7.8.3" + "@babel/plugin-transform-classes" "^7.9.0" + "@babel/plugin-transform-computed-properties" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-dotall-regex" "^7.8.3" + "@babel/plugin-transform-duplicate-keys" "^7.8.3" + "@babel/plugin-transform-exponentiation-operator" "^7.8.3" + "@babel/plugin-transform-for-of" "^7.9.0" + "@babel/plugin-transform-function-name" "^7.8.3" + "@babel/plugin-transform-literals" "^7.8.3" + "@babel/plugin-transform-member-expression-literals" "^7.8.3" + "@babel/plugin-transform-modules-amd" "^7.9.0" + "@babel/plugin-transform-modules-commonjs" "^7.9.0" + "@babel/plugin-transform-modules-systemjs" "^7.9.0" + "@babel/plugin-transform-modules-umd" "^7.9.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" + "@babel/plugin-transform-new-target" "^7.8.3" + "@babel/plugin-transform-object-super" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.8.7" + "@babel/plugin-transform-property-literals" "^7.8.3" + "@babel/plugin-transform-regenerator" "^7.8.7" + "@babel/plugin-transform-reserved-words" "^7.8.3" + "@babel/plugin-transform-shorthand-properties" "^7.8.3" + "@babel/plugin-transform-spread" "^7.8.3" + "@babel/plugin-transform-sticky-regex" "^7.8.3" + "@babel/plugin-transform-template-literals" "^7.8.3" + "@babel/plugin-transform-typeof-symbol" "^7.8.4" + "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.9.0" + browserslist "^4.9.1" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" + +"@babel/preset-env@^7.4.5": + version "7.16.11" + resolved "https://registry.npmmirror.com/@babel/preset-env/download/@babel/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.8" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.20.2" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmmirror.com/@babel/preset-modules/download/@babel/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha1-75Odbn8miCfhhBY43G/5VRXhFdk= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@7.9.1": + version "7.9.1" + resolved "https://registry.npmmirror.com/@babel/preset-react/download/@babel/preset-react-7.9.1.tgz#b346403c36d58c3bb544148272a0cefd9c28677a" + integrity sha1-s0ZAPDbVjDu1RBSCcqDO/ZwoZ3o= + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-react-display-name" "^7.8.3" + "@babel/plugin-transform-react-jsx" "^7.9.1" + "@babel/plugin-transform-react-jsx-development" "^7.9.0" + "@babel/plugin-transform-react-jsx-self" "^7.9.0" + "@babel/plugin-transform-react-jsx-source" "^7.9.0" + +"@babel/preset-react@^7.0.0": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/preset-react/download/@babel/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" + integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + +"@babel/preset-typescript@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/preset-typescript/download/@babel/preset-typescript-7.9.0.tgz#87705a72b1f0d59df21c179f7c3d2ef4b16ce192" + integrity sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-transform-typescript" "^7.9.0" + +"@babel/runtime-corejs3@^7.12.1": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/runtime-corejs3/download/@babel/runtime-corejs3-7.16.8.tgz#ea533d96eda6fdc76b1812248e9fbd0c11d4a1a7" + integrity sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg== + dependencies: + core-js-pure "^3.20.2" + regenerator-runtime "^0.13.4" + +"@babel/runtime@7.9.0": + version "7.9.0" + resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.9.0.tgz#337eda67401f5b066a6f205a3113d4ac18ba495b" + integrity sha1-M37aZ0AfWwZqbyBaMRPUrBi6SVs= + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/runtime/download/@babel/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.7", "@babel/template@^7.4.0", "@babel/template@^7.8.6": + version "7.16.7" + resolved "https://registry.npmmirror.com/@babel/template/download/@babel/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.9.0": + version "7.16.10" + resolved "https://registry.npmmirror.com/@babel/traverse/download/@babel/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.9.0": + version "7.16.8" + resolved "https://registry.npmmirror.com/@babel/types/download/@babel/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "https://registry.npmmirror.com/@cnakazawa/watch/download/@cnakazawa/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha1-+GSuhQBND8q29QvpFBxNo2jRZWo= + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.npmmirror.com/@csstools/convert-colors/download/@csstools/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha1-rUldxBsS511YjG24uYNPCPoTHrc= + +"@csstools/normalize.css@^10.1.0": + version "10.1.0" + resolved "https://registry.npmmirror.com/@csstools/normalize.css/download/@csstools/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" + integrity sha1-8JULuhiBlRLUL3GX5WxRiqSRzxg= + +"@ctrl/tinycolor@^3.4.0": + version "3.4.0" + resolved "https://registry.npmmirror.com/@ctrl/tinycolor/download/@ctrl/tinycolor-3.4.0.tgz#c3c5ae543c897caa9c2a68630bed355be5f9990f" + integrity sha1-w8WuVDyJfKqcKmhjC+01W+X5mQ8= + +"@emotion/is-prop-valid@^0.8.2": + version "0.8.8" + resolved "https://registry.npmmirror.com/@emotion/is-prop-valid/download/@emotion/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha1-2yixxDaKJZtgqXMR1qlS1P0BrBo= + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.npmmirror.com/@emotion/memoize/download/@emotion/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha1-Gb8PWvGRSREcQNmLsM+CEZ9dnus= + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.npmmirror.com/@hapi/address/download/@hapi/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha1-XWftQ/P9QaadS5/3tW58DR0KgeU= + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.npmmirror.com/@hapi/bourne/download/@hapi/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha1-CnCVreoGckPOMoPhtWuKj0U7JCo= + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.npmmirror.com/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha1-/elgZMpEbeyMVajC8TCVewcMbgY= + +"@hapi/joi@^15.0.0": + version "15.1.1" + resolved "https://registry.npmmirror.com/@hapi/joi/download/@hapi/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc= + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.npmmirror.com/@hapi/topo/download/@hapi/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha1-aNk1+j6uf91asNf5U/MgXYsr/Ck= + dependencies: + "@hapi/hoek" "^8.3.0" + +"@hypnosphi/create-react-context@^0.3.1": + version "0.3.1" + resolved "https://registry.npmmirror.com/@hypnosphi/create-react-context/download/@hypnosphi/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" + integrity sha1-+L/r3HZl9dQmy6N1Pg6cfTFU18Y= + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +"@jest/console@^24.7.1", "@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/console/download/@jest/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha1-ebG8Bvt0qM+wHL3t+UVYSxuXB/A= + dependencies: + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/core/download/@jest/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha1-LOzNC5MYH5xIUOdPKprUPTUTacQ= + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + realpath-native "^1.1.0" + rimraf "^2.5.4" + slash "^2.0.0" + strip-ansi "^5.0.0" + +"@jest/environment@^24.3.0", "@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/environment/download/@jest/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha1-IeOvotZcBYbL1svv4gi6+t5Eqxg= + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.3.0", "@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/fake-timers/download/@jest/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha1-uj5r8O7NCaY2BJiWQ00wZjZUDJM= + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/reporters/download/@jest/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha1-hmYO/44rlmHQQqjpigKLjWMaW0M= + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + node-notifier "^5.4.2" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/source-map/download/@jest/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha1-DiY6lEML5LQdpoPMwea//ioZFxQ= + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/test-result/download/@jest/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha1-EXluiqnb+I6gJXV7MVJZWtBroMo= + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/test-sequencer/download/@jest/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha1-+PM081tiWk8vNV8v5+YDba0uazE= + dependencies: + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/transform/download/@jest/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha1-SuJ2iyllU/rasJ6ewRlUPJCxbFY= + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.3.0", "@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.npmmirror.com/@jest/types/download/@jest/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha1-Y8smy3UA0Gnlo4lEGnxqtekJ/Fk= + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/download/@mrmlnc/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha1-UkryQNGjYFJ7cwR17PoTRKpUDd4= + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.npmmirror.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmmirror.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@react-dnd/asap@^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/@react-dnd/asap/download/@react-dnd/asap-4.0.0.tgz#b300eeed83e9801f51bd66b0337c9a6f04548651" + integrity sha1-swDu7YPpgB9RvWawM3yabwRUhlE= + +"@react-dnd/invariant@^2.0.0": + version "2.0.0" + resolved "https://registry.npmmirror.com/@react-dnd/invariant/download/@react-dnd/invariant-2.0.0.tgz#09d2e81cd39e0e767d7da62df9325860f24e517e" + integrity sha1-CdLoHNOeDnZ9faYt+TJYYPJOUX4= + +"@react-dnd/shallowequal@^2.0.0": + version "2.0.0" + resolved "https://registry.npmmirror.com/@react-dnd/shallowequal/download/@react-dnd/shallowequal-2.0.0.tgz#a3031eb54129f2c66b2753f8404266ec7bf67f0a" + integrity sha1-owMetUEp8sZrJ1P4QEJm7Hv2fwo= + +"@stylelint/postcss-css-in-js@^0.37.2": + version "0.37.2" + resolved "https://registry.npmmirror.com/@stylelint/postcss-css-in-js/download/@stylelint/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" + integrity sha1-flqErRgfQjSiSAgDQipHuHSa89I= + dependencies: + "@babel/core" ">=7.9.0" + +"@stylelint/postcss-markdown@^0.36.2": + version "0.36.2" + resolved "https://registry.npmmirror.com/@stylelint/postcss-markdown/download/@stylelint/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391" + integrity sha1-ClQMRpL43N/BPI41LBfnv+4rs5E= + dependencies: + remark "^13.0.0" + unist-util-find-all-after "^3.0.2" + +"@svgr/babel-plugin-add-jsx-attribute@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-add-jsx-attribute/download/@svgr/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" + integrity sha1-2ty2IYUDUy1ohLIQ5/PFAsqqRLE= + +"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-attribute/download/@svgr/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc" + integrity sha1-KXVQuajAxzN76hK9/IqAu2b4Wrw= + +"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-remove-jsx-empty-expression/download/@svgr/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7" + integrity sha1-wZYwLz5o6ragXpivnKhXC8ExMcc= + +"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-replace-jsx-attribute-value/download/@svgr/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165" + integrity sha1-MQ7Ad13oCKai5P1CaMJF/XNMEWU= + +"@svgr/babel-plugin-svg-dynamic-title@^4.3.3": + version "4.3.3" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-dynamic-title/download/@svgr/babel-plugin-svg-dynamic-title-4.3.3.tgz#2cdedd747e5b1b29ed4c241e46256aac8110dd93" + integrity sha1-LN7ddH5bGyntTCQeRiVqrIEQ3ZM= + +"@svgr/babel-plugin-svg-em-dimensions@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-svg-em-dimensions/download/@svgr/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391" + integrity sha1-mpR5HJoogQjSCp0sxkysgg8UE5E= + +"@svgr/babel-plugin-transform-react-native-svg@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-react-native-svg/download/@svgr/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717" + integrity sha1-FRSHMihDNZocqGsho4Ff0hqItxc= + +"@svgr/babel-plugin-transform-svg-component@^4.2.0": + version "4.2.0" + resolved "https://registry.npmmirror.com/@svgr/babel-plugin-transform-svg-component/download/@svgr/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697" + integrity sha1-Xx4viGsshcZ+dtpC8Pa+Gxdntpc= + +"@svgr/babel-preset@^4.3.3": + version "4.3.3" + resolved "https://registry.npmmirror.com/@svgr/babel-preset/download/@svgr/babel-preset-4.3.3.tgz#a75d8c2f202ac0e5774e6bfc165d028b39a1316c" + integrity sha1-p12MLyAqwOV3Tmv8Fl0CizmhMWw= + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0" + "@svgr/babel-plugin-svg-dynamic-title" "^4.3.3" + "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0" + "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0" + "@svgr/babel-plugin-transform-svg-component" "^4.2.0" + +"@svgr/core@^4.3.3": + version "4.3.3" + resolved "https://registry.npmmirror.com/@svgr/core/download/@svgr/core-4.3.3.tgz#b37b89d5b757dc66e8c74156d00c368338d24293" + integrity sha1-s3uJ1bdX3Gbox0FW0Aw2gzjSQpM= + dependencies: + "@svgr/plugin-jsx" "^4.3.3" + camelcase "^5.3.1" + cosmiconfig "^5.2.1" + +"@svgr/hast-util-to-babel-ast@^4.3.2": + version "4.3.2" + resolved "https://registry.npmmirror.com/@svgr/hast-util-to-babel-ast/download/@svgr/hast-util-to-babel-ast-4.3.2.tgz#1d5a082f7b929ef8f1f578950238f630e14532b8" + integrity sha1-HVoIL3uSnvjx9XiVAjj2MOFFMrg= + dependencies: + "@babel/types" "^7.4.4" + +"@svgr/plugin-jsx@^4.3.3": + version "4.3.3" + resolved "https://registry.npmmirror.com/@svgr/plugin-jsx/download/@svgr/plugin-jsx-4.3.3.tgz#e2ba913dbdfbe85252a34db101abc7ebd50992fa" + integrity sha1-4rqRPb376FJSo02xAavH69UJkvo= + dependencies: + "@babel/core" "^7.4.5" + "@svgr/babel-preset" "^4.3.3" + "@svgr/hast-util-to-babel-ast" "^4.3.2" + svg-parser "^2.0.0" + +"@svgr/plugin-svgo@^4.3.1": + version "4.3.1" + resolved "https://registry.npmmirror.com/@svgr/plugin-svgo/download/@svgr/plugin-svgo-4.3.1.tgz#daac0a3d872e3f55935c6588dd370336865e9e32" + integrity sha1-2qwKPYcuP1WTXGWI3TcDNoZenjI= + dependencies: + cosmiconfig "^5.2.1" + merge-deep "^3.0.2" + svgo "^1.2.2" + +"@svgr/webpack@4.3.3": + version "4.3.3" + resolved "https://registry.npmmirror.com/@svgr/webpack/download/@svgr/webpack-4.3.3.tgz#13cc2423bf3dff2d494f16b17eb7eacb86895017" + integrity sha1-E8wkI789/y1JTxaxfrfqy4aJUBc= + dependencies: + "@babel/core" "^7.4.5" + "@babel/plugin-transform-react-constant-elements" "^7.0.0" + "@babel/preset-env" "^7.4.5" + "@babel/preset-react" "^7.0.0" + "@svgr/core" "^4.3.3" + "@svgr/plugin-jsx" "^4.3.3" + "@svgr/plugin-svgo" "^4.3.1" + loader-utils "^1.2.3" + +"@types/babel__core@^7.1.0": + version "7.1.18" + resolved "https://registry.npmmirror.com/@types/babel__core/download/@types/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.npmmirror.com/@types/babel__generator/download/@types/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.npmmirror.com/@types/babel__template/download/@types/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + integrity sha1-PRpI/Z1sDt/Vby/1eNrtSPNsiWk= + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.14.2" + resolved "https://registry.npmmirror.com/@types/babel__traverse/download/@types/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" + integrity sha1-/81HC7s/i/MEgWePtVAieMqDOkM= + dependencies: + "@babel/types" "^7.3.0" + +"@types/classnames@^2.2.10": + version "2.3.1" + resolved "https://registry.npmmirror.com/@types/classnames/download/@types/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd" + integrity sha1-PCRnqg8ak/HwIeO5vPk4vV39wN0= + dependencies: + classnames "*" + +"@types/codemirror@^0.0.96": + version "0.0.96" + resolved "https://registry.npmmirror.com/@types/codemirror/download/@types/codemirror-0.0.96.tgz#73b52e784a246cebef31d544fef45ea764de5bad" + integrity sha1-c7UueEokbOvvMdVE/vRep2TeW60= + dependencies: + "@types/tern" "*" + +"@types/d3-array@^1": + version "1.2.9" + resolved "https://registry.npmmirror.com/@types/d3-array/download/@types/d3-array-1.2.9.tgz#c7dc78992cd8ca5c850243a265fd257ea56df1fa" + integrity sha1-x9x4mSzYylyFAkOiZf0lfqVt8fo= + +"@types/d3-axis@^1": + version "1.0.16" + resolved "https://registry.npmmirror.com/@types/d3-axis/download/@types/d3-axis-1.0.16.tgz#93d7a28795c2f8b0e2fd550fcc4d29b7f174e693" + integrity sha1-k9eih5XC+LDi/VUPzE0pt/F05pM= + dependencies: + "@types/d3-selection" "^1" + +"@types/d3-brush@^1": + version "1.1.5" + resolved "https://registry.npmmirror.com/@types/d3-brush/download/@types/d3-brush-1.1.5.tgz#c7cfb58decbfd53ad3e47f0376345e3640a68186" + integrity sha1-x8+1jey/1TrT5H8DdjReNkCmgYY= + dependencies: + "@types/d3-selection" "^1" + +"@types/d3-chord@^1": + version "1.0.11" + resolved "https://registry.npmmirror.com/@types/d3-chord/download/@types/d3-chord-1.0.11.tgz#5760765db1b1a4b936c0d9355a821dde9dd25da2" + integrity sha1-V2B2XbGxpLk2wNk1WoId3p3SXaI= + +"@types/d3-collection@*": + version "1.0.10" + resolved "https://registry.npmmirror.com/@types/d3-collection/download/@types/d3-collection-1.0.10.tgz#bca161e336156968f267c077f7f2bfa8ff224e58" + integrity sha1-vKFh4zYVaWjyZ8B39/K/qP8iTlg= + +"@types/d3-color@^1": + version "1.4.2" + resolved "https://registry.npmmirror.com/@types/d3-color/download/@types/d3-color-1.4.2.tgz#944f281d04a0f06e134ea96adbb68303515b2784" + integrity sha1-lE8oHQSg8G4TTqlq27aDA1FbJ4Q= + +"@types/d3-contour@^1": + version "1.3.3" + resolved "https://registry.npmmirror.com/@types/d3-contour/download/@types/d3-contour-1.3.3.tgz#44529d498bbc1db78b195d75e1c9bb889edd647a" + integrity sha1-RFKdSYu8HbeLGV114cm7iJ7dZHo= + dependencies: + "@types/d3-array" "^1" + "@types/geojson" "*" + +"@types/d3-dispatch@^1": + version "1.0.9" + resolved "https://registry.npmmirror.com/@types/d3-dispatch/download/@types/d3-dispatch-1.0.9.tgz#c5a180f1e251de853b399cfbfbb6dd7f8bf842ae" + integrity sha1-xaGA8eJR3oU7OZz7+7bdf4v4Qq4= + +"@types/d3-drag@^1": + version "1.2.5" + resolved "https://registry.npmmirror.com/@types/d3-drag/download/@types/d3-drag-1.2.5.tgz#0b1b852cb41577075aa625ae6149379ea6c34dfd" + integrity sha1-CxuFLLQVdwdapiWuYUk3nqbDTf0= + dependencies: + "@types/d3-selection" "^1" + +"@types/d3-dsv@^1": + version "1.2.1" + resolved "https://registry.npmmirror.com/@types/d3-dsv/download/@types/d3-dsv-1.2.1.tgz#1524fee9f19d689c2f76aa0e24e230762bf96994" + integrity sha1-FST+6fGdaJwvdqoOJOIwdiv5aZQ= + +"@types/d3-ease@^1": + version "1.0.11" + resolved "https://registry.npmmirror.com/@types/d3-ease/download/@types/d3-ease-1.0.11.tgz#c4728639f5703dcb75b216dfa0860b2720f26898" + integrity sha512-wUigPL0kleGZ9u3RhzBP07lxxkMcUjL5IODP42mN/05UNL+JJCDnpEPpFbJiPvLcTeRKGIRpBBJyP/1BNwYsVA== + +"@types/d3-fetch@^1": + version "1.2.2" + resolved "https://registry.npmmirror.com/@types/d3-fetch/download/@types/d3-fetch-1.2.2.tgz#b93bfe248b8b761af82f4dac57959c989f67da3e" + integrity sha1-uTv+JIuLdhr4L02sV5WcmJ9n2j4= + dependencies: + "@types/d3-dsv" "^1" + +"@types/d3-force@^1": + version "1.2.4" + resolved "https://registry.npmmirror.com/@types/d3-force/download/@types/d3-force-1.2.4.tgz#6e274c72288c2db08fbdb8f5b87b9aa83e55a9e8" + integrity sha1-bidMciiMLbCPvbj1uHuaqD5Vqeg= + +"@types/d3-format@^1": + version "1.4.2" + resolved "https://registry.npmmirror.com/@types/d3-format/download/@types/d3-format-1.4.2.tgz#ea17bf559b71d9afd569ae9bfe4c544dab863baa" + integrity sha1-6he/VZtx2a/Vaa6b/kxUTauGO6o= + +"@types/d3-geo@^1": + version "1.12.3" + resolved "https://registry.npmmirror.com/@types/d3-geo/download/@types/d3-geo-1.12.3.tgz#512ebe735cb1cdf5f87ad59608416e2e9e868c5a" + integrity sha1-US6+c1yxzfX4etWWCEFuLp6GjFo= + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@^1": + version "1.1.8" + resolved "https://registry.npmmirror.com/@types/d3-hierarchy/download/@types/d3-hierarchy-1.1.8.tgz#50657f420d565a06c0b950a4b82eee0a369f2dea" + integrity sha1-UGV/Qg1WWgbAuVCkuC7uCjafLeo= + +"@types/d3-interpolate@^1": + version "1.4.2" + resolved "https://registry.npmmirror.com/@types/d3-interpolate/download/@types/d3-interpolate-1.4.2.tgz#88902a205f682773a517612299a44699285eed7b" + integrity sha1-iJAqIF9oJ3OlF2EimaRGmShe7Xs= + dependencies: + "@types/d3-color" "^1" + +"@types/d3-path@^1": + version "1.0.9" + resolved "https://registry.npmmirror.com/@types/d3-path/download/@types/d3-path-1.0.9.tgz#73526b150d14cd96e701597cbf346cfd1fd4a58c" + integrity sha1-c1JrFQ0UzZbnAVl8vzRs/R/UpYw= + +"@types/d3-polygon@^1": + version "1.0.8" + resolved "https://registry.npmmirror.com/@types/d3-polygon/download/@types/d3-polygon-1.0.8.tgz#127ee83fccda5bf57384011da90f31367fea1530" + integrity sha1-En7oP8zaW/VzhAEdqQ8xNn/qFTA= + +"@types/d3-quadtree@^1": + version "1.0.9" + resolved "https://registry.npmmirror.com/@types/d3-quadtree/download/@types/d3-quadtree-1.0.9.tgz#c7c3b795b5af06e5b043d1d34e754a434b3bae59" + integrity sha1-x8O3lbWvBuWwQ9HTTnVKQ0s7rlk= + +"@types/d3-random@^1": + version "1.1.3" + resolved "https://registry.npmmirror.com/@types/d3-random/download/@types/d3-random-1.1.3.tgz#8f7fdc23f92d1561e0694eb49567e8ab50537a19" + integrity sha1-j3/cI/ktFWHgaU60lWfoq1BTehk= + +"@types/d3-scale-chromatic@^1": + version "1.5.1" + resolved "https://registry.npmmirror.com/@types/d3-scale-chromatic/download/@types/d3-scale-chromatic-1.5.1.tgz#e2b7c3401e5c13809f831911eb820e444f4fc67a" + integrity sha1-4rfDQB5cE4CfgxkR64IORE9Pxno= + +"@types/d3-scale@^2": + version "2.2.6" + resolved "https://registry.npmmirror.com/@types/d3-scale/download/@types/d3-scale-2.2.6.tgz#28540b4dfc99d978970e873e4138a6bea2ea6ab8" + integrity sha1-KFQLTfyZ2XiXDoc+QTimvqLqarg= + dependencies: + "@types/d3-time" "^1" + +"@types/d3-selection@^1": + version "1.4.3" + resolved "https://registry.npmmirror.com/@types/d3-selection/download/@types/d3-selection-1.4.3.tgz#36928bbe64eb8e0bbcbaa01fb05c21ff6c71fa93" + integrity sha1-NpKLvmTrjgu8uqAfsFwh/2xx+pM= + +"@types/d3-shape@^1": + version "1.3.8" + resolved "https://registry.npmmirror.com/@types/d3-shape/download/@types/d3-shape-1.3.8.tgz#c3c15ec7436b4ce24e38de517586850f1fea8e89" + integrity sha1-w8Fex0NrTOJOON5RdYaFDx/qjok= + dependencies: + "@types/d3-path" "^1" + +"@types/d3-time-format@^2": + version "2.3.1" + resolved "https://registry.npmmirror.com/@types/d3-time-format/download/@types/d3-time-format-2.3.1.tgz#87a30e4513b9d1d53b920327a361f87255bf3372" + integrity sha1-h6MORRO50dU7kgMno2H4clW/M3I= + +"@types/d3-time@^1": + version "1.1.1" + resolved "https://registry.npmmirror.com/@types/d3-time/download/@types/d3-time-1.1.1.tgz#6cf3a4242c3bbac00440dfb8ba7884f16bedfcbf" + integrity sha1-bPOkJCw7usAEQN+4uniE8Wvt/L8= + +"@types/d3-timer@^1": + version "1.0.10" + resolved "https://registry.npmmirror.com/@types/d3-timer/download/@types/d3-timer-1.0.10.tgz#329c51c2c931f44ed0acff78b8c84571acf0ed21" + integrity sha1-MpxRwskx9E7QrP94uMhFcazw7SE= + +"@types/d3-transition@^1": + version "1.3.2" + resolved "https://registry.npmmirror.com/@types/d3-transition/download/@types/d3-transition-1.3.2.tgz#ed59beca7b4d679cfa52f88a6a50e5bbeb7e0a3c" + integrity sha1-7Vm+yntNZ5z6UviKalDlu+t+Cjw= + dependencies: + "@types/d3-selection" "^1" + +"@types/d3-voronoi@*": + version "1.1.9" + resolved "https://registry.npmmirror.com/@types/d3-voronoi/download/@types/d3-voronoi-1.1.9.tgz#7bbc210818a3a5c5e0bafb051420df206617c9e5" + integrity sha1-e7whCBijpcXguvsFFCDfIGYXyeU= + +"@types/d3-zoom@^1": + version "1.8.3" + resolved "https://registry.npmmirror.com/@types/d3-zoom/download/@types/d3-zoom-1.8.3.tgz#00237900c6fdc2bb4fe82679ee4d74eb8fbe7b3c" + integrity sha1-ACN5AMb9wrtP6CZ57k1064++ezw= + dependencies: + "@types/d3-interpolate" "^1" + "@types/d3-selection" "^1" + +"@types/d3@^5.7.2": + version "5.16.4" + resolved "https://registry.npmmirror.com/@types/d3/download/@types/d3-5.16.4.tgz#a7dc24a3dc1c19922eee72ba16144fd5bcea987a" + integrity sha1-p9wko9wcGZIu7nK6FhRP1bzqmHo= + dependencies: + "@types/d3-array" "^1" + "@types/d3-axis" "^1" + "@types/d3-brush" "^1" + "@types/d3-chord" "^1" + "@types/d3-collection" "*" + "@types/d3-color" "^1" + "@types/d3-contour" "^1" + "@types/d3-dispatch" "^1" + "@types/d3-drag" "^1" + "@types/d3-dsv" "^1" + "@types/d3-ease" "^1" + "@types/d3-fetch" "^1" + "@types/d3-force" "^1" + "@types/d3-format" "^1" + "@types/d3-geo" "^1" + "@types/d3-hierarchy" "^1" + "@types/d3-interpolate" "^1" + "@types/d3-path" "^1" + "@types/d3-polygon" "^1" + "@types/d3-quadtree" "^1" + "@types/d3-random" "^1" + "@types/d3-scale" "^2" + "@types/d3-scale-chromatic" "^1" + "@types/d3-selection" "^1" + "@types/d3-shape" "^1" + "@types/d3-time" "^1" + "@types/d3-time-format" "^2" + "@types/d3-timer" "^1" + "@types/d3-transition" "^1" + "@types/d3-voronoi" "*" + "@types/d3-zoom" "^1" + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.npmmirror.com/@types/eslint-visitor-keys/download/@types/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0= + +"@types/estree@*": + version "0.0.50" + resolved "https://registry.npmmirror.com/@types/estree/download/@types/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha1-Hgyqk2TT/M0pMcPtlv2+ql1MyoM= + +"@types/file-saver@^2.0.1": + version "2.0.5" + resolved "https://registry.npmmirror.com/@types/file-saver/download/@types/file-saver-2.0.5.tgz#9ee342a5d1314bb0928375424a2f162f97c310c7" + integrity sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ== + +"@types/geojson@*": + version "7946.0.8" + resolved "https://registry.npmmirror.com/@types/geojson/download/@types/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + integrity sha1-MHRK/bOF4pReIvOwM/iX92sfEso= + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.npmmirror.com/@types/glob/download/@types/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha1-vBtb86qS8lvV3TnzXFc2G9zlsus= + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.1" + resolved "https://registry.npmmirror.com/@types/hoist-non-react-statics/download/@types/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha1-ESSq/lEYy1kZd66xzqrtEHDrA58= + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.npmmirror.com/@types/istanbul-lib-coverage/download/@types/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmmirror.com/@types/istanbul-lib-report/download/@types/istanbul-lib-report-3.0.0.tgz?cache=0&sync_timestamp=1637266271645&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fistanbul-lib-report%2Fdownload%2F%40types%2Fistanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha1-wUwk8Y6oGQwRjudWK3/5mjZVJoY= + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.npmmirror.com/@types/istanbul-reports/download/@types/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha1-6HXMaJ5HvOVJ7IHz315vbxHPrrI= + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest-diff@*": + version "24.3.0" + resolved "https://registry.npmmirror.com/@types/jest-diff/download/@types/jest-diff-24.3.0.tgz#29e237a3d954babfe6e23cc59b57ecd8ca8d858d" + integrity sha1-KeI3o9lUur/m4jzFm1fs2MqNhY0= + dependencies: + jest-diff "*" + +"@types/jest@24.0.15": + version "24.0.15" + resolved "https://registry.npmmirror.com/@types/jest/download/@types/jest-24.0.15.tgz#6c42d5af7fe3b44ffff7cc65de7bf741e8fa427f" + integrity sha1-bELVr3/jtE//98xl3nv3Qej6Qn8= + dependencies: + "@types/jest-diff" "*" + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": + version "7.0.9" + resolved "https://registry.npmmirror.com/@types/json-schema/download/@types/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha1-l+3JA36gw4WFMgsolk3eOznkZg0= + +"@types/lodash-es@^4.17.3": + version "4.17.5" + resolved "https://registry.npmmirror.com/@types/lodash-es/download/@types/lodash-es-4.17.5.tgz#1c3fdd16849d84aea43890b1c60da379fb501353" + integrity sha1-HD/dFoSdhK6kOJCxxg2jeftQE1M= + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.178" + resolved "https://registry.npmmirror.com/@types/lodash/download/@types/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" + integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== + +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.npmmirror.com/@types/mdast/download/@types/mdast-3.0.10.tgz?cache=0&sync_timestamp=1637267171178&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fmdast%2Fdownload%2F%40types%2Fmdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha1-RyQkSoKkWYiEy76bz9c9/5J+6K8= + dependencies: + "@types/unist" "*" + +"@types/minimatch@*": + version "3.0.5" + resolved "https://registry.npmmirror.com/@types/minimatch/download/@types/minimatch-3.0.5.tgz?cache=0&sync_timestamp=1637267467935&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha1-EAHMXmo3BLg8I2An538vWOoBD0A= + +"@types/minimist@^1.2.0": + version "1.2.2" + resolved "https://registry.npmmirror.com/@types/minimist/download/@types/minimist-1.2.2.tgz?cache=0&sync_timestamp=1637267478331&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha1-7nceK6Sz3Fs3KTXVSf2WF780W4w= + +"@types/node@*": + version "17.0.13" + resolved "https://registry.npmmirror.com/@types/node/download/@types/node-17.0.13.tgz#5ed7ed7c662948335fcad6c412bb42d99ea754e3" + integrity sha512-Y86MAxASe25hNzlDbsviXl8jQHb0RDvKt4c40ZJQ1Don0AAL0STLZSs4N+6gLEO55pedy7r2cLwS+ZDxPm/2Bw== + +"@types/node@14.11.8": + version "14.11.8" + resolved "https://registry.npmmirror.com/@types/node/download/@types/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f" + integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw== + +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.npmmirror.com/@types/normalize-package-data/download/@types/normalize-package-data-2.4.1.tgz?cache=0&sync_timestamp=1637268963320&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE= + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.npmmirror.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA= + +"@types/prop-types@*": + version "15.7.4" + resolved "https://registry.npmmirror.com/@types/prop-types/download/@types/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" + integrity sha1-/PcgXCXf95Xuea8eMNosl5CAjxE= + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.npmmirror.com/@types/q/download/@types/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/react-dom@16.9.8": + version "16.9.8" + resolved "https://registry.npmmirror.com/@types/react-dom/download/@types/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" + integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== + dependencies: + "@types/react" "*" + +"@types/react-highlight-words@^0.16.1": + version "0.16.4" + resolved "https://registry.npmmirror.com/@types/react-highlight-words/download/@types/react-highlight-words-0.16.4.tgz#441b6f05c27ce6ab76833803a84bc385f0a1e8f2" + integrity sha512-KITBX3xzheQLu2s3bUgLmRE7ekmhc52zRjRTwkKayQARh30L4fjEGzGm7ULK9TuX2LgxWWavZqyQGDGjAHbL3w== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "17.0.38" + resolved "https://registry.npmmirror.com/@types/react/download/@types/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" + integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/react@16.9.52": + version "16.9.52" + resolved "https://registry.npmmirror.com/@types/react/download/@types/react-16.9.52.tgz#c46c72d1a1d8d9d666f4dd2066c0e22600ccfde1" + integrity sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/scheduler@*": + version "0.16.2" + resolved "https://registry.npmmirror.com/@types/scheduler/download/@types/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" + integrity sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk= + +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.npmmirror.com/@types/stack-utils/download/@types/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha1-CoUdO9lkmPolwzq3J47TvWXwbD4= + +"@types/tern@*": + version "0.23.4" + resolved "https://registry.npmmirror.com/@types/tern/download/@types/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" + integrity sha1-A5JusT2+rzrg05DK9wayZDoBJ/s= + dependencies: + "@types/estree" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.6" + resolved "https://registry.npmmirror.com/@types/unist/download/@types/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha1-JQp7FsO5H2cqJFUuxkZ47rHToI0= + +"@types/uuid@^8.3.0": + version "8.3.4" + resolved "https://registry.npmmirror.com/@types/uuid/download/@types/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + +"@types/validator@^13.1.0": + version "13.7.1" + resolved "https://registry.npmmirror.com/@types/validator/download/@types/validator-13.7.1.tgz#cdab1b4779f6b1718a08de89d92d2603b71950cb" + integrity sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q== + +"@types/yargs-parser@*": + version "20.2.1" + resolved "https://registry.npmmirror.com/@types/yargs-parser/download/@types/yargs-parser-20.2.1.tgz?cache=0&sync_timestamp=1637271401361&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fyargs-parser%2Fdownload%2F%40types%2Fyargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha1-O5ziSJkZ2eT+pDm3aRarw0st8Sk= + +"@types/yargs@^13.0.0": + version "13.0.12" + resolved "https://registry.npmmirror.com/@types/yargs/download/@types/yargs-13.0.12.tgz#d895a88c703b78af0465a9de88aa92c61430b092" + integrity sha1-2JWojHA7eK8EZaneiKqSxhQwsJI= + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^2.10.0": + version "2.34.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/download/@typescript-eslint/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha1-b4zopGx96kpvHRcdK7j7rm2sK+k= + dependencies: + "@typescript-eslint/experimental-utils" "2.34.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.34.0": + version "2.34.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/experimental-utils/download/@typescript-eslint/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha1-01JLZEzbQO687KZ/jPPkzJyPmA8= + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.10.0": + version "2.34.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/download/@typescript-eslint/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" + integrity sha1-UCUmMMoxloVCDpo5ygX+GFola8g= + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/download/@typescript-eslint/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha1-FK62NTs57wcyzH8bgoUpSTfPN9U= + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k= + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha1-G6kmopI2E+3OSW/VsC6M6KX0lyE= + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha1-xJ2tIvZFInxe22EL25aX8aq3Ifc= + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha1-/qk+Qphj3V5DOFVfQikjhaZT8gQ= + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.8.5.tgz?cache=0&sync_timestamp=1625473466896&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha1-mnQP9I4/qjAisd/1RCPfmqKTwl4= + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha1-ugt9Oz9+RzPaYFnJMyJ12GBwJFI= + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha1-3vS5knsBAdyMu9jR7bW3ucguskU= + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha1-U3p1Dt31weky83RCBlUckcG5PmE= + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha1-dMpqa8vhnlCjtrRihH5pUD5r/L8= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha1-cSMp2+8kDza/V70ve4+5v0FUQh4= + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha1-BE7es06mefPgTNT9mCTV41dnrhA= + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha1-qL87XY/+mGx8Hjc8y9wqCRXwztw= + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha1-li2hKqWswcExyBxCMpkcgs5W4Bo= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha1-VIQHZsLBAC62TtGr5yCt7XFPmLw= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha1-sk2fa6UDlK8TSfUQr6j/y4pj0mQ= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha1-IVdvDsiLkUJzV7hTY4NmjvfGa40= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha1-4Q7s1ULQ5705T2gnxJ899tTu+4w= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.npmmirror.com/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha1-EUu8SB/RDKDiOzVg+oEnSLC65bw= + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmmirror.com/@xtuc/ieee754/download/@xtuc/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A= + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmmirror.com/@xtuc/long/download/@xtuc/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0= + +abab@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/abab/download/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha1-wLZ4+zLWD8EhnHhNaoJv44Wut5o= + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^4.1.0, acorn-globals@^4.3.0: + version "4.3.4" + resolved "https://registry.npmmirror.com/acorn-globals/download/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha1-n6GSat3BHJcwjE5m163Q1Awycuc= + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-jsx@^5.2.0: + version "5.3.2" + resolved "https://registry.npmmirror.com/acorn-jsx/download/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.npmmirror.com/acorn-walk/download/acorn-walk-6.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Facorn-walk%2Fdownload%2Facorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha1-Ejy487hMIXHx9/slJhWxx4prGow= + +acorn@^5.5.3: + version "5.7.4" + resolved "https://registry.npmmirror.com/acorn/download/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1: + version "6.4.2" + resolved "https://registry.npmmirror.com/acorn/download/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.npmmirror.com/acorn/download/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/address/download/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha1-vxEWycdYxRt6kz0pa3LCIe2UKLY= + +adjust-sourcemap-loader@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/adjust-sourcemap-loader/download/adjust-sourcemap-loader-2.0.0.tgz#6471143af75ec02334b219f54bc7970c52fb29a4" + integrity sha1-ZHEUOvdewCM0shn1S8eXDFL7KaQ= + dependencies: + assert "1.4.1" + camelcase "5.0.0" + loader-utils "1.2.3" + object-path "0.11.4" + regex-parser "2.2.10" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/aggregate-error/download/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo= + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/ajv-errors/download/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0= + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.npmmirror.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha1-MfKdpatuANHC0yms97WSlhTVAU0= + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmmirror.com/ajv/download/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.9.0" + resolved "https://registry.npmmirror.com/ajv/download/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/alphanum-sort/download/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.npmmirror.com/ansi-colors/download/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha1-46PaS/uubIapwoViXeEkojQCb78= + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/ansi-escapes/download/ansi-escapes-3.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s= + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmmirror.com/ansi-escapes/download/ansi-escapes-4.3.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fansi-escapes%2Fdownload%2Fansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4= + dependencies: + type-fest "^0.21.3" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.npmmirror.com/ansi-html/download/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc= + +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/download/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ= + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/ansi-styles/download/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +antd@^4.18.5: + version "4.18.5" + resolved "https://registry.npmmirror.com/antd/download/antd-4.18.5.tgz#e5ffbe238fd6fdfcd1ed39ba96e4b1bd5f589757" + integrity sha512-5fN3C2lWAzonhOYYlNpzIw2OHl7vxFZ+4cJ7DK/XZrV+75OY61Y+OkanqMJwrFtDDamIez35OM7cAezGko9tew== + dependencies: + "@ant-design/colors" "^6.0.0" + "@ant-design/icons" "^4.7.0" + "@ant-design/react-slick" "~0.28.1" + "@babel/runtime" "^7.12.5" + "@ctrl/tinycolor" "^3.4.0" + classnames "^2.2.6" + copy-to-clipboard "^3.2.0" + lodash "^4.17.21" + memoize-one "^6.0.0" + moment "^2.25.3" + rc-cascader "~3.2.1" + rc-checkbox "~2.3.0" + rc-collapse "~3.1.0" + rc-dialog "~8.6.0" + rc-drawer "~4.4.2" + rc-dropdown "~3.2.0" + rc-field-form "~1.22.0-2" + rc-image "~5.2.5" + rc-input-number "~7.3.0" + rc-mentions "~1.6.1" + rc-menu "~9.2.1" + rc-motion "^2.4.4" + rc-notification "~4.5.7" + rc-pagination "~3.1.9" + rc-picker "~2.5.17" + rc-progress "~3.2.1" + rc-rate "~2.9.0" + rc-resize-observer "^1.2.0" + rc-select "~14.0.0-alpha.15" + rc-slider "~9.7.4" + rc-steps "~4.1.0" + rc-switch "~3.2.0" + rc-table "~7.22.2" + rc-tabs "~11.10.0" + rc-textarea "~0.3.0" + rc-tooltip "~5.1.1" + rc-tree "~5.4.3" + rc-tree-select "~5.1.1" + rc-trigger "^5.2.10" + rc-upload "~4.3.0" + rc-util "^5.14.0" + scroll-into-view-if-needed "^2.2.25" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/anymatch/download/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha1-vLJLTzeTTZqnrBe0ra+J58du8us= + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/anymatch/download/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha1-wFV8CWrzLxBhmPT04qODU343hxY= + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.npmmirror.com/aproba/download/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha1-aALmJk79GMeQobDVF/DyYnvyyUo= + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmmirror.com/argparse/download/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE= + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/aria-query/download/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +arity-n@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/arity-n/download/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745" + integrity sha1-2edrEXM+CFacCEeuezmyhgswt0U= + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/arr-diff/download/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/arr-flatten/download/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha1-NgSLv/TntH4TZkQxbJlmnqWukfE= + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/arr-union/download/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/array-equal/download/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.npmmirror.com/array-flatten/download/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk= + +array-includes@^3.0.3, array-includes@^3.1.1: + version "3.1.4" + resolved "https://registry.npmmirror.com/array-includes/download/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" + integrity sha1-9bSTFix2DzU5Yx8AW6K7Rqy0W6k= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + is-string "^1.0.7" + +array-tree-filter@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-tree-filter/download/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" + integrity sha1-hzrAD+yDdJ8lWsjdCDgUtPYykZA= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/array-union/download/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/array-union/download/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha1-t5hCCtvrHego2ErNii4j0+/oXo0= + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/array-uniq/download/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/array-unique/download/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.1: + version "1.2.5" + resolved "https://registry.npmmirror.com/array.prototype.flat/download/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" + integrity sha1-B+CXXYS7x8SM0YedYJ5oJZjTPhM= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/arrify/download/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@~2.0.3, asap@~2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.npmmirror.com/asn1.js/download/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.npmmirror.com/asn1/download/asn1-0.2.6.tgz?cache=0&sync_timestamp=1635986760581&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasn1%2Fdownload%2Fasn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha1-DTp7tuZOAqkMAwOzHykoaOoJoI0= + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/assert-plus/download/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/assert/download/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= + dependencies: + util "0.10.3" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.npmmirror.com/assert/download/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/assign-symbols/download/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.npmmirror.com/ast-types-flow/download/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/astral-regex/download/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/astral-regex/download/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha1-SDFDxWeu7UeFdZwIZXhtx319LjE= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/async-each/download/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/async-limiter/download/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha1-3TeelPDbgxCwgpH51kwyCXZmF/0= + +async-validator@^4.0.2: + version "4.0.7" + resolved "https://registry.npmmirror.com/async-validator/download/async-validator-4.0.7.tgz?cache=0&sync_timestamp=1634529502627&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fasync-validator%2Fdownload%2Fasync-validator-4.0.7.tgz#034a0fd2103a6b2ebf010da75183bec299247afe" + integrity sha1-A0oP0hA6ay6/AQ2nUYO+wpkkev4= + +async@^2.6.2: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/asynckit/download/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/atob/download/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k= + +autoprefixer@^9.6.1, autoprefixer@^9.8.6: + version "9.8.8" + resolved "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-9.8.8.tgz#fd4bd4595385fa6f06599de749a4d5f7a474957a" + integrity sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + picocolors "^0.2.1" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/aws-sign2/download/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.npmmirror.com/aws4/download/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk= + +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.npmmirror.com/axios/download/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +axobject-query@^2.0.2: + version "2.2.0" + resolved "https://registry.npmmirror.com/axobject-query/download/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha1-lD1H4QwLcEqkInXiDt83ImSJib4= + +babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.npmmirror.com/babel-code-frame/download/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-eslint@10.1.0: + version "10.1.0" + resolved "https://registry.npmmirror.com/babel-eslint/download/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI= + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-extract-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/babel-extract-comments/download/babel-extract-comments-1.0.0.tgz#0a2aedf81417ed391b85e18b4614e693a0351a21" + integrity sha1-Cirt+BQX7TkbheGLRhTmk6A1GiE= + dependencies: + babylon "^6.18.0" + +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/babel-jest/download/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha1-P8Mny4RnuJ0U17xw4xUQSng8zVQ= + dependencies: + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-loader@8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/babel-loader/download/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha1-hP2hnJduxcbe/vV/lCez3vZuF6M= + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/babel-plugin-istanbul/download/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha1-30reg9iXqS3wacTZolzyZxKTyFQ= + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" + +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha1-T4NwketAfgFEfIhDy+xUbQAC11Y= + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@2.8.0: + version "2.8.0" + resolved "https://registry.npmmirror.com/babel-plugin-macros/download/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha1-D5WKfMZVax5lNERl2ZERoeXhATg= + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-named-asset-import@^0.3.6: + version "0.3.8" + resolved "https://registry.npmmirror.com/babel-plugin-named-asset-import/download/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" + integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.1" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/download/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" + integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.20.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/download/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.npmmirror.com/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + +babel-plugin-transform-object-rest-spread@^6.26.0: + version "6.26.0" + resolved "https://registry.npmmirror.com/babel-plugin-transform-object-rest-spread/download/babel-plugin-transform-object-rest-spread-6.26.0.tgz?cache=0&sync_timestamp=1624608042865&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-transform-object-rest-spread%2Fdownload%2Fbabel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-remove-prop-types@0.4.24: + version "0.4.24" + resolved "https://registry.npmmirror.com/babel-plugin-transform-react-remove-prop-types/download/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha1-8u2vm0xqX75cHWeL+1MQeMFVXzo= + +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/babel-preset-jest/download/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha1-GStSHiIX+x0fZ89z9wwzZlCtPNw= + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" + +babel-preset-react-app@^9.1.2: + version "9.1.2" + resolved "https://registry.npmmirror.com/babel-preset-react-app/download/babel-preset-react-app-9.1.2.tgz#54775d976588a8a6d1a99201a702befecaf48030" + integrity sha1-VHddl2WIqKbRqZIBpwK+/sr0gDA= + dependencies: + "@babel/core" "7.9.0" + "@babel/plugin-proposal-class-properties" "7.8.3" + "@babel/plugin-proposal-decorators" "7.8.3" + "@babel/plugin-proposal-nullish-coalescing-operator" "7.8.3" + "@babel/plugin-proposal-numeric-separator" "7.8.3" + "@babel/plugin-proposal-optional-chaining" "7.9.0" + "@babel/plugin-transform-flow-strip-types" "7.9.0" + "@babel/plugin-transform-react-display-name" "7.8.3" + "@babel/plugin-transform-runtime" "7.9.0" + "@babel/preset-env" "7.9.0" + "@babel/preset-react" "7.9.1" + "@babel/preset-typescript" "7.9.0" + "@babel/runtime" "7.9.0" + babel-plugin-macros "2.8.0" + babel-plugin-transform-react-remove-prop-types "0.4.24" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.npmmirror.com/babel-runtime/download/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.npmmirror.com/babylon/download/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha1-ry87iPpvXB5MY00aD46sT1WzleM= + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/bail/download/bail-1.0.5.tgz?cache=0&sync_timestamp=1636274807479&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fbail%2Fdownload%2Fbail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha1-tvoTNASjksvB+MS/Y/WVM1Hnp3Y= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/balanced-match/download/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= + +balanced-match@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/balanced-match/download/balanced-match-2.0.0.tgz#dc70f920d78db8b858535795867bf48f820633d9" + integrity sha1-3HD5INeNuLhYU1eVhnv0j4IGM9k= + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/base16/download/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.npmmirror.com/base64-js/download/base64-js-1.5.1.tgz?cache=0&sync_timestamp=1624607950711&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbase64-js%2Fdownload%2Fbase64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha1-GxtEAWClv3rUC2UPCVljSBkDkwo= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.npmmirror.com/base/download/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha1-e95c7RRbbVUakNuH+DxVi060io8= + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/batch/download/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmmirror.com/big.js/download/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg= + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.npmmirror.com/binary-extensions/download/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U= + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/binary-extensions/download/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0= + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/bindings/download/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha1-EDU8npRTNLwFEabZCzj7x8nFBN8= + dependencies: + file-uri-to-path "1.0.0" + +bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.npmmirror.com/bluebird/download/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha1-nyKcFb4nJFT/qXOs4NvueaGww28= + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.npmmirror.com/bn.js/download/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha1-d1s/J477uXGO7HNh9IP7Nvu/6og= + +bn.js@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/bn.js/download/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha1-NYhgZ0OWxpl3canQUfzBtX1K4AI= + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.npmmirror.com/bonjour/download/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/boolbase/download/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmmirror.com/brace-expansion/download/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0= + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/braces/download/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha1-WXn9PxTNUxVl5fot8av/8d+u5yk= + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/braces/download/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha1-NFThpGLujVmeI23zNs2epPiv4Qc= + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/brorand/download/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY= + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.npmmirror.com/browser-resolve/download/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY= + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.npmmirror.com/browserify-aes/download/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha1-Mmc0ZC9APavDADIJhTu3CtQo70g= + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/browserify-cipher/download/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha1-jWR0wbhwv9q807z8wZNKEOlPFfA= + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/browserify-des/download/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw= + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/browserify-rsa/download/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0= + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.2.tgz#e78d4b69816d6e3dd1c747e64e9947f9ad79bc7e" + integrity sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg== + dependencies: + bn.js "^5.2.1" + browserify-rsa "^4.1.0" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.4" + inherits "^2.0.4" + parse-asn1 "^5.1.6" + readable-stream "^3.6.2" + safe-buffer "^5.2.1" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/browserify-zlib/download/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha1-KGlFnZqjviRf6P4sofRuLn9U1z8= + dependencies: + pako "~1.0.5" + +browserslist@4.10.0: + version "4.10.0" + resolved "https://registry.npmmirror.com/browserslist/download/browserslist-4.10.0.tgz#f179737913eaf0d2b98e4926ac1ca6a15cbcc6a9" + integrity sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA== + dependencies: + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.378" + node-releases "^1.1.52" + pkg-up "^3.1.0" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.17.5, browserslist@^4.19.1, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.9.1: + version "4.19.1" + resolved "https://registry.npmmirror.com/browserslist/download/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/bser/download/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU= + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/buffer-indexof/download/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow= + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/buffer-xor/download/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.npmmirror.com/buffer/download/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/builtin-status-codes/download/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/bytes/download/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.npmmirror.com/cacache/download/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw= + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.npmmirror.com/cacache/download/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw= + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/cache-base/download/cache-base-1.0.1.tgz?cache=0&sync_timestamp=1636237308360&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcache-base%2Fdownload%2Fcache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha1-Cn9GQWgxyLZi7jb+TnxZ129marI= + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/call-bind/download/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/call-me-maybe/download/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/caller-callsite/download/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1633674944097&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/callsites/download/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/callsites/download/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M= + +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.npmmirror.com/camel-case/download/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha1-lygHKpVPgFIoIlpt7qazhGHhvVo= + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.npmmirror.com/camelcase-keys/download/camelcase-keys-6.2.2.tgz?cache=0&sync_timestamp=1633332938539&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcamelcase-keys%2Fdownload%2Fcamelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha1-XnVda6UaoiPsfT1S8ld4IQ+dw8A= + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/camelcase/download/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" + integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== + +camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmmirror.com/camelcase/download/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/caniuse-api/download/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha1-Xk2Q4idJYdRikZl99Znj7QCO5MA= + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001286: + version "1.0.30001303" + resolved "https://registry.npmmirror.com/caniuse-lite/download/caniuse-lite-1.0.30001303.tgz#9b168e4f43ccfc372b86f4bc5a551d9b909c95c9" + integrity sha512-/Mqc1oESndUNszJP0kx0UaQU9kEv9nNtJ7Kn8AdA0mNnH8eR1cj0kG+NbNuC1Wq/b21eA8prhKRA3bbkjONegQ== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/capture-exit/download/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha1-+5U7+uvreB9iiYI52rtCbQilCaQ= + dependencies: + rsvp "^4.8.4" + +case-sensitive-paths-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" + integrity sha1-I6xhPMmoVuT4j/i7c7u16YmCXPc= + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.npmmirror.com/caseless/download/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmmirror.com/chalk/download/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/chalk/download/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmmirror.com/chalk/download/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.npmmirror.com/character-entities-legacy/download/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha1-lLwYRdznClu50uzHSHJWYSk9j8E= + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.npmmirror.com/character-entities/download/character-entities-1.2.4.tgz?cache=0&sync_timestamp=1635868846406&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-entities%2Fdownload%2Fcharacter-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha1-4Sw5Obfq9OWxXnrUxeKOHUjFsWs= + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.npmmirror.com/character-reference-invalid/download/character-reference-invalid-1.1.4.tgz?cache=0&sync_timestamp=1636446259053&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcharacter-reference-invalid%2Fdownload%2Fcharacter-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha1-CDMpzaDq4nKrPbvzfpo4LBOvFWA= + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1634639163489&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha1-kAlISfCTfy7twkJdDSip5fDLrZ4= + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.npmmirror.com/chokidar/download/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.3.0, chokidar@^3.4.1: + version "3.5.3" + resolved "https://registry.npmmirror.com/chokidar/download/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.npmmirror.com/chownr/download/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs= + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/chrome-trace-event/download/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha1-EBXs7UdB4V0GZkqVfbv1DQQeJqw= + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/ci-info/download/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y= + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/cipher-base/download/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.npmmirror.com/class-utils/download/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha1-+TNprouafOAv1B+q0MqDAzGQxGM= + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@*, classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: + version "2.3.1" + resolved "https://registry.npmmirror.com/classnames/download/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +clean-css@^4.2.3: + version "4.2.4" + resolved "https://registry.npmmirror.com/clean-css/download/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha1-czv0brpOYHxokepXwkqYk1aDEXg= + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/clean-stack/download/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha1-7oRy27Ep5yezHooQpCfe6d/kAIs= + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-cursor/download/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha1-JkMFp65JDR0Dvwybp8kl0XU68wc= + dependencies: + restore-cursor "^3.1.0" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/cli-width/download/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha1-sEM9C06chH7xiGik7xb9X8gnHEg= + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cli-width/download/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha1-ovSEN6LKqaIkNueUvwceyeYc7fY= + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/cliui/download/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha1-NIQi2+gtgAswIu709qwQvy5NG0k= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/cliui/download/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U= + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +clone-deep@^0.2.4: + version "0.2.4" + resolved "https://registry.npmmirror.com/clone-deep/download/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" + integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY= + dependencies: + for-own "^0.1.3" + is-plain-object "^2.0.1" + kind-of "^3.0.2" + lazy-cache "^1.0.3" + shallow-clone "^0.1.2" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/clone-deep/download/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha1-wZ/Zvbv4WUK0/ZechNz31fB8I4c= + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-regexp@^2.1.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/clone-regexp/download/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" + integrity sha1-fWXgCIXNh5ZAXDWnN+eoa3Qp428= + dependencies: + is-regexp "^2.0.0" + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.npmmirror.com/clone/download/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/co/download/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/coa/download/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha1-Q/bCEVG07yv1cYfbDXPeIp4+fsM= + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/code-point-at/download/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +codemirror@^5.55.0: + version "5.65.1" + resolved "https://registry.npmmirror.com/codemirror/download/codemirror-5.65.1.tgz#5988a812c974c467f964bcc1a00c944e373de502" + integrity sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/collection-visit/download/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.npmmirror.com/color-convert/download/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg= + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/color-convert/download/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM= + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/color-name/download/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha1-wqCah6y95pVD3m9j+jmVyCbFNqI= + +color-string@^1.6.0: + version "1.9.0" + resolved "https://registry.npmmirror.com/color-string/download/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" + integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.2.1" + resolved "https://registry.npmmirror.com/color/download/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.npmmirror.com/combined-stream/download/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha1-w9RaizT9cwYxoRCoolIGgrMdWn8= + dependencies: + delayed-stream "~1.0.0" + +commander@^2.11.0, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/commander/download/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.npmmirror.com/common-tags/download/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/commondir/download/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/component-emitter/download/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha1-FuQHD7qK4ptnnyIVhT7hgasuq8A= + +compose-function@3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/compose-function/download/compose-function-3.0.3.tgz#9ed675f13cc54501d30950a486ff6a7ba3ab185f" + integrity sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8= + dependencies: + arity-n "^1.0.4" + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.npmmirror.com/compressible/download/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha1-r1PMprBw1MPAdQ+9dyhqbXzEb7o= + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.npmmirror.com/compression/download/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha1-lVI+/xcMpXwpoMpB5v4TH0Hlu48= + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +compute-scroll-into-view@^1.0.17: + version "1.0.17" + resolved "https://registry.npmmirror.com/compute-scroll-into-view/download/compute-scroll-into-view-1.0.17.tgz#6a88f18acd9d42e9cf4baa6bec7e0522607ab7ab" + integrity sha1-aojxis2dQunPS6pr7H4FImB6t6s= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/concat-map/download/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.npmmirror.com/concat-stream/download/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ= + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +confusing-browser-globals@^1.0.9: + version "1.0.11" + resolved "https://registry.npmmirror.com/confusing-browser-globals/download/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w= + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/console-browserify/download/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha1-ZwY871fOts9Jk6KrOlWECujEkzY= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/constants-browserify/download/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/contains-path/download/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@1.7.0: + version "1.7.0" + resolved "https://registry.npmmirror.com/convert-source-map/download/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha1-F6LLiC1/d9NJBYXizmxSRCSjpEI= + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^0.3.3: + version "0.3.5" + resolved "https://registry.npmmirror.com/convert-source-map/download/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" + integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= + +convert-source-map@^1.4.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmmirror.com/convert-source-map/download/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k= + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.npmmirror.com/copy-anything/download/copy-anything-2.0.6.tgz#092454ea9584a7b7ad5573062b2a87f5900fc480" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/copy-concurrently/download/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha1-kilzmMrjSTf8r9bsgTnBgFHwteA= + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/copy-descriptor/download/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-to-clipboard@^3.2.0: + version "3.3.1" + resolved "https://registry.npmmirror.com/copy-to-clipboard/download/copy-to-clipboard-3.3.1.tgz?cache=0&sync_timestamp=1624607975240&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcopy-to-clipboard%2Fdownload%2Fcopy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" + integrity sha1-EVqhqZmP+rYZb5MHatbaO5E2Yq4= + dependencies: + toggle-selection "^1.0.6" + +core-js-compat@^3.20.0, core-js-compat@^3.20.2, core-js-compat@^3.6.2: + version "3.20.3" + resolved "https://registry.npmmirror.com/core-js-compat/download/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" + integrity sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + +core-js-pure@^3.20.2: + version "3.20.3" + resolved "https://registry.npmmirror.com/core-js-pure/download/core-js-pure-3.20.3.tgz#6cc4f36da06c61d95254efc54024fe4797fd5d02" + integrity sha512-Q2H6tQ5MtPtcC7f3HxJ48i4Q7T9ybPKgvWyuH7JXIoNa2pm0KuBnycsET/qw1SLLZYfbsbrZQNMeIOClb+6WIA== + +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.npmmirror.com/core-js/download/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-js@^3.5.0: + version "3.20.3" + resolved "https://registry.npmmirror.com/core-js/download/core-js-3.20.3.tgz#c710d0a676e684522f3db4ee84e5e18a9d11d69a" + integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/core-util-is/download/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmmirror.com/core-util-is/download/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U= + +cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha1-BA9yaAnFked6F8CjYmykW08Wixo= + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.npmmirror.com/cosmiconfig/download/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha1-cU11ZSLKzoZ4Z8y0R0xdAbuuXW0= + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.npmmirror.com/create-ecdh/download/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4= + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/create-hash/download/create-hash-1.2.0.tgz?cache=0&sync_timestamp=1624607951398&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcreate-hash%2Fdownload%2Fcreate-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY= + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.npmmirror.com/create-hmac/download/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8= + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^3.0.4: + version "3.1.5" + resolved "https://registry.npmmirror.com/cross-fetch/download/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/cross-spawn/download/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha1-CrVihuD3wk4VPQTMKqAn5DqaXRQ= + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npmmirror.com/cross-spawn/download/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q= + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.npmmirror.com/crypto-browserify/download/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha1-OWz58xN/A+S45TLFj2mCVOAPgOw= + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/css-blank-pseudo/download/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha1-3979MlS/ioICeZNnTM81SDv8s8U= + dependencies: + postcss "^7.0.5" + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.npmmirror.com/css-color-names/download/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha1-wZiUD2OnbX42wecQGLABchBUyyI= + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.npmmirror.com/css-has-pseudo/download/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha1-PGQqs0yiQsWcQaEl35EFhB9pZu4= + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@3.4.2: + version "3.4.2" + resolved "https://registry.npmmirror.com/css-loader/download/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" + integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.23" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.1" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.2" + schema-utils "^2.6.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/css-prefers-color-scheme/download/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha1-b4MKJxQZnU8NDQu4onkW7WXP8fQ= + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/css-select-base-adapter/download/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha1-Oy/0lyzDYquIVhUHqVQIoUMhNdc= + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/css-select/download/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8= + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.2.1" + resolved "https://registry.npmmirror.com/css-select/download/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" + integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== + dependencies: + boolbase "^1.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.npmmirror.com/css-tree/download/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha1-mL69YsTB2flg7DQM+fdSLjBwmiI= + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2: + version "1.1.3" + resolved "https://registry.npmmirror.com/css-tree/download/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha1-60hw+2/XcHMn7JXC/yqwm16NuR0= + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.npmmirror.com/css-what/download/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ= + +css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/css-what/download/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha1-P3tweq32M7r2LCzrhXm1RbtA9/4= + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.npmmirror.com/css/download/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk= + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.npmmirror.com/cssdb/download/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha1-O/LypowQ9cagir2SN4Mx7oA83bA= + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/cssesc/download/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM= + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/cssesc/download/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4= + +cssnano-preset-default@^4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/cssnano-preset-default/download/cssnano-preset-default-4.0.8.tgz#920622b1fc1e95a34e8838203f1397a504f2d3ff" + integrity sha1-kgYisfwelaNOiDggPxOXpQTy0/8= + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.3" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/cssnano-util-get-arguments/download/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/cssnano-util-get-match/download/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/cssnano-util-raw-cache/download/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha1-sm1f1fcqEd/np4RvtMZyYPlr8oI= + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/cssnano-util-same-parent/download/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha1-V0CC+yhZ0ttDOFWDXZqEVuoYu/M= + +cssnano@^4.1.10: + version "4.1.11" + resolved "https://registry.npmmirror.com/cssnano/download/cssnano-4.1.11.tgz#c7b5f5b81da269cb1fd982cb960c1200910c9a99" + integrity sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.8" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.2.0" + resolved "https://registry.npmmirror.com/csso/download/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4: + version "0.3.8" + resolved "https://registry.npmmirror.com/cssom/download/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o= + +cssstyle@^1.0.0, cssstyle@^1.1.1: + version "1.4.0" + resolved "https://registry.npmmirror.com/cssstyle/download/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha1-nTEyginTxWXGHlhrAgQaKPzNzPE= + dependencies: + cssom "0.3.x" + +csstype@^3.0.2: + version "3.0.10" + resolved "https://registry.npmmirror.com/csstype/download/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" + integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + +customize-cra@^0.9.1: + version "0.9.1" + resolved "https://registry.npmmirror.com/customize-cra/download/customize-cra-0.9.1.tgz#76b42c4f537c16329eccc09cfefd804d04c81550" + integrity sha1-drQsT1N8FjKezMCc/v2ATQTIFVA= + dependencies: + lodash.flow "^3.5.0" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/cyclist/download/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/d/download/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.4: + version "1.0.8" + resolved "https://registry.npmmirror.com/damerau-levenshtein/download/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.npmmirror.com/dashdash/download/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0, data-urls@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/data-urls/download/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4= + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +date-fns@2.x: + version "2.28.0" + resolved "https://registry.npmmirror.com/date-fns/download/date-fns-2.28.0.tgz#9570d656f5fc13143e50c975a3b6bbeb46cd08b2" + integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== + +dayjs@1.x: + version "1.10.7" + resolved "https://registry.npmmirror.com/dayjs/download/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" + integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/debug/download/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.1.1, debug@^3.2.5, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmmirror.com/debug/download/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: + version "4.3.3" + resolved "https://registry.npmmirror.com/debug/download/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/decamelize-keys/download/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/decamelize/download/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +deep-equal@^1.0.1, deep-equal@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/deep-equal/download/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o= + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmmirror.com/deep-is/download/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE= + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/default-gateway/download/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs= + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/define-properties/download/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE= + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.npmmirror.com/define-property/download/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/define-property/download/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/define-property/download/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha1-1Flono1lS6d+AqgX+HENcCyxbp0= + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/del/download/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/delayed-stream/download/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/des.js/download/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha1-U4IULhvcU/hdhtU+X0qn3rkeCEM= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/detect-newline/download/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmmirror.com/detect-node/download/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha1-yccHdaScPQO8LAbZpzvlUPl4+LE= + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/detect-port-alt/download/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha1-JHB96r6TLUo89iEwICfCsmZWgnU= + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/diff-sequences/download/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha1-VxXWJE4qpl9Iu6C8ly2wsLEelbU= + +diff-sequences@^27.4.0: + version "27.4.0" + resolved "https://registry.npmmirror.com/diff-sequences/download/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" + integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.npmmirror.com/diffie-hellman/download/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha1-QOjumPVaIUlgcUaSHGPhrl89KHU= + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/dir-glob/download/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha1-CyBdK2rvmCOMooZZioIE0p0KADQ= + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/dir-glob/download/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= + dependencies: + path-type "^4.0.0" + +dnd-core@^11.1.3: + version "11.1.3" + resolved "https://registry.npmmirror.com/dnd-core/download/dnd-core-11.1.3.tgz#f92099ba7245e49729d2433157031a6267afcc98" + integrity sha1-+SCZunJF5Jcp0kMxVwMaYmevzJg= + dependencies: + "@react-dnd/asap" "^4.0.0" + "@react-dnd/invariant" "^2.0.0" + redux "^4.0.4" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/dns-equal/download/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.4" + resolved "https://registry.npmmirror.com/dns-packet/download/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f" + integrity sha1-40VQZYJKJQe6iGxVqJljuxB97G8= + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/dns-txt/download/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.npmmirror.com/doctrine/download/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/doctrine/download/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha1-XNAfwQFiG0LEzX9dGmYkNxbT850= + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/doctrine/download/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= + dependencies: + esutils "^2.0.2" + +dom-align@^1.7.0: + version "1.12.2" + resolved "https://registry.npmmirror.com/dom-align/download/dom-align-1.12.2.tgz#0f8164ebd0c9c21b0c790310493cd855892acd4b" + integrity sha1-D4Fk69DJwhsMeQMQSTzYVYkqzUs= + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/dom-converter/download/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha1-ZyGp2u4uKTaClVtq/kFncWJ7t2g= + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.npmmirror.com/dom-serializer/download/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E= + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/dom-serializer/download/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha1-YgZDfTLO767HFhgDIwx6ILwbTZE= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.npmmirror.com/domain-browser/download/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto= + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/domelementtype/download/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8= + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/domelementtype/download/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc= + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/domexception/download/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA= + dependencies: + webidl-conversions "^4.0.2" + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.npmmirror.com/domhandler/download/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha1-iAUJfpM9ZehVRvcm1g9euItE+AM= + dependencies: + domelementtype "1" + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/domhandler/download/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== + dependencies: + domelementtype "^2.2.0" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.npmmirror.com/domutils/download/domutils-1.7.0.tgz?cache=0&sync_timestamp=1630106606599&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha1-Vuo0HoNOBuZ0ivehyyXaZ+qfjCo= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.npmmirror.com/domutils/download/domutils-2.8.0.tgz?cache=0&sync_timestamp=1630106606599&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdomutils%2Fdownload%2Fdomutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha1-RDfe9dtuLR9dbuhZvZXKfQIEgTU= + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/dot-case/download/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha1-mytnDQCkMWZ6inW6Kc0bmICc51E= + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/dot-prop/download/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog= + dependencies: + is-obj "^2.0.0" + +dotenv-expand@5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha1-P7rwIL/XlIhAcuomsel5HUWmKfA= + +dotenv@8.2.0: + version "8.2.0" + resolved "https://registry.npmmirror.com/dotenv/download/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/duplexer/download/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.npmmirror.com/duplexify/download/duplexify-3.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fduplexify%2Fdownload%2Fduplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha1-Kk31MX9sz9kfhtb9JdjYoQO4gwk= + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/ecc-jsbn/download/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.3.378, electron-to-chromium@^1.4.17: + version "1.4.56" + resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.4.56.tgz#f660fd2c6739b341d8922fe3a441a5a2804911a1" + integrity sha512-0k/S0FQqRRpJbX7YUjwCcLZ8D42RqGKtaiq90adXBOYgTIWwLA/g3toO8k9yEpqU8iC4QyaWYYWSTBIna8WV4g== + +elliptic@^6.5.3, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.npmmirror.com/elliptic/download/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha1-2jfOvTHnmhNn6UG1ku0fvr1Yq7s= + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/emoji-regex/download/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc= + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/emojis-list/download/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/emojis-list/download/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha1-VXBmIEatKeLpFucariYKvf9Pang= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.npmmirror.com/end-of-stream/download/end-of-stream-1.4.4.tgz?cache=0&sync_timestamp=1624607958717&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fend-of-stream%2Fdownload%2Fend-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha1-WuZKX0UFe682JuwU2gyl5LJDHrA= + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/enhanced-resolve/download/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha1-Lzz9hNvjtIfxjy2y7x4GSlccpew= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/entities/download/entities-1.1.2.tgz?cache=0&sync_timestamp=1628508126700&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha1-vfpzUplmTfr9NFKe1PhSKidf6lY= + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/entities/download/entities-2.2.0.tgz?cache=0&sync_timestamp=1628508126700&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fentities%2Fdownload%2Fentities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU= + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.8" + resolved "https://registry.npmmirror.com/errno/download/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8= + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmmirror.com/error-ex/download/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha1-tKxAZIEH/c3PriQvQovqihTU8b8= + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.npmmirror.com/es-abstract/download/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha1-1IhXlodpFpWd547aoN9FZicRXsM= + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.4" + is-negative-zero "^2.0.1" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.npmmirror.com/es-to-primitive/download/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo= + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@~0.10.14: + version "0.10.63" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.63.tgz#9c222a63b6a332ac80b1e373b426af723b895bd6" + integrity sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + +es6-iterator@2.0.3, es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/es6-iterator/download/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.npmmirror.com/es6-symbol/download/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha1-utXTwbzawoJp9MszHkMceKxwXRg= + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/escalade/download/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA= + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escodegen@^1.11.0, escodegen@^1.9.1: + version "1.14.3" + resolved "https://registry.npmmirror.com/escodegen/download/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha1-TnuB+6YVgdyXWC7XjKt/Do1j9QM= + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-react-app@^5.2.1: + version "5.2.1" + resolved "https://registry.npmmirror.com/eslint-config-react-app/download/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" + integrity sha1-aYv3ru4n8M6gE56u8mHHv33WI98= + dependencies: + confusing-browser-globals "^1.0.9" + +eslint-import-resolver-node@^0.3.2: + version "0.3.6" + resolved "https://registry.npmmirror.com/eslint-import-resolver-node/download/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" + integrity sha1-QEi5WDldqJZoJSAB29nsprg7rL0= + dependencies: + debug "^3.2.7" + resolve "^1.20.0" + +eslint-loader@3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/eslint-loader/download/eslint-loader-3.0.3.tgz#e018e3d2722381d982b1201adb56819c73b480ca" + integrity sha1-4Bjj0nIjgdmCsSAa21aBnHO0gMo= + dependencies: + fs-extra "^8.1.0" + loader-fs-cache "^1.0.2" + loader-utils "^1.2.3" + object-hash "^2.0.1" + schema-utils "^2.6.1" + +eslint-module-utils@^2.4.1: + version "2.7.3" + resolved "https://registry.npmmirror.com/eslint-module-utils/download/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" + integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== + dependencies: + debug "^3.2.7" + find-up "^2.1.0" + +eslint-plugin-flowtype@4.6.0: + version "4.6.0" + resolved "https://registry.npmmirror.com/eslint-plugin-flowtype/download/eslint-plugin-flowtype-4.6.0.tgz#82b2bd6f21770e0e5deede0228e456cb35308451" + integrity sha1-grK9byF3Dg5d7t4CKORWyzUwhFE= + dependencies: + lodash "^4.17.15" + +eslint-plugin-import@2.20.1: + version "2.20.1" + resolved "https://registry.npmmirror.com/eslint-plugin-import/download/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" + integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.1" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.12.0" + +eslint-plugin-jsx-a11y@6.2.3: + version "6.2.3" + resolved "https://registry.npmmirror.com/eslint-plugin-jsx-a11y/download/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" + integrity sha1-uHKgnV3lGvcKl9se6n3JMwQ3CKo= + dependencies: + "@babel/runtime" "^7.4.5" + aria-query "^3.0.0" + array-includes "^3.0.3" + ast-types-flow "^0.0.7" + axobject-query "^2.0.2" + damerau-levenshtein "^1.0.4" + emoji-regex "^7.0.2" + has "^1.0.3" + jsx-ast-utils "^2.2.1" + +eslint-plugin-react-hooks@^1.6.1: + version "1.7.0" + resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/download/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" + integrity sha1-YhC21aNyBfC5KFj4laToJwIKfQQ= + +eslint-plugin-react@7.19.0: + version "7.19.0" + resolved "https://registry.npmmirror.com/eslint-plugin-react/download/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" + integrity sha1-bQj5ZzYoqmnFVZ0zSJ6FXYNVFmY= + dependencies: + array-includes "^3.1.1" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.2.3" + object.entries "^1.1.1" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.15.1" + semver "^6.3.0" + string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha1-ygODMxD2iJoyZHgaqC5j65z+eEg= + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.1.1" + resolved "https://registry.npmmirror.com/eslint-scope/download/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw= + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.npmmirror.com/eslint-utils/download/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8= + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/eslint-utils/download/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc= + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha1-MOvR73wv3/AcOk8VEESvJfqwUj4= + +eslint@^6.6.0: + version "6.8.0" + resolved "https://registry.npmmirror.com/eslint/download/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.npmmirror.com/espree/download/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o= + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/esprima/download/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= + +esquery@^1.0.1: + version "1.4.0" + resolved "https://registry.npmmirror.com/esquery/download/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha1-IUj/w4uC6McFff7UhCWz5h8PJKU= + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/esrecurse/download/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha1-eteWTWeauyi+5yzsY3WLHF0smSE= + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/estraverse/download/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0= + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmmirror.com/estraverse/download/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha1-LupSkHAvJquP5TcDcP+GyWXSESM= + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmmirror.com/esutils/download/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q= + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.npmmirror.com/eventemitter3/download/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/events/download/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA= + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.npmmirror.com/eventsource/download/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI= + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.npmmirror.com/exec-sh/download/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha1-/yZPnjJVGaYMteJzaSlDSDzKY7w= + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1637147199964&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg= + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execall@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/execall/download/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" + integrity sha1-FqBrX+UJnffQC+XZwG7s3tFmO0U= + dependencies: + clone-regexp "^2.1.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/exit/download/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.npmmirror.com/expand-brackets/download/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/expect/download/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha1-t1FltIFwdPpKFXeU9G/p8boVtso= + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" + +express@^4.17.1: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.npmmirror.com/ext/download/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha1-OHHVBkHodMwXLitT+RmELRnbTFI= + dependencies: + type "^2.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend-shallow/download/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/extend/download/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo= + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.npmmirror.com/external-editor/download/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha1-ywP3QL764D6k0oPK7SdBqD8zVJU= + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/extglob/download/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM= + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/extsprintf/download/extsprintf-1.3.0.tgz?cache=0&sync_timestamp=1635889863507&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fextsprintf%2Fdownload%2Fextsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.npmmirror.com/extsprintf/download/extsprintf-1.4.1.tgz?cache=0&sync_timestamp=1635889863507&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fextsprintf%2Fdownload%2Fextsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha1-jRcsBkhn8jXAyEpZaAbSeb9LzAc= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmmirror.com/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU= + +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.npmmirror.com/fast-glob/download/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha1-aVOFfDr6R1//ku5gFdUtpwpM050= + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.2.5, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.npmmirror.com/fast-glob/download/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM= + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/fast-levenshtein/download/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.npmmirror.com/fastest-levenshtein/download/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha1-mZD306iMxan/0fF0V0UlFwDUl+I= + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.npmmirror.com/fastq/download/fastq-1.13.0.tgz?cache=0&sync_timestamp=1631609698424&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffastq%2Fdownload%2Ffastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha1-YWdg+Ip1Jr38WWt8q4wYk4w2uYw= + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.npmmirror.com/faye-websocket/download/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.1: + version "0.11.4" + resolved "https://registry.npmmirror.com/faye-websocket/download/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha1-fw2Sdc/dhqHJY9yLZfzEUe3Lsdo= + dependencies: + websocket-driver ">=0.5.1" + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/fb-watchman/download/fb-watchman-2.0.1.tgz?cache=0&sync_timestamp=1624607942135&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ffb-watchman%2Fdownload%2Ffb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU= + dependencies: + bser "2.1.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/fbemitter/download/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha1-ALKhr1QRJUqrQWzXX55iib7kv/M= + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha1-IWVRE2rgL+JVkyw+yHdfGOLAeLg= + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.2" + resolved "https://registry.npmmirror.com/fbjs/download/fbjs-3.0.2.tgz#dfae08a85c66a58372993ce2caf30863f569ff94" + integrity sha512-qv+boqYndjElAJHNN3NoM8XuwQZ1j2m3kEvTgdle8IDjr6oUbkEpvABWtj/rQl3vq4ew7dnElBxL4YJAwTVqQQ== + dependencies: + cross-fetch "^3.0.4" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.npmmirror.com/figgy-pudding/download/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4= + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/figures/download/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8= + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/file-entry-cache/download/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w= + dependencies: + flat-cache "^2.0.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/file-entry-cache/download/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha1-IRst2WWcsDlLBz5zI6w8kz1SICc= + dependencies: + flat-cache "^3.0.4" + +file-loader@4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/file-loader/download/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== + dependencies: + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-saver@^2.0.2: + version "2.0.5" + resolved "https://registry.npmmirror.com/file-saver/download/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" + integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/file-uri-to-path/download/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha1-VTp7hEb/b2hDWcRF8eN6BdrMM90= + +filesize@6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/filesize/download/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" + integrity sha1-+FC1CZCcfIb35FDqGQBsMcLtPS8= + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/fill-range/download/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/fill-range/download/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha1-GRmmp8df44ssfHflGYU12prN2kA= + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/find-cache-dir/download/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/find-cache-dir/download/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc= + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.2.0: + version "3.3.2" + resolved "https://registry.npmmirror.com/find-cache-dir/download/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha1-swxbbv8HMHMa6pu9nb7L2AJW1ks= + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/find-up/download/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk= + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/find-up/download/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/find-up/download/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha1-SRafHXmTQwZG2mHsxa41XCHJe3M= + dependencies: + locate-path "^3.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/flat-cache/download/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA= + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/flat-cache/download/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha1-YbAzgwKy/p+Vfcwy/CqH8cMEixE= + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/flatted/download/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha1-RXWyHivO50NKqb5mL0t7X5wrUTg= + +flatted@^3.1.0: + version "3.2.5" + resolved "https://registry.npmmirror.com/flatted/download/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" + integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== + +flatten@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/flatten/download/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b" + integrity sha1-wSg6yfJ7Noq8HjbR/3sEUBowNWs= + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/flush-write-stream/download/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha1-jdfYc6G6vCB9lOrQwuDkQnbr8ug= + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +flux@^4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/flux/download/flux-4.0.3.tgz#573b504a24982c4768fdfb59d8d2ea5637d72ee7" + integrity sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio= + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0: + version "1.14.7" + resolved "https://registry.npmmirror.com/follow-redirects/download/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" + integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.npmmirror.com/for-each/download/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha1-abRH6IoKXTLD5whPPxcQA0shN24= + dependencies: + is-callable "^1.1.3" + +for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.npmmirror.com/for-in/download/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/for-in/download/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +for-own@^0.1.3: + version "0.1.5" + resolved "https://registry.npmmirror.com/for-own/download/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/forever-agent/download/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/download/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" + integrity sha1-oWQsDT5l9QwswXQunAqA9EH4axk= + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^3.3.0" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.npmmirror.com/form-data/download/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha1-3M5SwF9kTymManq5Nr1yTO/786Y= + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/fragment-cache/download/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +framer-motion@^2.1.2: + version "2.9.5" + resolved "https://registry.npmmirror.com/framer-motion/download/framer-motion-2.9.5.tgz#bbb185325d531c57f494cf3f6cf7719fc2c225c7" + integrity sha1-u7GFMl1THFf0lM8/bPdxn8LCJcc= + dependencies: + framesync "^4.1.0" + hey-listen "^1.0.8" + popmotion "9.0.0-rc.20" + style-value-types "^3.1.9" + tslib "^1.10.0" + optionalDependencies: + "@emotion/is-prop-valid" "^0.8.2" + +framesync@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/framesync/download/framesync-4.1.0.tgz#69a8db3ca432dc70d6a76ba882684a1497ef068a" + integrity sha1-aajbPKQy3HDWp2uogmhKFJfvBoo= + dependencies: + hey-listen "^1.0.5" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/from2/download/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha1-DYUhIuW8W+tFP7Ao6cDJvzY0DJQ= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha1-TxicRKoSO4lfcigE9V6iPq3DSOk= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmmirror.com/fs-extra/download/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha1-SdQ8RaiM2Wd2aMt74bRu/bjS4cA= + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/fs-minipass/download/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs= + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.npmmirror.com/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/fs.realpath/download/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/fsevents/download/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha1-TAofs0vGjlQ7S4Kp7Dkr+9qECAU= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.npmmirror.com/fsevents/download/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg= + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.npmmirror.com/fsevents/download/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmmirror.com/gensync/download/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA= + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o= + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npmmirror.com/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha1-T5RBKoLbMvNuOwuXQfipf+sDH34= + +get-intrinsic@^1.0.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y= + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.npmmirror.com/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha1-tf3nfyLL4185C04ImSLFC85u9mQ= + +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.npmmirror.com/get-stdin/download/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha1-y61qc/63X27rIrqeAfiaooqpelM= + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/get-stream/download/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha1-wbJVV189wh1Zv8ec09K0axw6VLU= + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/get-symbol-description/download/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha1-f9uByQAQH71WTdXxowr1qtweWNY= + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.npmmirror.com/get-value/download/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.npmmirror.com/getpass/download/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/glob-parent/download/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ= + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.npmmirror.com/glob/download/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@2.0.0, global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/global-modules/download/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha1-mXYFrSNF8n9RU5vqJldEISFcd4A= + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/global-prefix/download/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha1-/IX3MGTfafUEIfR/iD/luRO6m5c= + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmmirror.com/globals/download/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4= + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.npmmirror.com/globals/download/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg= + dependencies: + type-fest "^0.8.1" + +globby@8.0.2: + version "8.0.2" + resolved "https://registry.npmmirror.com/globby/download/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha1-VpdhnM2VxSdduy1vqkIIfBqUHY0= + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^11.0.3: + version "11.1.0" + resolved "https://registry.npmmirror.com/globby/download/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/globby/download/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/globjoin/download/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + +gonzales-pe@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/gonzales-pe/download/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha1-/p3sXzxVfurQn/hoxlgmvlTQZ7M= + dependencies: + minimist "^1.2.5" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.9" + resolved "https://registry.npmmirror.com/graceful-fs/download/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/growly/download/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/gud/download/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha1-pIlYGxfmpwvsqavjrlfeekmYUsA= + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/gzip-size/download/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ= + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/handle-thing/download/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha1-hX95zjWVgMNA1DCBzGSJcNC7I04= + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/har-schema/download/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.npmmirror.com/har-validator/download/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha1-HwgDufjLIMD6E4It8ezds2veHv0= + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/hard-rejection/download/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha1-HG7aXBaFxjlCdm15u0Cudzzs2IM= + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.npmmirror.com/harmony-reflect/download/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha1-Mey9MuZIo00DDYattn1NR1R/5xA= + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/has-ansi/download/has-ansi-2.0.0.tgz?cache=0&sync_timestamp=1631558652943&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-ansi%2Fdownload%2Fhas-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/has-bigints/download/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/has-flag/download/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/has-flag/download/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s= + +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/has-symbols/download/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM= + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-tostringtag/download/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha1-fhM4GKfTlHNPlB5zw9P5KR5liyU= + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/has-value/download/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-value/download/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/has-values/download/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/has-values/download/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/hash-base/download/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM= + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.npmmirror.com/hash.js/download/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I= + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/he/download/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha1-hK5l+n6vsWX922FWauFLrwVmTw8= + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/hex-color-regex/download/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4= + +hey-listen@^1.0.5, hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.npmmirror.com/hey-listen/download/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha1-jllWH/ckkI3hqpJO1uzISlapqmg= + +highlight-words-core@^1.2.0: + version "1.2.2" + resolved "https://registry.npmmirror.com/highlight-words-core/download/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa" + integrity sha1-Hv9tfZ8KIvFVBCoAeRI3eRse6qo= + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/hmac-drbg/download/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.npmmirror.com/hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz?cache=0&sync_timestamp=1627566706387&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhoist-non-react-statics%2Fdownload%2Fhoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U= + dependencies: + react-is "^16.7.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.npmmirror.com/hosted-git-info/download/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha1-3/wL+aIcAiCQkPKqaUKeFBTa8/k= + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.npmmirror.com/hosted-git-info/download/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmmirror.com/hpack.js/download/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/hsl-regex/download/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/hsla-regex/download/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg= + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@^1.2.1: + version "1.4.0" + resolved "https://registry.npmmirror.com/html-entities/download/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha1-z70bAdKvr5rcobEK59/6uYxx0tw= + +html-escaper@^2.0.0, html-escaper@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/html-escaper/download/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha1-39YAJ9o2o238viNiYsAKWCJoFFM= + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/html-minifier-terser/download/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha1-ki6W8fO7YIMsJjS3mIQJY4mx8FQ= + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/html-parse-stringify/download/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha1-38EBc0fOn3fIFBpQfyMwQMWcVdI= + dependencies: + void-elements "3.1.0" + +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/html-tags/download/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha1-e15vfmZen7QfMAB+2eDUHpf7IUA= + +html-webpack-plugin@4.0.0-beta.11: + version "4.0.0-beta.11" + resolved "https://registry.npmmirror.com/html-webpack-plugin/download/html-webpack-plugin-4.0.0-beta.11.tgz#3059a69144b5aecef97708196ca32f9e68677715" + integrity sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg== + dependencies: + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.15" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.10.0: + version "3.10.1" + resolved "https://registry.npmmirror.com/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1636640945377&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha1-vWedw/WYl7ajS7EHSchVu1OpOS8= + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/htmlparser2/download/htmlparser2-6.1.0.tgz?cache=0&sync_timestamp=1636640945377&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha1-xNditsM3GgXb5l6UrkOp+EX7j7c= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmmirror.com/http-deceiver/download/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmmirror.com/http-errors/download/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.5" + resolved "https://registry.npmmirror.com/http-parser-js/download/http-parser-js-0.5.5.tgz#d7c30d5d3c90d865b4a2e870181f9d6f22ac7ac5" + integrity sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.npmmirror.com/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.1" + resolved "https://registry.npmmirror.com/http-proxy/download/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk= + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1637178703812&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/https-browserify/download/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +i18next@^19.5.3: + version "19.9.2" + resolved "https://registry.npmmirror.com/i18next/download/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" + integrity sha1-6loSRBbjxauF/dyiyOPDZpqNo5c= + dependencies: + "@babel/runtime" "^7.12.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.npmmirror.com/iconv-lite/download/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha1-ICK0sl+93CHS9SSXSkdKr+czkIs= + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/icss-utils/download/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc= + dependencies: + postcss "^7.0.14" + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/identity-obj-proxy/download/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ= + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.npmmirror.com/ieee754/download/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.npmmirror.com/iferr/download/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.npmmirror.com/ignore/download/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmmirror.com/ignore/download/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/ignore/download/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.npmmirror.com/image-size/download/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +immer@1.10.0: + version "1.10.0" + resolved "https://registry.npmmirror.com/immer/download/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha1-utZ2BbqcgQJ12R4cKkfUWC6YKG0= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/import-cwd/download/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/import-fresh/download/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmmirror.com/import-fresh/download/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha1-NxYsJfy566oublPVtNiM4X2eDCs= + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/import-from/download/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/import-lazy/download/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha1-6OtidIOgpD2jwD8+NVSL5csMwVM= + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/import-local/download/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha1-VQcL44pZk88Y72236WH1vuXFoJ0= + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/imurmurhash/download/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/indent-string/download/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE= + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/indexes-of/download/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/infer-owner/download/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha1-xM78qo5RBRwqQLos6KPScpWvlGc= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/inflight/download/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmmirror.com/inherits/download/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.npmmirror.com/ini/download/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw= + +inquirer@7.0.4: + version "7.0.4" + resolved "https://registry.npmmirror.com/inquirer/download/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" + integrity sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.5.3" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.npmmirror.com/inquirer/download/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/internal-ip/download/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc= + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/internal-slot/download/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha1-c0fjB97uovqsKsYgXUvH00ln9Zw= + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.npmmirror.com/invariant/download/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY= + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/invert-kv/download/invert-kv-2.0.0.tgz?cache=0&sync_timestamp=1630996775723&other_urls=https%3A%2F%2Fregistry.nlark.com%2Finvert-kv%2Fdownload%2Finvert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI= + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/ip-regex/download/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.9" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" + integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.npmmirror.com/ipaddr.js/download/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha1-v/OFQ+64mEglB5/zoqjmy9RngbM= + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-absolute-url/download/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/is-absolute-url/download/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg= + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.npmmirror.com/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY= + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-alphabetical/download/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha1-nn1rlJFr4iFTdF0YTCmMv5hqaG0= + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-alphanumerical/download/is-alphanumerical-1.0.4.tgz?cache=0&sync_timestamp=1636009291782&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-alphanumerical%2Fdownload%2Fis-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha1-frmiQx+FX2se8aeOMm31FWlsTb8= + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.npmmirror.com/is-arguments/download/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha1-FbP4j9oB8ql/7ITKdhpWDxI++ps= + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmmirror.com/is-arrayish/download/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha1-RXSirlb3qyBolvtDHq7tBm/fjwM= + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-bigint/download/is-bigint-1.0.4.tgz?cache=0&sync_timestamp=1628747500062&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-bigint%2Fdownload%2Fis-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha1-CBR6GHW8KzIAXUHM2Ckd/8ZpHfM= + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk= + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/is-boolean-object/download/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha1-XG3CACRt2TIa5LiFoRS7H3X2Nxk= + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.0.2, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.npmmirror.com/is-buffer/download/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha1-76ouqdqg16suoTqXsritUf776L4= + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/is-buffer/download/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha1-68JS5ADSL/jXf6CYiIIaJKZYwZE= + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/is-callable/download/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha1-RzAdWN0CWUB4ZVR4U99tYf5HGUU= + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-ci/download/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw= + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-color-stop/download/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.5.0, is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.npmmirror.com/is-core-module/download/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.npmmirror.com/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc= + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.npmmirror.com/is-date-object/download/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha1-CEHVU25yTCVZe/bqYuG9OCmN8x8= + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-decimal/download/is-decimal-1.0.4.tgz?cache=0&sync_timestamp=1636008960795&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fis-decimal%2Fdownload%2Fis-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha1-ZaOllYocW2OnBuGzM9fNn2MNP6U= + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.npmmirror.com/is-descriptor/download/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco= + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-descriptor/download/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw= + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.npmmirror.com/is-directory/download/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npmmirror.com/is-docker/download/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/is-extendable/download/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-extendable/download/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ= + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/is-extglob/download/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0= + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-generator-fn/download/is-generator-fn-2.1.0.tgz?cache=0&sync_timestamp=1628686122487&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-generator-fn%2Fdownload%2Fis-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha1-fRQK3DiarzARqPKipM+m+q3/sRg= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/is-glob/download/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmmirror.com/is-glob/download/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ= + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-hexadecimal/download/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha1-zDXJdYjaS9Saju3WvECC1E3LI6c= + +is-negative-zero@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/is-negative-zero/download/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.npmmirror.com/is-number-object/download/is-number-object-1.0.6.tgz?cache=0&sync_timestamp=1628221744591&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-number-object%2Fdownload%2Fis-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha1-anqvg4x/BoalC0VT9+VKlklOifA= + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/is-number/download/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmmirror.com/is-number/download/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss= + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-obj/download/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/is-obj/download/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-path-cwd/download/is-path-cwd-2.2.0.tgz?cache=0&sync_timestamp=1628686723402&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-path-cwd%2Fdownload%2Fis-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s= + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha1-v+Lcomxp85cmWkAJljYCk1oFOss= + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-path-inside/download/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha1-fJgQWH1lmkDSe8201WFuqwWUlLI= + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/download/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-plain-obj/download/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha1-ReQuN/zPH0Dajl927iFRWEDAkoc= + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/is-plain-object/download/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc= + dependencies: + isobject "^3.0.1" + +is-regex@^1.0.4, is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/is-regex/download/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha1-7vVmPNWfpMCuM5UFMj32hUuxWVg= + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-regexp/download/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-regexp@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-regexp/download/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" + integrity sha1-zXNKVoZOI7lWv058ZsOWpMCyLC0= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-resolvable/download/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg= + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/is-root/download/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha1-gJ4YEpzxEpZEMCpPhUQDXVGYSpw= + +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/is-shared-array-buffer/download/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha1-l7DIX72stZycRG/mU7gs8rW3z+Y= + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-stream/download/is-stream-1.1.0.tgz?cache=0&sync_timestamp=1628592752355&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-stream%2Fdownload%2Fis-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/is-string/download/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha1-DdEr8gBvJVu1j2lREO/3SR7rwP0= + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/is-symbol/download/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha1-ptrJO2NbBjymhyI23oiRClevE5w= + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/is-typedarray/download/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/is-unicode-supported/download/is-unicode-supported-0.1.0.tgz?cache=0&sync_timestamp=1625294654260&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fis-unicode-supported%2Fdownload%2Fis-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc= + +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-weakref/download/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.npmmirror.com/is-what/download/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha1-4SIvRt3ahd6tD9HJ3xMXYOd3VcE= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/is-windows/download/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0= + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/is-wsl/download/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/is-wsl/download/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE= + dependencies: + is-docker "^2.0.0" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/isarray/download/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/isexe/download/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/isobject/download/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/isobject/download/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/isstream/download/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.npmmirror.com/istanbul-lib-coverage/download/istanbul-lib-coverage-2.0.5.tgz?cache=0&sync_timestamp=1634527209200&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k= + +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/istanbul-lib-instrument/download/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha1-pfY9kfC7wMPkee9MXeAnM17G1jA= + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.npmmirror.com/istanbul-lib-report/download/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha1-WoETzXRtQ8SInro2qxDn1QybTzM= + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.npmmirror.com/istanbul-lib-source-maps/download/istanbul-lib-source-maps-3.0.6.tgz?cache=0&sync_timestamp=1634004113980&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fistanbul-lib-source-maps%2Fdownload%2Fistanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha1-KEmXxIIRdS7EhiU9qX44ed77qMg= + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.6: + version "2.2.7" + resolved "https://registry.npmmirror.com/istanbul-reports/download/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha1-XZOfYjfXtIOTzAlZ6rQM1P0FaTE= + dependencies: + html-escaper "^2.0.0" + +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-changed-files/download/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha1-CNjBXreaf6P8mCabwUtFHugvgDk= + dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" + throat "^4.0.0" + +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-cli/download/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha1-rS3mLQdHLUGcarwwH8QyuYsQ0q8= + dependencies: + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^13.3.0" + +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-config/download/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha1-+xu8YMc6Rq8DWQcZ76SCXm5N0bU= + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + micromatch "^3.1.10" + pretty-format "^24.9.0" + realpath-native "^1.1.0" + +jest-diff@*: + version "27.4.6" + resolved "https://registry.npmmirror.com/jest-diff/download/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" + integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.4.0" + jest-get-type "^27.4.0" + pretty-format "^27.4.6" + +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-diff/download/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha1-kxt9DVd4obr3RSy4FuMl43JAVdo= + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-docblock@^24.3.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-docblock/download/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha1-eXAgGAK6Vg4cQJLMJcvt9a9ajOI= + dependencies: + detect-newline "^2.1.0" + +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-each/download/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha1-6y2mAuKmEImNvF8fbfO6hrVfiwU= + dependencies: + "@jest/types" "^24.9.0" + chalk "^2.0.1" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom-fourteen@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/jest-environment-jsdom-fourteen/download/jest-environment-jsdom-fourteen-1.0.1.tgz#4cd0042f58b4ab666950d96532ecb2fc188f96fb" + integrity sha1-TNAEL1i0q2ZpUNllMuyy/BiPlvs= + dependencies: + "@jest/environment" "^24.3.0" + "@jest/fake-timers" "^24.3.0" + "@jest/types" "^24.3.0" + jest-mock "^24.0.0" + jest-util "^24.0.0" + jsdom "^14.1.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-environment-jsdom/download/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha1-SwgGx/yU+V7bNpppzCd47sK3N1s= + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + jsdom "^11.5.1" + +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-environment-node/download/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha1-Mz0tJ5b5aH8q7r8HQrUZ8zwcv9M= + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" + +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-get-type/download/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha1-FoSgyKUPLkkBtmRK6GH1ee7S7w4= + +jest-get-type@^27.4.0: + version "27.4.0" + resolved "https://registry.npmmirror.com/jest-get-type/download/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" + integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== + +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-haste-map/download/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha1-s4pdZCdJNOIfpBeump++t3zqrH0= + dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-jasmine2/download/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha1-H3sb0yQsF3TmKsq7NkbZavw75qA= + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.9.0" + is-generator-fn "^2.0.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + throat "^4.0.0" + +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-leak-detector/download/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha1-tmXep8dxAMXE99/LFTtlzwfc+Wo= + dependencies: + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-matcher-utils/download/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha1-9bNmHV5ijf/m3WUlHf2uDofDoHM= + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-message-util/download/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha1-Un9UoeOA9eICqNEUmw7IcvQxGeM= + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" + chalk "^2.0.1" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" + +jest-mock@^24.0.0, jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-mock/download/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha1-wig1VB7jebkIZzrVEIeiGFwT8cY= + dependencies: + "@jest/types" "^24.9.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.2" + resolved "https://registry.npmmirror.com/jest-pnp-resolver/download/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" + integrity sha1-twSsCuAoqJEIpNBAs/kZ393I4zw= + +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-regex-util/download/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha1-wT+zOAveIr9ldUMsST6o/jeWVjY= + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-resolve-dependencies/download/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha1-rQVRmJWcTPuopPBmxnOj8HhlB6s= + dependencies: + "@jest/types" "^24.9.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.9.0" + +jest-resolve@24.9.0, jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-resolve/download/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha1-3/BMdoevNMTdflJIktnPd+XRcyE= + dependencies: + "@jest/types" "^24.9.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-runner/download/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha1-V0+v29VEVcKzS0vfQ2WiOFf830I= + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.4.2" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-runtime/download/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha1-nxRYOvak9zFKap2fAibhp4HI5Kw= + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^13.3.0" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-serializer/download/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha1-5tfX75bTHouQeacUdUxdXFgojnM= + +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-snapshot/download/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha1-7I6cpPLsDFyHro+SXPl0l7DpUbo= + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.0.0, jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-util/download/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha1-c5aBTkhTbS6Fo33j5MQx18sUAWI= + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" + +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-validate/download/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha1-B3XFU2DRc82FTkAYB1bU/1Le+Ks= + dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" + chalk "^2.0.1" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watch-typeahead@0.4.2: + version "0.4.2" + resolved "https://registry.npmmirror.com/jest-watch-typeahead/download/jest-watch-typeahead-0.4.2.tgz#e5be959698a7fa2302229a5082c488c3c8780a4a" + integrity sha1-5b6Vlpin+iMCIppQgsSIw8h4Cko= + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.1" + jest-regex-util "^24.9.0" + jest-watcher "^24.3.0" + slash "^3.0.0" + string-length "^3.1.0" + strip-ansi "^5.0.0" + +jest-watcher@^24.3.0, jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-watcher/download/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha1-S1bl0c7/AF9biOUo3Jr8jdTtKzs= + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.9.0" + string-length "^2.0.0" + +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest-worker/download/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha1-Xb/bWy0yLphWeJgjipaXvM5ns+U= + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^25.1.0: + version "25.5.0" + resolved "https://registry.npmmirror.com/jest-worker/download/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha1-JhHQcbec6g9D7lej0RhZOsFUfbE= + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/jest/download/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== + dependencies: + import-local "^2.0.0" + jest-cli "^24.9.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/js-tokens/download/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha1-GSA/tZmR35jjoocFDUZHzerzJJk= + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/js-tokens/download/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmmirror.com/js-yaml/download/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/jsbn/download/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.npmmirror.com/jsdom/download/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsdom@^14.1.0: + version "14.1.0" + resolved "https://registry.npmmirror.com/jsdom/download/jsdom-14.1.0.tgz#916463b6094956b0a6c1782c94e380cd30e1981b" + integrity sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng== + dependencies: + abab "^2.0.0" + acorn "^6.0.4" + acorn-globals "^4.3.0" + array-equal "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.0" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.1.3" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.5" + saxes "^3.1.9" + symbol-tree "^3.2.2" + tough-cookie "^2.5.0" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^6.1.2" + xml-name-validator "^3.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmmirror.com/jsesc/download/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q= + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/jsesc/download/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/json-parse-better-errors/download/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk= + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmmirror.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA= + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/json-schema-traverse/download/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha1-rnvLNlard6c7pcSb9lTzjmtoYOI= + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/json-schema/download/json-schema-0.4.0.tgz?cache=0&sync_timestamp=1636423476647&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-schema%2Fdownload%2Fjson-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/download/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/json-stable-stringify/download/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/json2mq/download/json2mq-0.2.0.tgz#b637bd3ba9eabe122c83e9720483aeb10d2c904a" + integrity sha1-tje9O6nqvhIsg+lyBIOusQ0skEo= + dependencies: + string-convert "^0.2.0" + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.npmmirror.com/json3/download/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E= + +json5@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.npmmirror.com/json5/download/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/jsonfile/download/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.npmmirror.com/jsonify/download/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.npmmirror.com/jsprim/download/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: + version "2.4.1" + resolved "https://registry.npmmirror.com/jsx-ast-utils/download/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" + integrity sha1-ERSkwSCUgdsGxpDCtPSIzGZfZX4= + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/killable/download/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI= + +kind-of@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/kind-of/download/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" + integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU= + dependencies: + is-buffer "^1.0.2" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.npmmirror.com/kind-of/download/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/kind-of/download/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/kind-of/download/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha1-cpyR4thXt6QZofmqZWhcTDP1hF0= + +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.npmmirror.com/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0= + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/kleur/download/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha1-p5yezIbuHOP6YgbRIWxQHxR/wH4= + +known-css-properties@^0.21.0: + version "0.21.0" + resolved "https://registry.npmmirror.com/known-css-properties/download/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d" + integrity sha1-FfvQu7g0R/POCdivJH7UfGjt6A0= + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/last-call-webpack-plugin/download/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha1-l0LfDhDjz0blwDgcLekNOnotdVU= + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +lazy-cache@^0.2.3: + version "0.2.7" + resolved "https://registry.npmmirror.com/lazy-cache/download/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" + integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/lazy-cache/download/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/lcid/download/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha1-bvXS32DlL4LrIopMNz6NHzlyU88= + dependencies: + invert-kv "^2.0.0" + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/left-pad/download/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4= + +less-loader@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/less-loader/download/less-loader-5.0.0.tgz#498dde3a6c6c4f887458ee9ed3f086a12ad1b466" + integrity sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg== + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^4.0.1" + +less@^3.11.3: + version "3.13.1" + resolved "https://registry.npmmirror.com/less/download/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== + dependencies: + copy-anything "^2.0.1" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + native-request "^1.0.5" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/leven/download/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I= + +levenary@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/levenary/download/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" + integrity sha1-hCqe6Y0gdap/ru2+MmeekgX0b3c= + dependencies: + leven "^3.1.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/levn/download/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmmirror.com/lines-and-columns/download/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/load-json-file/download/load-json-file-2.0.0.tgz?cache=0&sync_timestamp=1631508607226&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fload-json-file%2Fdownload%2Fload-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/load-json-file/download/load-json-file-4.0.0.tgz?cache=0&sync_timestamp=1631508607226&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fload-json-file%2Fdownload%2Fload-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k= + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.npmmirror.com/loader-runner/download/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c= + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.npmmirror.com/loader-utils/download/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc= + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loader-utils/download/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha1-xXm140yzSxp07cbB+za/o3HVphM= + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/locate-path/download/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/locate-path/download/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4= + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/locate-path/download/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha1-Gvujlq/WdqbUJQTQpno6frn2KqA= + dependencies: + p-locate "^4.1.0" + +lodash-es@^4.17.15: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash-es/download/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/lodash._reinterpolate/download/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/lodash.curry/download/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmmirror.com/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.flow@^3.3.0, lodash.flow@^3.5.0: + version "3.5.0" + resolved "https://registry.npmmirror.com/lodash.flow/download/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.npmmirror.com/lodash.sortby/download/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.template@^4.4.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.template/download/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha1-+XYZXPPzR9DV9SSDVp/oAxzM6Ks= + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/lodash.templatesettings/download/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha1-5IExDwSdPPbUfpEq0JMTsVTw+zM= + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmmirror.com/lodash.truncate/download/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.npmmirror.com/lodash.uniq/download/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +"lodash@>=3.5 <5", lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5: + version "4.17.21" + resolved "https://registry.npmmirror.com/lodash/download/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/log-symbols/download/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha1-P727lbRoOsn8eFER55LlWNSr1QM= + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loglevel@^1.6.6: + version "1.8.0" + resolved "https://registry.npmmirror.com/loglevel/download/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114" + integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA== + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.npmmirror.com/longest-streak/download/longest-streak-2.0.4.tgz?cache=0&sync_timestamp=1636446222992&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Flongest-streak%2Fdownload%2Flongest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha1-uFmZV9pbXatk3uP+MW+ndFl9kOQ= + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/loose-envify/download/loose-envify-1.4.0.tgz?cache=0&sync_timestamp=1627566748051&other_urls=https%3A%2F%2Fregistry.nlark.com%2Floose-envify%2Fdownload%2Floose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8= + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/lower-case/download/lower-case-2.0.2.tgz?cache=0&sync_timestamp=1624607698082&other_urls=https%3A%2F%2Fregistry.nlark.com%2Flower-case%2Fdownload%2Flower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha1-b6I3xj29xKgsoP2ILkci3F5jTig= + dependencies: + tslib "^2.0.3" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/lru-cache/download/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA= + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/lru-cache/download/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ= + dependencies: + yallist "^4.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/make-dir/download/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU= + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/make-dir/download/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8= + dependencies: + semver "^6.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmmirror.com/makeerror/download/makeerror-1.0.12.tgz?cache=0&sync_timestamp=1635238315869&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmakeerror%2Fdownload%2Fmakeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha1-Pl3SB5qC6BLpg8xmEMSiyw6qgBo= + dependencies: + tmpl "1.0.5" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/mamacro/download/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha1-rSyVdhl8nxq/MI0Hh4Zb2XWj8+Q= + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.npmmirror.com/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo= + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/map-cache/download/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/map-obj/download/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/map-obj/download/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha1-kwT5Buk/qucIgNoQKp8d8OqLsFo= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/map-visit/download/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.npmmirror.com/mathml-tag-names/download/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha1-TdrdZzCOeAzxakdoWHjuJ7c2oKM= + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.npmmirror.com/md5.js/download/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.npmmirror.com/mdast-util-from-markdown/download/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha1-0e8spCvDd+ywRjqYeRDa6JvZoow= + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-to-markdown@^0.6.0: + version "0.6.5" + resolved "https://registry.npmmirror.com/mdast-util-to-markdown/download/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha1-sz9nyoINaebMUnqT1AOSSbUEvr4= + dependencies: + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/mdast-util-to-string/download/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha1-uM/mpxPhCRy1tyj8SIhaR2f4uXs= + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA= + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.npmmirror.com/mdn-data/download/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.npmmirror.com/mem/download/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg= + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memoize-one@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/memoize-one/download/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" + integrity sha1-ojh8WMA//yfKOQwxt2Snmt3z+QY= + +memoize-one@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/memoize-one/download/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" + integrity sha1-slkbhx7YKUiu5HJ9xqvO7qyMEEU= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/memory-fs/download/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.npmmirror.com/memory-fs/download/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha1-MkwBKIuIZSlm0WHbd4OHIIRajjw= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/meow/download/meow-9.0.0.tgz?cache=0&sync_timestamp=1637477490247&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmeow%2Fdownload%2Fmeow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha1-zZUQvFysne59A8c+4fmtlZ9Oo2Q= + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-deep@^3.0.2: + version "3.0.3" + resolved "https://registry.npmmirror.com/merge-deep/download/merge-deep-3.0.3.tgz#1a2b2ae926da8b2ae93a0ac15d90cd1922766003" + integrity sha1-Gisq6SbaiyrpOgrBXZDNGSJ2YAM= + dependencies: + arr-union "^3.1.0" + clone-deep "^0.2.4" + kind-of "^3.0.2" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/merge-stream/download/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= + +merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/merge2/download/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/microevent.ts/download/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha1-cLCbg/Q99RctAgWmMCW84Pc1f6A= + +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.npmmirror.com/micromark/download/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha1-0TQ2E47qgmOD6CJEnJpcUO5EZlo= + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.npmmirror.com/micromatch/download/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha1-cIWbyVyYQJUvNZoGij/En57PrCM= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.npmmirror.com/micromatch/download/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k= + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/miller-rabin/download/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha1-8IA1HIZbDcViqEYpZtqlNUPHik0= + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": + version "1.51.0" + resolved "https://registry.npmmirror.com/mime-db/download/mime-db-1.51.0.tgz?cache=0&sync_timestamp=1636426033377&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmime-db%2Fdownload%2Fmime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19: + version "2.1.34" + resolved "https://registry.npmmirror.com/mime-types/download/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmmirror.com/mime/download/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +mime@^2.4.4: + version "2.6.0" + resolved "https://registry.npmmirror.com/mime/download/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha1-oqaCqVzU0MsdYlfij4PafjWAA2c= + +mimic-fn@^2.0.0, mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/min-indent/download/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha1-pj9oFnOzBXH76LwlaGrnRu76mGk= + +mini-css-extract-plugin@0.9.0: + version "0.9.0" + resolved "https://registry.npmmirror.com/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" + integrity sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54= + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/minimalistic-assert/download/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc= + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/minimalistic-crypto-utils/download/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/minimatch/download/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM= + dependencies: + brace-expansion "^1.1.7" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/minimist-options/download/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha1-wGVXE8U6ii69d/+iR9NCxA8BBhk= + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/minipass-collect/download/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc= + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/minipass-flush/download/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M= + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.npmmirror.com/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw= + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.6" + resolved "https://registry.npmmirror.com/minipass/download/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" + integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== + dependencies: + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/mississippi/download/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha1-6goykfl+C16HdrNj1fChLZTGcCI= + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.npmmirror.com/mixin-deep/download/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha1-ESC0PcNZp4Xc5ltVuC4lfM9HlWY= + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/mixin-object/download/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.npmmirror.com/mkdirp/download/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8= + dependencies: + minimist "^1.2.5" + +mobx-react-lite@^2.2.0: + version "2.2.2" + resolved "https://registry.npmmirror.com/mobx-react-lite/download/mobx-react-lite-2.2.2.tgz#87c217dc72b4e47b22493daf155daf3759f868a6" + integrity sha1-h8IX3HK05HsiST2vFV2vN1n4aKY= + +mobx-react@^6.2.2: + version "6.3.1" + resolved "https://registry.npmmirror.com/mobx-react/download/mobx-react-6.3.1.tgz#204f9756e42e19d91cb6598837063b7e7de87c52" + integrity sha1-IE+XVuQuGdkctlmINwY7fn3ofFI= + dependencies: + mobx-react-lite "^2.2.0" + +mobx@^5.13.0: + version "5.15.7" + resolved "https://registry.npmmirror.com/mobx/download/mobx-5.15.7.tgz#b9a5f2b6251f5d96980d13c78e9b5d8d4ce22665" + integrity sha1-uaXytiUfXZaYDRPHjptdjUziJmU= + +moment@^2.24.0, moment@^2.25.3: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk= + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmmirror.com/ms/download/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha1-V0yBOM4dK1hh8LRFedut1gxmFbI= + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/multicast-dns-service-types/download/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.npmmirror.com/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1633354996608&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha1-oOx72QVcQoL3kMPIL04o2zsxsik= + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.npmmirror.com/mute-stream/download/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha1-FjDEKyJR/4HiooPelqVJfqkuXg0= + +nan@^2.12.1: + version "2.15.0" + resolved "https://registry.npmmirror.com/nan/download/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4= + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.npmmirror.com/nanomatch/download/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk= + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-request@^1.0.5: + version "1.1.0" + resolved "https://registry.npmmirror.com/native-request/download/native-request-1.1.0.tgz#acdb30fe2eefa3e1bc8c54b3a6852e9c5c0d3cb0" + integrity sha1-rNsw/i7vo+G8jFSzpoUunFwNPLA= + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/natural-compare/download/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.npmmirror.com/neo-async/download/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8= + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmmirror.com/nice-try/download/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y= + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/no-case/download/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha1-02H9XJgA9VhVGoNp/A3NRmK2Ek0= + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.npmmirror.com/node-forge/download/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M= + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmmirror.com/node-int64/download/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/node-libs-browser/download/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU= + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-notifier@^5.4.2: + version "5.4.5" + resolved "https://registry.npmmirror.com/node-notifier/download/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" + integrity sha1-DLwaKw9lhJO0Ald1oTrZOOlgke8= + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +node-releases@^1.1.52: + version "1.1.77" + resolved "https://registry.npmmirror.com/node-releases/download/node-releases-1.1.77.tgz?cache=0&sync_timestamp=1634807933091&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha1-ULDP7ehV3TdOdYW/Io/zTlfBwy4= + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/node-releases/download/node-releases-2.0.1.tgz?cache=0&sync_timestamp=1634807933091&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-releases%2Fdownload%2Fnode-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha1-PR05XyBPHy8ppUNYuftnh2WtL8U= + +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg= + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.npmmirror.com/normalize-package-data/download/normalize-package-data-3.0.3.tgz?cache=0&sync_timestamp=1629301872905&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha1-28w+LaWVCaCYNCKITNFy7v36Ul4= + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/normalize-path/download/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/normalize-path/download/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU= + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/normalize-range/download/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/normalize-selector/download/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/normalize-url/download/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha1-suHE3E98bVd0PfczpPWXjRhlBVk= + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&sync_timestamp=1633420566316&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/nth-check/download/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw= + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/nth-check/download/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha1-Lv4WL1w9oGoolZ+9PbddvuqfD8I= + dependencies: + boolbase "^1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.npmmirror.com/num2fraction/download/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/number-is-nan/download/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nwsapi@^2.0.7, nwsapi@^2.1.3: + version "2.2.0" + resolved "https://registry.npmmirror.com/nwsapi/download/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha1-IEh5qePQaP8qVROcLHcngGgaOLc= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.npmmirror.com/oauth-sign/download/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU= + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmmirror.com/object-assign/download/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/object-copy/download/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^2.0.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/object-hash/download/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5" + integrity sha1-WtUYWB7vxEO9djRyuP8unCwNVKU= + +object-inspect@^1.11.0: + version "1.12.0" + resolved "https://registry.npmmirror.com/object-inspect/download/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.npmmirror.com/object-is/download/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha1-ud7qpfx/GEag+uzc7sE45XePU6w= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/object-keys/download/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha1-HEfyct8nfzsdrwYWd9nILiMixg4= + +object-path@0.11.4: + version "0.11.4" + resolved "https://registry.npmmirror.com/object-path/download/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949" + integrity sha1-NwrnUvvzfePqcKhhwju6iRVpGUk= + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/object-visit/download/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/object.assign/download/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA= + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.0, object.entries@^1.1.1: + version "1.1.5" + resolved "https://registry.npmmirror.com/object.entries/download/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" + integrity sha1-4azdF8TeLNltWghIfPuduE2IGGE= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.fromentries@^2.0.2: + version "2.0.5" + resolved "https://registry.npmmirror.com/object.fromentries/download/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" + integrity sha1-ezeyBRCcIedB5gVyf+iwrV+gglE= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0, object.getownpropertydescriptors@^2.1.1: + version "2.1.3" + resolved "https://registry.npmmirror.com/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha1-siPPOOF/77l6Y8EMkd9yzLOG354= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/object.pick/download/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.5" + resolved "https://registry.npmmirror.com/object.values/download/object.values-1.1.5.tgz?cache=0&sync_timestamp=1633327208193&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fobject.values%2Fdownload%2Fobject.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" + integrity sha1-lZ9j486e8QhyAzMIITHkpFm3Fqw= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/obuf/download/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4= + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/on-headers/download/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha1-dysK5qqlJcOZ5Imt+tkMQD6zwo8= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/once/download/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/onetime/download/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4= + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.2: + version "7.4.2" + resolved "https://registry.npmmirror.com/open/download/open-7.4.2.tgz?cache=0&sync_timestamp=1635049636729&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fopen%2Fdownload%2Fopen-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha1-uBR+Jtzz5CYxbHMAif1x7dKcIyE= + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/opn/download/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha1-/HFk+rVtI1kExRw7J9pnWMo7m/w= + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@5.0.3: + version "5.0.3" + resolved "https://registry.npmmirror.com/optimize-css-assets-webpack-plugin/download/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" + integrity sha1-4vHU2UrYwK+JZ+vXzxONyx7xRXI= + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.1, optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.npmmirror.com/optionator/download/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU= + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +original@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/original/download/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8= + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/os-browserify/download/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/os-locale/download/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo= + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-defer/download/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-each-series/download/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-finally/download/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/p-is-promise/download/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4= + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/p-limit/download/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg= + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.2: + version "2.3.0" + resolved "https://registry.npmmirror.com/p-limit/download/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE= + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/p-locate/download/p-locate-2.0.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ= + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1629892708584&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha1-o0KLtwiLOmApL2aRkni3wpetTwc= + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/p-map/download/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha1-MQko/u+cnsxltosXaTAYpmXOoXU= + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/p-map/download/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha1-1wTZr4orpoTiYA2aIVmD1BQal50= + dependencies: + aggregate-error "^3.0.0" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-reduce/download/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/p-retry/download/p-retry-3.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fp-retry%2Fdownload%2Fp-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha1-MWtMiJPiyNwc+okfQGxLQivr8yg= + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/p-try/download/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/p-try/download/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha1-yyhoVA4xPWHeWPr741zpAE1VQOY= + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.npmmirror.com/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1627560187062&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpako%2Fdownload%2Fpako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8= + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/parallel-transform/download/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha1-kEnKN9bLIYLDsdLHIL6U0UpYFPw= + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.npmmirror.com/param-case/download/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha1-fRf+SqEr3jTUp32RrPtiGcqtAcU= + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/parent-module/download/parent-module-1.0.1.tgz?cache=0&sync_timestamp=1633337488003&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fparent-module%2Fdownload%2Fparent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI= + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.6: + version "5.1.6" + resolved "https://registry.npmmirror.com/parse-asn1/download/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ= + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/parse-entities/download/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha1-U8brW5MUofTsmfoP33zgHs2gy+g= + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/parse-json/download/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/parse-json/download/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/parse-json/download/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80= + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/parse5/download/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha1-bXhlbj2o14tOwLkG98CO8d/j9gg= + +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/parse5/download/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha1-xZNByXI/QUxFKXVWTHwApo1YrNI= + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.npmmirror.com/pascal-case/download/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha1-tI4O8rmOIF58Ha50fQsVCCN2YOs= + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/pascalcase/download/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/path-browserify/download/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha1-5sTd1+06onxoogzE5Q4aTug7vEo= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.npmmirror.com/path-dirname/download/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/path-exists/download/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/path-exists/download/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-exists/download/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha1-UTvb4tO5XXdi6METfvoZXGxhtbM= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/path-is-absolute/download/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/path-is-inside/download/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/path-key/download/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/path-key/download/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U= + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmmirror.com/path-parse/download/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU= + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/path-type/download/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/path-type/download/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha1-zvMdyOCho7sNEFwM2Xzzv0f0428= + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/path-type/download/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.npmmirror.com/pbkdf2/download/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha1-3YIqoIh1gOUvGgOdw+2hCO+uMHU= + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/performance-now/download/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/picocolors/download/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha1-VwZw95NkaFHRuhNZlpYqutWHhZ8= + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/picocolors/download/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha1-y1vcdP8/UYkiNur3nWi8RFZKuBw= + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.npmmirror.com/picomatch/download/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/pify/download/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pify/download/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/pify/download/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE= + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/pinkie-promise/download/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.npmmirror.com/pinkie/download/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pirates@^4.0.1: + version "4.0.5" + resolved "https://registry.npmmirror.com/pirates/download/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-1.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-3.0.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM= + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/pkg-dir/download/pkg-dir-4.2.0.tgz?cache=0&sync_timestamp=1633498116014&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-dir%2Fdownload%2Fpkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM= + dependencies: + find-up "^4.0.0" + +pkg-up@3.1.0, pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/pkg-up/download/pkg-up-3.1.0.tgz?cache=0&sync_timestamp=1636035118070&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fpkg-up%2Fdownload%2Fpkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha1-EA7CNcwVDk/UJRlBJZaihRKg3vU= + dependencies: + find-up "^3.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/pn/download/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs= + +pnp-webpack-plugin@1.6.4: + version "1.6.4" + resolved "https://registry.npmmirror.com/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha1-yXEaxNxIpoXauvyG+Lbdn434QUk= + dependencies: + ts-pnp "^1.1.6" + +popmotion@9.0.0-rc.20: + version "9.0.0-rc.20" + resolved "https://registry.npmmirror.com/popmotion/download/popmotion-9.0.0-rc.20.tgz#f3550042ae31957b5416793ae8723200951ad39d" + integrity sha1-81UAQq4xlXtUFnk66HIyAJUa050= + dependencies: + framesync "^4.1.0" + hey-listen "^1.0.8" + style-value-types "^3.1.9" + tslib "^1.10.0" + +popper.js@^1.14.4: + version "1.16.1" + resolved "https://registry.npmmirror.com/popper.js/download/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + +portfinder@^1.0.25: + version "1.0.28" + resolved "https://registry.npmmirror.com/portfinder/download/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g= + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/posix-character-classes/download/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-attribute-case-insensitive/download/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880" + integrity sha1-2T5GtQRYnpSscnewRjImxoBBqIA= + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^6.0.2" + +postcss-browser-comments@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/postcss-browser-comments/download/postcss-browser-comments-3.0.0.tgz#1248d2d935fb72053c8e1f61a84a57292d9f65e9" + integrity sha1-EkjS2TX7cgU8jh9hqEpXKS2fZek= + dependencies: + postcss "^7" + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.npmmirror.com/postcss-calc/download/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4= + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/postcss-color-functional-notation/download/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha1-Xv03qI+6vrAKKWbR5T2Yztk/dOA= + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/postcss-color-gray/download/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha1-Uyox65CfjaiYzv/ilv3B+GS+hUc= + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.npmmirror.com/postcss-color-hex-alpha/download/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha1-qNnKTDnUl8lmHjdLnFGJnvD4c4g= + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/postcss-color-mod-function/download/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha1-gWuhRawRzDy2uqkFp1pJ+QPk0x0= + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-color-rebeccapurple/download/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha1-x6ib6HK7dORbHjAiv+V0iCPm3nc= + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/postcss-colormin/download/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha1-rgYLzpPteUrHEmTwgTLVUJVr04E= + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.npmmirror.com/postcss-custom-media/download/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha1-//0T/+/61zYhvl84cHaiiwApTgw= + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.npmmirror.com/postcss-custom-properties/download/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha1-LWF3LW6S8i9eDVJgLfj65G+jDZc= + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.npmmirror.com/postcss-custom-selectors/download/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha1-ZIWMbrLs/y+0HQsoyd17PbTef7o= + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/postcss-dir-pseudo-class/download/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha1-bjpBd9Dts6vMhf22+7HCbauuq6I= + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-discard-comments/download/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha1-H7q9LCRr/2qq15l7KwkY9NevQDM= + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha1-P+EzzTyCKC5VD8myORdqkge3hOs= + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-discard-empty/download/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha1-yMlR6fc+2UKAGUWERKAq2Qu592U= + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-discard-overridden/download/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha1-ZSrvipZybwKfXj4AFG7npOdV/1c= + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/postcss-double-position-gradients/download/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha1-/JJ9Uv3ciWyzooEuvF3xR+EQUi4= + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/postcss-env-function/download/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha1-Dz49PFfwlKksK69LYkHwsNpTZdc= + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-flexbugs-fixes@4.1.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/postcss-flexbugs-fixes/download/postcss-flexbugs-fixes-4.1.0.tgz#e094a9df1783e2200b7b19f875dcad3b3aff8b20" + integrity sha1-4JSp3xeD4iALexn4ddytOzr/iyA= + dependencies: + postcss "^7.0.0" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/postcss-focus-visible/download/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha1-R30QcROt5gJLFBKDF63ivR4XBG4= + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/postcss-focus-within/download/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha1-djuHiFls7puHTJmSAc3egGWe9oA= + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-font-variant/download/postcss-font-variant-4.0.1.tgz#42d4c0ab30894f60f98b17561eb5c0321f502641" + integrity sha1-QtTAqzCJT2D5ixdWHrXAMh9QJkE= + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/postcss-gap-properties/download/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha1-QxwZKrPtlqPD0J8v9hWWD5AsFxU= + dependencies: + postcss "^7.0.2" + +postcss-html@^0.36.0: + version "0.36.0" + resolved "https://registry.npmmirror.com/postcss-html/download/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" + integrity sha1-tAkT+U6qzCRT/TChMnrW7h+IsgQ= + dependencies: + htmlparser2 "^3.10.0" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/postcss-image-set-function/download/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha1-KJIKLymUW+1MMZjX32SW1BDT8og= + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.4" + resolved "https://registry.npmmirror.com/postcss-initial/download/postcss-initial-3.0.4.tgz#9d32069a10531fe2ecafa0b6ac750ee0bc7efc53" + integrity sha1-nTIGmhBTH+Lsr6C2rHUO4Lx+/FM= + dependencies: + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/postcss-lab-function/download/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha1-u1GmhWzRIomrSuINseOCHvE9fS4= + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-less@^3.1.4: + version "3.1.4" + resolved "https://registry.npmmirror.com/postcss-less/download/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" + integrity sha1-Np9YZCtZKO+Jj/vBpuk8lYMExa0= + dependencies: + postcss "^7.0.14" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.npmmirror.com/postcss-load-config/download/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha1-xepQTyxK7zPHNZo03jVzdyrXUCo= + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/postcss-loader/download/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0= + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/postcss-logical/download/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha1-JJXQ+LgunyYnJfdflAGzTntF1bU= + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/postcss-media-minmax/download/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha1-t1u2y8IXyKxJQz4S8iBIgUpPXtU= + dependencies: + postcss "^7.0.2" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.npmmirror.com/postcss-media-query-parser/download/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.npmmirror.com/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ= + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha1-NivqT/Wh+Y5AdacTxsslrv75plA= + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE= + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-minify-params/download/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha1-a5zvAwwR41Jh+V9hjJADbWgNuHQ= + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g= + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha1-gYcZoa4doyX5gyRGsBE27rSTzX4= + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.npmmirror.com/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A= + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^2.1.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha1-OFyuATzHdD9afXYC0Qc6iequYu4= + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA= + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.npmmirror.com/postcss-nesting/download/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha1-tQrXt/AXPlteOIDDUBNEcD4EwFI= + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-normalize-charset/download/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha1-izWt067oOhNrBHHg1ZvlilAoXdQ= + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-normalize-display-values/download/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha1-Db4EpM6QY9RmftK+R2u4MMglk1o= + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8= + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-normalize-repeat-style/download/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha1-xOu8KJ85kaAo1EdRy90RkYsXkQw= + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-normalize-string/download/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha1-zUTECrB6DHo23F6Zqs4eyk7CaQw= + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-normalize-timing-functions/download/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha1-jgCcoqOUnNr4rSPmtquZy159KNk= + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-normalize-unicode/download/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha1-hBvUj9zzAZrUuqdJOj02O1KuHPs= + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-normalize-url/download/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha1-EOQ3+GvHx+WPe5ZS7YeNqqlfquE= + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-normalize-whitespace/download/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha1-vx1AcP5Pzqh9E0joJdjMDF+qfYI= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize@8.0.1: + version "8.0.1" + resolved "https://registry.npmmirror.com/postcss-normalize/download/postcss-normalize-8.0.1.tgz#90e80a7763d7fdf2da6f2f0f82be832ce4f66776" + integrity sha1-kOgKd2PX/fLaby8Pgr6DLOT2Z3Y= + dependencies: + "@csstools/normalize.css" "^10.1.0" + browserslist "^4.6.2" + postcss "^7.0.17" + postcss-browser-comments "^3.0.0" + sanitize.css "^10.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.npmmirror.com/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4= + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/postcss-overflow-shorthand/download/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha1-MezzUOnG9t3CUKePDD4RHzLdTDA= + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/postcss-page-break/download/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha1-rdUtDgpSjKvmr+6LRuKrsnffRr8= + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-place/download/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha1-6fOdM9LcWE5G7h20Wtt3yp0dzGI= + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@6.7.0: + version "6.7.0" + resolved "https://registry.npmmirror.com/postcss-preset-env/download/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha1-w03az4+QI4OzWtHgMPF49M3xGKU= + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/postcss-pseudo-class-any-link/download/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha1-LtPu05OzcCh53sSocDKyENrrBNE= + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha1-f9QuvqXpyBRgljniwuhK4nC6SN8= + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha1-F++kBerMbge+NBSlyi0QdGgdTik= + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/postcss-replace-overflow-wrap/download/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha1-YbNg/9rtyoTHyRjSsPDQ6lWasBw= + dependencies: + postcss "^7.0.2" + +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/postcss-resolve-nested-selector/download/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + +postcss-safe-parser@4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-safe-parser/download/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" + integrity sha1-h1bZ5MNv3OLHKwkbvIyhdqsfzeo= + dependencies: + postcss "^7.0.0" + +postcss-safe-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/postcss-safe-parser/download/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha1-ptTkjw832ffBGypYG/APi6SHC5Y= + dependencies: + postcss "^7.0.26" + +postcss-sass@^0.4.4: + version "0.4.4" + resolved "https://registry.npmmirror.com/postcss-sass/download/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3" + integrity sha1-kfDzRHtFzjcyJ6mLYfjY8HhShaM= + dependencies: + gonzales-pe "^4.3.0" + postcss "^7.0.21" + +postcss-scss@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/postcss-scss/download/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383" + integrity sha1-7Dp1+imlXgFrkL8yaQJsU8HSs4M= + dependencies: + postcss "^7.0.6" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/postcss-selector-matches/download/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha1-ccgkj5F7osyTA3yWN+4JxkQ2/P8= + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-selector-not/download/postcss-selector-not-4.0.1.tgz#263016eef1cf219e0ade9a913780fc1f48204cbf" + integrity sha1-JjAW7vHPIZ4K3pqRN4D8H0ggTL8= + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA= + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha1-JJBENWaXsztk8aj3yAki3d7nGVw= + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.5: + version "6.0.9" + resolved "https://registry.npmmirror.com/postcss-selector-parser/download/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/postcss-svgo/download/postcss-svgo-4.0.3.tgz#343a2cdbac9505d416243d496f724f38894c941e" + integrity sha1-NDos26yVBdQWJD1Jb3JPOIlMlB4= + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-syntax@^0.36.2: + version "0.36.2" + resolved "https://registry.npmmirror.com/postcss-syntax/download/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" + integrity sha1-8IV4x9lYNFdOVZOoLfv6ivrjtRw= + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/postcss-unique-selectors/download/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha1-lEaRHzKJv9ZMbWgPBzwDsfnuS6w= + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0: + version "3.3.1" + resolved "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha1-n/giVH4okyE88cMO+lGsX9G6goE= + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/postcss-value-parser/download/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/postcss-values-parser/download/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha1-2otHLZAdoeIFtHvcmGN7np5VDl8= + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@7.0.21: + version "7.0.21" + resolved "https://registry.npmmirror.com/postcss/download/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17" + integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.39" + resolved "https://registry.npmmirror.com/postcss/download/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" + integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== + dependencies: + picocolors "^0.2.1" + source-map "^0.6.1" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/prelude-ls/download/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/prepend-http/download/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prettier@^2.0.5: + version "2.5.1" + resolved "https://registry.npmmirror.com/prettier/download/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + +pretty-bytes@^5.1.0: + version "5.6.0" + resolved "https://registry.npmmirror.com/pretty-bytes/download/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha1-NWJW9kOAR3PIL2RyP+eMksYr6us= + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.npmmirror.com/pretty-error/download/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y= + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.npmmirror.com/pretty-format/download/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha1-EvrDGzcBmk7qPBGqmpWet2KKp8k= + dependencies: + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" + +pretty-format@^27.4.6: + version "27.4.6" + resolved "https://registry.npmmirror.com/pretty-format/download/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" + integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/process-nextick-args/download/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha1-eCDZsWEgzFXKmud5JoCufbptf+I= + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmmirror.com/process/download/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/progress/download/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npmmirror.com/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= + dependencies: + asap "~2.0.3" + +promise@^8.0.3: + version "8.1.0" + resolved "https://registry.npmmirror.com/promise/download/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha1-aXwlw9/nQ13Xn81Yw4oTWIjq8F4= + dependencies: + asap "~2.0.6" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmmirror.com/prompts/download/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha1-e1fnOzpIAprRDr1E90sBcipMsGk= + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.npmmirror.com/prop-types/download/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/prr/download/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.npmmirror.com/psl/download/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/public-encrypt/download/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA= + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/pump/download/pump-2.0.1.tgz?cache=0&sync_timestamp=1624607960506&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpump%2Fdownload%2Fpump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/pump/download/pump-3.0.0.tgz?cache=0&sync_timestamp=1624607960506&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fpump%2Fdownload%2Fpump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ= + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.npmmirror.com/pumpify/download/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4= + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmmirror.com/punycode/download/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.npmmirror.com/punycode/download/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/pure-color/download/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.npmmirror.com/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.npmmirror.com/qs/download/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.npmmirror.com/query-string/download/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q== + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.npmmirror.com/querystring-es3/download/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/querystring/download/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/querystringify/download/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y= + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmmirror.com/queue-microtask/download/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.npmmirror.com/quick-lru/download/quick-lru-4.0.1.tgz?cache=0&sync_timestamp=1637478663596&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fquick-lru%2Fdownload%2Fquick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha1-W4h48ROlgheEjGSCAmxz4bpXcn8= + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.npmmirror.com/raf/download/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk= + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/randombytes/download/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.npmmirror.com/randomfill/download/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha1-ySGW/IarQr6YPxvzF3giSTHWFFg= + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc-align@^4.0.0: + version "4.0.11" + resolved "https://registry.npmmirror.com/rc-align/download/rc-align-4.0.11.tgz?cache=0&sync_timestamp=1628678366435&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-align%2Fdownload%2Frc-align-4.0.11.tgz#8198c62db266bc1b8ef05e56c13275bf72628a5e" + integrity sha1-gZjGLbJmvBuO8F5WwTJ1v3Jiil4= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + dom-align "^1.7.0" + lodash "^4.17.21" + rc-util "^5.3.0" + resize-observer-polyfill "^1.5.1" + +rc-cascader@~3.2.1: + version "3.2.1" + resolved "https://registry.npmmirror.com/rc-cascader/download/rc-cascader-3.2.1.tgz#fc928d67d96c3d9f358263e4a9127bcf4257cc6b" + integrity sha512-Raxam9tFzBL4TCgHoyVcf7+Q2KSFneUk3FZXi9w1tfxEihLlezSH0oCNMjHJN8hxWwwx9ZbI9UzWTfFImjXc0Q== + dependencies: + "@babel/runtime" "^7.12.5" + array-tree-filter "^2.1.0" + classnames "^2.3.1" + rc-select "~14.0.0-alpha.23" + rc-tree "~5.4.3" + rc-util "^5.6.1" + +rc-checkbox@~2.3.0: + version "2.3.2" + resolved "https://registry.npmmirror.com/rc-checkbox/download/rc-checkbox-2.3.2.tgz#f91b3678c7edb2baa8121c9483c664fa6f0aefc1" + integrity sha1-+Rs2eMftsrqoEhyUg8Zk+m8K78E= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + +rc-collapse@~3.1.0: + version "3.1.2" + resolved "https://registry.npmmirror.com/rc-collapse/download/rc-collapse-3.1.2.tgz#76028a811b845d03d9460ccc409c7ea8ad09db14" + integrity sha1-dgKKgRuEXQPZRgzMQJx+qK0J2xQ= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.3.4" + rc-util "^5.2.1" + shallowequal "^1.1.0" + +rc-dialog@~8.6.0: + version "8.6.0" + resolved "https://registry.npmmirror.com/rc-dialog/download/rc-dialog-8.6.0.tgz?cache=0&sync_timestamp=1627272166293&other_urls=https%3A%2F%2Fregistry.nlark.com%2Frc-dialog%2Fdownload%2Frc-dialog-8.6.0.tgz#3b228dac085de5eed8c6237f31162104687442e7" + integrity sha1-OyKNrAhd5e7YxiN/MRYhBGh0Quc= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-motion "^2.3.0" + rc-util "^5.6.1" + +rc-drawer@~4.4.2: + version "4.4.3" + resolved "https://registry.npmmirror.com/rc-drawer/download/rc-drawer-4.4.3.tgz?cache=0&sync_timestamp=1637134392366&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Frc-drawer%2Fdownload%2Frc-drawer-4.4.3.tgz#2094937a844e55dc9644236a2d9fba79c344e321" + integrity sha512-FYztwRs3uXnFOIf1hLvFxIQP9MiZJA+0w+Os8dfDh/90X7z/HqP/Yg+noLCIeHEbKln1Tqelv8ymCAN24zPcfQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-util "^5.7.0" + +rc-dropdown@^3.2.0, rc-dropdown@~3.2.0: + version "3.2.2" + resolved "https://registry.npmmirror.com/rc-dropdown/download/rc-dropdown-3.2.2.tgz#0fee9a66f100d686ddaa8d09717d090f72e1ce29" + integrity sha512-oA9VYYg+jQaPRdFoYFfBn5EAQk2NlL6H0vR2v6JG/8i4HEfUq8p1TTt6HyQ/dGxLe8lpnK+nM7WCjgZT/cpSRQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-trigger "^5.0.4" + +rc-field-form@~1.22.0-2: + version "1.22.1" + resolved "https://registry.npmmirror.com/rc-field-form/download/rc-field-form-1.22.1.tgz#0bd2f4e730ff2f071529d00bef28e062362890f5" + integrity sha512-LweU7nBeqmC5r3HDUjRprcOXXobHXp/TGIxD7ppBq5FX6Iptt3ibdpRVg4RSyNulBNGHOuknHlRcguuIpvVMVg== + dependencies: + "@babel/runtime" "^7.8.4" + async-validator "^4.0.2" + rc-util "^5.8.0" + +rc-image@~5.2.5: + version "5.2.5" + resolved "https://registry.npmmirror.com/rc-image/download/rc-image-5.2.5.tgz#44e6ffc842626827960e7ab72e1c0d6f3a8ce440" + integrity sha1-ROb/yEJiaCeWDnq3LhwNbzqM5EA= + dependencies: + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-dialog "~8.6.0" + rc-util "^5.0.6" + +rc-input-number@~7.3.0: + version "7.3.4" + resolved "https://registry.npmmirror.com/rc-input-number/download/rc-input-number-7.3.4.tgz#674aea98260250287d36e330a7e065b174486e9d" + integrity sha512-W9uqSzuvJUnz8H8vsVY4kx+yK51SsAxNTwr8SNH4G3XqQNocLVmKIibKFRjocnYX1RDHMND9FFbgj2h7E7nvGA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.9.8" + +rc-mentions@~1.6.1: + version "1.6.1" + resolved "https://registry.npmmirror.com/rc-mentions/download/rc-mentions-1.6.1.tgz#46035027d64aa33ef840ba0fbd411871e34617ae" + integrity sha1-RgNQJ9ZKoz74QLoPvUEYceNGF64= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-menu "^9.0.0" + rc-textarea "^0.3.0" + rc-trigger "^5.0.4" + rc-util "^5.0.1" + +rc-menu@^9.0.0: + version "9.3.1" + resolved "https://registry.npmmirror.com/rc-menu/download/rc-menu-9.3.1.tgz#a0e502938d2b7467ea8d343ae00c4af6019ba412" + integrity sha512-D9ZHlwtTpch0v15LXt7PRbAl+FCxXNEllly9fl1GhLzz52iTL2NVqzofecV5Yv3ekLUOojg+gkykv4elLNBKWg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.4.3" + rc-overflow "^1.2.0" + rc-trigger "^5.1.2" + rc-util "^5.12.0" + shallowequal "^1.1.0" + +rc-menu@~9.2.1: + version "9.2.1" + resolved "https://registry.npmmirror.com/rc-menu/download/rc-menu-9.2.1.tgz#6fbe47f4846363bb81a5a21f0960026c3ada497a" + integrity sha512-UbEtn3rflJ8zS+etYGTVQuzy7Fm+yWXR5c0Rl6ecNTS/dPknRyWAyhJcbeR0Hu1+RdQT+0VCqrUPrgKnm4iY+w== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.4.3" + rc-overflow "^1.2.0" + rc-trigger "^5.1.2" + rc-util "^5.12.0" + shallowequal "^1.1.0" + +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.2.0, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4: + version "2.4.4" + resolved "https://registry.npmmirror.com/rc-motion/download/rc-motion-2.4.4.tgz#e995d5fa24fc93065c24f714857cf2677d655bb0" + integrity sha1-6ZXV+iT8kwZcJPcUhXzyZ31lW7A= + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-util "^5.2.1" + +rc-notification@~4.5.7: + version "4.5.7" + resolved "https://registry.npmmirror.com/rc-notification/download/rc-notification-4.5.7.tgz#265e6e6a0c1a0fac63d6abd4d832eb8ff31522f1" + integrity sha1-Jl5uagwaD6xj1qvU2DLrj/MVIvE= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.2.0" + rc-util "^5.0.1" + +rc-overflow@^1.0.0, rc-overflow@^1.2.0: + version "1.2.2" + resolved "https://registry.npmmirror.com/rc-overflow/download/rc-overflow-1.2.2.tgz#95b0222016c0cdbdc0db85f569c262e7706a5f22" + integrity sha1-lbAiIBbAzb3A24X1acJi53BqXyI= + dependencies: + "@babel/runtime" "^7.11.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.5.1" + +rc-pagination@~3.1.9: + version "3.1.15" + resolved "https://registry.npmmirror.com/rc-pagination/download/rc-pagination-3.1.15.tgz#e05eddf4c15717a5858290bed0857e27e2f957ff" + integrity sha512-4L3fot8g4E+PjWEgoVGX0noFCg+8ZFZmeLH4vsnZpB3O2T2zThtakjNxG+YvSaYtyMVT4B+GLayjKrKbXQpdAg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + +rc-picker@~2.5.17: + version "2.5.19" + resolved "https://registry.npmmirror.com/rc-picker/download/rc-picker-2.5.19.tgz#73d07546fac3992f0bfabf2789654acada39e46f" + integrity sha1-c9B1RvrDmS8L+r8niWVKyto55G8= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + date-fns "2.x" + dayjs "1.x" + moment "^2.24.0" + rc-trigger "^5.0.4" + rc-util "^5.4.0" + shallowequal "^1.1.0" + +rc-progress@~3.2.1: + version "3.2.4" + resolved "https://registry.npmmirror.com/rc-progress/download/rc-progress-3.2.4.tgz#4036acdae2566438545bc4df2203248babaf7549" + integrity sha512-M9WWutRaoVkPUPIrTpRIDpX0SPSrVHzxHdCRCbeoBFrd9UFWTYNWRlHsruJM5FH1AZI+BwB4wOJUNNylg/uFSw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.6" + rc-util "^5.16.1" + +rc-rate@~2.9.0: + version "2.9.1" + resolved "https://registry.npmmirror.com/rc-rate/download/rc-rate-2.9.1.tgz#e43cb95c4eb90a2c1e0b16ec6614d8c43530a731" + integrity sha1-5Dy5XE65CiweCxbsZhTYxDUwpzE= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.0.1" + +rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/rc-resize-observer/download/rc-resize-observer-1.2.0.tgz#9f46052f81cdf03498be35144cb7c53fd282c4c7" + integrity sha512-6W+UzT3PyDM0wVCEHfoW3qTHPTvbdSgiA43buiy8PzmeMnfgnDeb9NjdimMXMl3/TcrvvWl5RRVdp+NqcR47pQ== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-util "^5.15.0" + resize-observer-polyfill "^1.5.1" + +rc-select@~14.0.0-alpha.15, rc-select@~14.0.0-alpha.23, rc-select@~14.0.0-alpha.8: + version "14.0.0-alpha.25" + resolved "https://registry.npmmirror.com/rc-select/download/rc-select-14.0.0-alpha.25.tgz#9e6ca83b090e020a730fdfdab07c1050549426e4" + integrity sha512-U9AMzXsOCCdtn96YIZdUrYbxk+5u6uWUCaYH2129X3FTjQITqAjEPYHfPcxU/G7+lwiD0pIaU95W0NMkg+26qw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-overflow "^1.0.0" + rc-trigger "^5.0.4" + rc-util "^5.16.1" + rc-virtual-list "^3.2.0" + +rc-slider@~9.7.4: + version "9.7.5" + resolved "https://registry.npmmirror.com/rc-slider/download/rc-slider-9.7.5.tgz#193141c68e99b1dc3b746daeb6bf852946f5b7f4" + integrity sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-tooltip "^5.0.1" + rc-util "^5.16.1" + shallowequal "^1.1.0" + +rc-steps@~4.1.0: + version "4.1.4" + resolved "https://registry.npmmirror.com/rc-steps/download/rc-steps-4.1.4.tgz#0ba82db202d59ca52d0693dc9880dd145b19dc23" + integrity sha1-C6gtsgLVnKUtBpPcmIDdFFsZ3CM= + dependencies: + "@babel/runtime" "^7.10.2" + classnames "^2.2.3" + rc-util "^5.0.1" + +rc-switch@~3.2.0: + version "3.2.2" + resolved "https://registry.npmmirror.com/rc-switch/download/rc-switch-3.2.2.tgz#d001f77f12664d52595b4f6fb425dd9e66fba8e8" + integrity sha1-0AH3fxJmTVJZW09vtCXdnmb7qOg= + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-util "^5.0.1" + +rc-table@~7.22.2: + version "7.22.2" + resolved "https://registry.npmmirror.com/rc-table/download/rc-table-7.22.2.tgz#218f3f53bc91660560a344c8290a91a841a60b0a" + integrity sha512-Ng2gNkGi6ybl6dzneRn2H4Gp8XhIbRa5rXQ7ZhZcgWVmfVMok70UHGPXcf68tXW6O0/qckTf/eOVsoviSvK4sw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-resize-observer "^1.1.0" + rc-util "^5.14.0" + shallowequal "^1.1.0" + +rc-tabs@~11.10.0: + version "11.10.5" + resolved "https://registry.npmmirror.com/rc-tabs/download/rc-tabs-11.10.5.tgz#53bbb642d04b307f8ce86e318ab99d519507b29b" + integrity sha512-DDuUdV6b9zGRYLtjI5hyejWLKoz1QiLWNgMeBzc3aMeQylZFhTYnFGdDc6HRqj5IYearNTsFPVSA+6VIT8g5cg== + dependencies: + "@babel/runtime" "^7.11.2" + classnames "2.x" + rc-dropdown "^3.2.0" + rc-menu "^9.0.0" + rc-resize-observer "^1.0.0" + rc-util "^5.5.0" + +rc-textarea@^0.3.0, rc-textarea@~0.3.0: + version "0.3.7" + resolved "https://registry.npmmirror.com/rc-textarea/download/rc-textarea-0.3.7.tgz#987142891efdedb774883c07e2f51b318fde5a11" + integrity sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.1" + rc-resize-observer "^1.0.0" + rc-util "^5.7.0" + shallowequal "^1.1.0" + +rc-tooltip@^5.0.1, rc-tooltip@~5.1.1: + version "5.1.1" + resolved "https://registry.npmmirror.com/rc-tooltip/download/rc-tooltip-5.1.1.tgz#94178ed162d0252bc4993b725f5dc2ac0fccf154" + integrity sha1-lBeO0WLQJSvEmTtyX13CrA/M8VQ= + dependencies: + "@babel/runtime" "^7.11.2" + rc-trigger "^5.0.0" + +rc-tree-select@~5.1.1: + version "5.1.2" + resolved "https://registry.npmmirror.com/rc-tree-select/download/rc-tree-select-5.1.2.tgz#0dfe12f01b9b0dc9ce658b96501692d4421b8366" + integrity sha512-sTulyQZB1SgF2HzAR49i4vjMNvV/tfPxCTc+qNuWOwaAtSm2bwGH6/wfi3k3Dw2/5PPOGpRRpgCMltoP9aG0+w== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-select "~14.0.0-alpha.8" + rc-tree "~5.4.3" + rc-util "^5.16.1" + +rc-tree@~5.4.3: + version "5.4.3" + resolved "https://registry.npmmirror.com/rc-tree/download/rc-tree-5.4.3.tgz#8674644964e17e5ab9b111c5aa18676f673e7bd0" + integrity sha512-WAHV8FkBerulj9J/+61+Qn0TD/Zo37PrDG8/45WomzGTYavxFMur9YguKjQj/J+NxjVJzrJL3lvdSZsumfdbiA== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "2.x" + rc-motion "^2.0.1" + rc-util "^5.16.1" + rc-virtual-list "^3.4.1" + +rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10: + version "5.2.10" + resolved "https://registry.npmmirror.com/rc-trigger/download/rc-trigger-5.2.10.tgz#8a0057a940b1b9027eaa33beec8a6ecd85cce2b1" + integrity sha1-igBXqUCxuQJ+qjO+7IpuzYXM4rE= + dependencies: + "@babel/runtime" "^7.11.2" + classnames "^2.2.6" + rc-align "^4.0.0" + rc-motion "^2.0.0" + rc-util "^5.5.0" + +rc-upload@~4.3.0: + version "4.3.3" + resolved "https://registry.npmmirror.com/rc-upload/download/rc-upload-4.3.3.tgz#e237aa525e5313fa16f4d04d27f53c2f0e157bb8" + integrity sha512-YoJ0phCRenMj1nzwalXzciKZ9/FAaCrFu84dS5pphwucTC8GUWClcDID/WWNGsLFcM97NqIboDqrV82rVRhW/w== + dependencies: + "@babel/runtime" "^7.10.1" + classnames "^2.2.5" + rc-util "^5.2.0" + +rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.0.7, rc-util@^5.12.0, rc-util@^5.14.0, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.5.1, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4, rc-util@^5.9.8: + version "5.17.0" + resolved "https://registry.npmmirror.com/rc-util/download/rc-util-5.17.0.tgz#6b0788038075c3d5c215541539573a4a03827070" + integrity sha512-HWuTIKzBeZQQ7IBqdokE0wMp/xx39/KfUJ0gcquBigoldDCrf3YBcWFHrrQlJG7sI82Wg8mwp1uAKV3zMGfAgg== + dependencies: + "@babel/runtime" "^7.12.5" + react-is "^16.12.0" + shallowequal "^1.1.0" + +rc-virtual-list@^3.2.0, rc-virtual-list@^3.4.1: + version "3.4.2" + resolved "https://registry.npmmirror.com/rc-virtual-list/download/rc-virtual-list-3.4.2.tgz#1078327aa7230b5e456d679ed2ce99f3c036ebd1" + integrity sha1-EHgyeqcjC15FbWee0s6Z88A269E= + dependencies: + classnames "^2.2.6" + rc-resize-observer "^1.0.0" + rc-util "^5.0.7" + +react-app-polyfill@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/react-app-polyfill/download/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" + integrity sha1-iQ+NfyhCzmBz8DCxF96RMKXzhfA= + dependencies: + core-js "^3.5.0" + object-assign "^4.1.1" + promise "^8.0.3" + raf "^3.4.1" + regenerator-runtime "^0.13.3" + whatwg-fetch "^3.0.0" + +react-app-rewired@^2.1.6: + version "2.1.11" + resolved "https://registry.npmmirror.com/react-app-rewired/download/react-app-rewired-2.1.11.tgz#ad5781e3ef5e506be935898bb7642f7f9d50b61a" + integrity sha512-zRIqJUPsCoPnfYtea3xgPbKR42vx0NoH5oo8R8FELXqzkjJHa39V6zD8CAdkLJoYL8V3JScWHAfKMZOzi1Ydmw== + dependencies: + semver "^5.6.0" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/react-base16-styling/download/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-dev-utils@^10.2.1: + version "10.2.1" + resolved "https://registry.npmmirror.com/react-dev-utils/download/react-dev-utils-10.2.1.tgz#f6de325ae25fa4d546d09df4bb1befdc6dd19c19" + integrity sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ== + dependencies: + "@babel/code-frame" "7.8.3" + address "1.1.2" + browserslist "4.10.0" + chalk "2.4.2" + cross-spawn "7.0.1" + detect-port-alt "1.1.6" + escape-string-regexp "2.0.0" + filesize "6.0.1" + find-up "4.1.0" + fork-ts-checker-webpack-plugin "3.1.1" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "7.0.4" + is-root "2.1.0" + loader-utils "1.2.3" + open "^7.0.2" + pkg-up "3.1.0" + react-error-overlay "^6.0.7" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + strip-ansi "6.0.0" + text-table "0.2.0" + +react-dnd-html5-backend@^11.1.3: + version "11.1.3" + resolved "https://registry.npmmirror.com/react-dnd-html5-backend/download/react-dnd-html5-backend-11.1.3.tgz#2749f04f416ec230ea193f5c1fbea2de7dffb8f7" + integrity sha1-J0nwT0FuwjDqGT9cH76i3n3/uPc= + dependencies: + dnd-core "^11.1.3" + +react-dnd@^11.1.3: + version "11.1.3" + resolved "https://registry.npmmirror.com/react-dnd/download/react-dnd-11.1.3.tgz#f9844f5699ccc55dfc81462c2c19f726e670c1af" + integrity sha1-+YRPVpnMxV38gUYsLBn3JuZwwa8= + dependencies: + "@react-dnd/shallowequal" "^2.0.0" + "@types/hoist-non-react-statics" "^3.3.1" + dnd-core "^11.1.3" + hoist-non-react-statics "^3.3.0" + +react-dom@^16.13.1: + version "16.14.0" + resolved "https://registry.npmmirror.com/react-dom/download/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-error-overlay@^6.0.7: + version "6.0.10" + resolved "https://registry.npmmirror.com/react-error-overlay/download/react-error-overlay-6.0.10.tgz#0fe26db4fa85d9dbb8624729580e90e7159a59a6" + integrity sha512-mKR90fX7Pm5seCOfz8q9F+66VCc1PGsWSBxKbITjfKVQHMNF2zudxHnMdJiB1fRCb+XsbQV9sO9DCkgsMQgBIA== + +react-highlight-words@^0.16.0: + version "0.16.0" + resolved "https://registry.npmmirror.com/react-highlight-words/download/react-highlight-words-0.16.0.tgz#4b4b9824e3d2b98789d3e3b3aedb5e961ae1b7cf" + integrity sha1-S0uYJOPSuYeJ0+Ozrttelhrht88= + dependencies: + highlight-words-core "^1.2.0" + memoize-one "^4.0.0" + prop-types "^15.5.8" + +react-i18next@^11.7.3: + version "11.15.3" + resolved "https://registry.npmmirror.com/react-i18next/download/react-i18next-11.15.3.tgz#7608fb3cacc02ac75a62fc2d68b579f140b198dd" + integrity sha512-RSUEM4So3Tu2JHV0JsZ5Yje+4nz66YViMfPZoywxOy0xyn3L7tE2CHvJ7Y9LUsrTU7vGmZ5bwb8PpjnkatdIxg== + dependencies: + "@babel/runtime" "^7.14.5" + html-escaper "^2.0.2" + html-parse-stringify "^3.0.1" + +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0, react-is@^16.8.4: + version "16.13.1" + resolved "https://registry.npmmirror.com/react-is/download/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ= + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.npmmirror.com/react-is/download/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA= + +react-json-view@^1.19.1: + version "1.21.3" + resolved "https://registry.npmmirror.com/react-json-view/download/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha1-8YQgnujxvzdPsMQbCBPP9UVJxHU= + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.npmmirror.com/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha1-TxonOv38jzSIqMUWv9p4+HI1I2I= + +react-popper-tooltip@^2.11.1: + version "2.11.1" + resolved "https://registry.npmmirror.com/react-popper-tooltip/download/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" + integrity sha1-PEvf2LwQ0cK5oWLoWbq4lY9bJkQ= + dependencies: + "@babel/runtime" "^7.9.2" + react-popper "^1.3.7" + +react-popper@^1.3.7: + version "1.3.11" + resolved "https://registry.npmmirror.com/react-popper/download/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" + integrity sha1-osw/Cme3W2bPpi0sQJ+d0fzHH/0= + dependencies: + "@babel/runtime" "^7.1.2" + "@hypnosphi/create-react-context" "^0.3.1" + deep-equal "^1.1.1" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + +react-scripts@3.4.1: + version "3.4.1" + resolved "https://registry.npmmirror.com/react-scripts/download/react-scripts-3.4.1.tgz#f551298b5c71985cc491b9acf3c8e8c0ae3ada0a" + integrity sha1-9VEpi1xxmFzEkbms88jowK462go= + dependencies: + "@babel/core" "7.9.0" + "@svgr/webpack" "4.3.3" + "@typescript-eslint/eslint-plugin" "^2.10.0" + "@typescript-eslint/parser" "^2.10.0" + babel-eslint "10.1.0" + babel-jest "^24.9.0" + babel-loader "8.1.0" + babel-plugin-named-asset-import "^0.3.6" + babel-preset-react-app "^9.1.2" + camelcase "^5.3.1" + case-sensitive-paths-webpack-plugin "2.3.0" + css-loader "3.4.2" + dotenv "8.2.0" + dotenv-expand "5.1.0" + eslint "^6.6.0" + eslint-config-react-app "^5.2.1" + eslint-loader "3.0.3" + eslint-plugin-flowtype "4.6.0" + eslint-plugin-import "2.20.1" + eslint-plugin-jsx-a11y "6.2.3" + eslint-plugin-react "7.19.0" + eslint-plugin-react-hooks "^1.6.1" + file-loader "4.3.0" + fs-extra "^8.1.0" + html-webpack-plugin "4.0.0-beta.11" + identity-obj-proxy "3.0.0" + jest "24.9.0" + jest-environment-jsdom-fourteen "1.0.1" + jest-resolve "24.9.0" + jest-watch-typeahead "0.4.2" + mini-css-extract-plugin "0.9.0" + optimize-css-assets-webpack-plugin "5.0.3" + pnp-webpack-plugin "1.6.4" + postcss-flexbugs-fixes "4.1.0" + postcss-loader "3.0.0" + postcss-normalize "8.0.1" + postcss-preset-env "6.7.0" + postcss-safe-parser "4.0.1" + react-app-polyfill "^1.0.6" + react-dev-utils "^10.2.1" + resolve "1.15.0" + resolve-url-loader "3.1.1" + sass-loader "8.0.2" + semver "6.3.0" + style-loader "0.23.1" + terser-webpack-plugin "2.3.5" + ts-pnp "1.1.6" + url-loader "2.3.0" + webpack "4.42.0" + webpack-dev-server "3.10.3" + webpack-manifest-plugin "2.2.0" + workbox-webpack-plugin "4.3.1" + optionalDependencies: + fsevents "2.1.2" + +react-textarea-autosize@^8.3.2: + version "8.3.3" + resolved "https://registry.npmmirror.com/react-textarea-autosize/download/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" + integrity sha1-9wkTlFNp2kU/1VTBaPa6rNH6BNg= + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.0.0" + use-latest "^1.0.0" + +react@^16.13.1: + version "16.14.0" + resolved "https://registry.npmmirror.com/react/download/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha1-GyIcYIi6d5lgHICPkRYcZuWPiXg= + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmmirror.com/read-pkg-up/download/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha1-86YTV1hFlzOuK5VjgFbhhU5+9Qc= + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/read-pkg/download/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/read-pkg/download/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/read-pkg/download/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w= + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readable-stream/download/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha1-M3u9o63AcGvT4CRCaihtS0sskZg= + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.npmmirror.com/readdirp/download/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha1-DodiKjMlqjPokihcr4tOhGUppSU= + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/readdirp/download/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc= + dependencies: + picomatch "^2.2.1" + +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/realpath-native/download/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha1-IAMpT+oj+wZy8kduviL89Jii1lw= + dependencies: + util.promisify "^1.0.0" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.npmmirror.com/recursive-readdir/download/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha1-mUb7MnThYo3m42svZxSVO0hFCU8= + dependencies: + minimatch "3.0.4" + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/redent/download/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha1-5Ve3mYMWu1PJ8fVvpiY1LGljBZ8= + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +redux@^4.0.4: + version "4.1.2" + resolved "https://registry.npmmirror.com/redux/download/redux-4.1.2.tgz#140f35426d99bb4729af760afcf79eaaac407104" + integrity sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw== + dependencies: + "@babel/runtime" "^7.9.2" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/regenerate-unicode-properties/download/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha1-VNCccRXh9T3CMUqXSzLBw0Tv4yY= + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmmirror.com/regenerate/download/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.npmmirror.com/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.npmmirror.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.npmmirror.com/regenerator-transform/download/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ= + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/regex-not/download/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw= + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regex-parser@2.2.10: + version "2.2.10" + resolved "https://registry.npmmirror.com/regex-parser/download/regex-parser-2.2.10.tgz#9e66a8f73d89a107616e63b39d4deddfee912b37" + integrity sha1-nmao9z2JoQdhbmOznU3t3+6RKzc= + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/regexp.prototype.flags/download/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/regexpp/download/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha1-jRnTHPYySCtYkEn4KB+T28uk0H8= + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.npmmirror.com/regexpp/download/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha1-BCWido2PI7rXDKS5BGH6LxIT4bI= + +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.npmmirror.com/regexpu-core/download/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha1-5WBbo2G2excYR4UBMnUC9EeamPA= + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.npmmirror.com/regjsgen/download/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM= + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.npmmirror.com/regjsparser/download/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha1-prZntUyIXhi1JVTLSWDvcRh+mWg= + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.npmmirror.com/relateurl/download/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.npmmirror.com/remark-parse/download/remark-parse-9.0.0.tgz?cache=0&sync_timestamp=1637259966298&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fremark-parse%2Fdownload%2Fremark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha1-TSCimWZYgOT0r12Qt8e4qTWFNkA= + dependencies: + mdast-util-from-markdown "^0.8.0" + +remark-stringify@^9.0.0: + version "9.0.1" + resolved "https://registry.npmmirror.com/remark-stringify/download/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" + integrity sha1-V20G6RBUiwpxkacfJ7M/EhiGKJQ= + dependencies: + mdast-util-to-markdown "^0.6.0" + +remark@^13.0.0: + version "13.0.0" + resolved "https://registry.npmmirror.com/remark/download/remark-13.0.0.tgz?cache=0&sync_timestamp=1637260202521&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fremark%2Fdownload%2Fremark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425" + integrity sha1-0V2b9xpAL0Aofr42Bntm1Uho5CU= + dependencies: + remark-parse "^9.0.0" + remark-stringify "^9.0.0" + unified "^9.1.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.npmmirror.com/remove-trailing-separator/download/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.npmmirror.com/renderkid/download/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha1-Rk8namvc7mBvShWZP5sp/HTKhgk= + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.npmmirror.com/repeat-element/download/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha1-vmgVIIR6tYx1aKx1+/rSjtQtOek= + +repeat-string@^1.0.0, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.npmmirror.com/repeat-string/download/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.npmmirror.com/request-promise-core/download/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha1-Pu3UIjII1BmGe3jOgVFn0QWToi8= + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.npmmirror.com/request-promise-native/download/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha1-5AcSBSal79yaObKKVnm/R7nZ3Cg= + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.npmmirror.com/request/download/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/require-directory/download/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/require-from-string/download/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha1-iaf92TgmEmcxjq/hT5wy5ZjDaQk= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/requires-port/download/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.npmmirror.com/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/resolve-cwd/download/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY= + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/resolve-from/download/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha1-w1IlhD3493bfIcV1V7wIfp39/Gk= + +resolve-url-loader@3.1.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/resolve-url-loader/download/resolve-url-loader-3.1.1.tgz#28931895fa1eab9be0647d3b2958c100ae3c0bf0" + integrity sha1-KJMYlfoeq5vgZH07KVjBAK48C/A= + dependencies: + adjust-sourcemap-loader "2.0.0" + camelcase "5.3.1" + compose-function "3.0.3" + convert-source-map "1.7.0" + es6-iterator "2.0.3" + loader-utils "1.2.3" + postcss "7.0.21" + rework "1.0.1" + rework-visit "1.0.0" + source-map "0.6.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.npmmirror.com/resolve-url/download/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.npmmirror.com/resolve/download/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.15.0: + version "1.15.0" + resolved "https://registry.npmmirror.com/resolve/download/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5" + integrity sha1-G3ypYHPrtS50H/15n2s56kYsZ/U= + dependencies: + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.8.1: + version "1.22.0" + resolved "https://registry.npmmirror.com/resolve/download/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + dependencies: + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/restore-cursor/download/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha1-OfZ8VLOnpYzqUjbZXPADQjljH34= + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmmirror.com/ret/download/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w= + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmmirror.com/retry/download/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/reusify/download/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= + +rework-visit@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/rework-visit/download/rework-visit-1.0.0.tgz#9945b2803f219e2f7aca00adb8bc9f640f842c9a" + integrity sha1-mUWygD8hni96ygCtuLyfZA+ELJo= + +rework@1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/rework/download/rework-1.0.1.tgz#30806a841342b54510aa4110850cd48534144aa7" + integrity sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc= + dependencies: + convert-source-map "^0.3.3" + css "^2.0.0" + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/rgb-regex/download/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/rgba-regex/download/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.npmmirror.com/rimraf/download/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha1-stEE/g2Psnz54KHNqCYt04M8bKs= + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.npmmirror.com/rimraf/download/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w= + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/rimraf/download/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/ripemd160/download/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw= + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.npmmirror.com/rsvp/download/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha1-yPFVMR0Wf2jyHhaN9x7FsIMRNzQ= + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.npmmirror.com/run-async/download/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU= + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmmirror.com/run-parallel/download/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= + dependencies: + queue-microtask "^1.2.2" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/run-queue/download/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@^6.5.3, rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.npmmirror.com/rxjs/download/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmmirror.com/safe-buffer/download/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha1-mR7GnSluAxN0fVm9/St0XDX4go0= + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/safe-regex/download/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.npmmirror.com/sane/download/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha1-7Ygf2SJzOmxGG8GJ3CtsAG8//e0= + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + +sanitize.css@^10.0.0: + version "10.0.0" + resolved "https://registry.npmmirror.com/sanitize.css/download/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" + integrity sha1-tcslR+lthimmCUdURmUkOx3DZXo= + +sass-loader@8.0.2: + version "8.0.2" + resolved "https://registry.npmmirror.com/sass-loader/download/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" + integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.2.3" + neo-async "^2.6.1" + schema-utils "^2.6.1" + semver "^6.3.0" + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.npmmirror.com/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha1-KBYjTiN4vdxOU1T6tcqold9xANk= + +saxes@^3.1.9: + version "3.1.11" + resolved "https://registry.npmmirror.com/saxes/download/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha1-1Z0f0zLskq2YouCy7mRHAjhLHFs= + dependencies: + xmlchars "^2.1.1" + +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.npmmirror.com/scheduler/download/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha1-Tz4u0sGn1laB9MhU+oxaHMtA8ZY= + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/schema-utils/download/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A= + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.npmmirror.com/schema-utils/download/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc= + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +scroll-into-view-if-needed@^2.2.25: + version "2.2.28" + resolved "https://registry.npmmirror.com/scroll-into-view-if-needed/download/scroll-into-view-if-needed-2.2.28.tgz#5a15b2f58a52642c88c8eca584644e01703d645a" + integrity sha1-WhWy9YpSZCyIyOylhGROAXA9ZFo= + dependencies: + compute-scroll-into-view "^1.0.17" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/select-hose/download/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +selfsigned@^1.10.7: + version "1.10.14" + resolved "https://registry.npmmirror.com/selfsigned/download/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" + integrity sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA== + dependencies: + node-forge "^0.10.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.3.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^2.1.2: + version "2.1.2" + resolved "https://registry.npmmirror.com/serialize-javascript/download/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" + integrity sha1-7OxTsOAxe9yV73arcHS3OEeF+mE= + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/serialize-javascript/download/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao= + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmmirror.com/serve-index/download/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/set-blocking/download/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/set-value/download/set-value-2.0.1.tgz?cache=0&sync_timestamp=1631437838608&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fset-value%2Fdownload%2Fset-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha1-oY1AUw5vB95CKMfe/kInr4ytAFs= + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/setprototypeof/download/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY= + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.npmmirror.com/sha.js/download/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha1-N6XPC4HsvGlD3hCbopYNGyZYSuc= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^0.1.2: + version "0.1.2" + resolved "https://registry.npmmirror.com/shallow-clone/download/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" + integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA= + dependencies: + is-extendable "^0.1.1" + kind-of "^2.0.1" + lazy-cache "^0.2.3" + mixin-object "^2.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/shallow-clone/download/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha1-jymBrZJTH1UDWwH7IwdppA4C76M= + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/shallowequal/download/shallowequal-1.1.0.tgz?cache=0&sync_timestamp=1624608058307&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshallowequal%2Fdownload%2Fshallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha1-GI1SHelbkIdAT9TctosT3wrk5/g= + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/shebang-command/download/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo= + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/download/shebang-regex-1.0.0.tgz?cache=0&sync_timestamp=1628896660639&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/shebang-regex/download/shebang-regex-3.0.0.tgz?cache=0&sync_timestamp=1628896660639&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fshebang-regex%2Fdownload%2Fshebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI= + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.npmmirror.com/shell-quote/download/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I= + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.npmmirror.com/shellwords/download/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha1-1rkYHBpI05cyTISHHvvPxz/AZUs= + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.6" + resolved "https://registry.npmmirror.com/signal-exit/download/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmmirror.com/simple-swizzle/download/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/sisteransi/download/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/slash/download/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/slash/download/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha1-3lUoUaF1nfOo8gZTVEL17E3eq0Q= + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slash/download/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/slice-ansi/download/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY= + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/download/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha1-UA6N0P1VsFgVCGJVsxla3ypF/ms= + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/snapdragon-node/download/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha1-bBdfhv8UvbByRWPo88GwIaKGhTs= + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/snapdragon-util/download/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI= + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.npmmirror.com/snapdragon/download/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0= + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/sockjs-client/download/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U= + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.npmmirror.com/sockjs/download/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.npmmirror.com/sort-keys/download/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.npmmirror.com/source-list-map/download/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha1-OZO9hzv8SEecyp6jpUeDXHwVSzQ= + +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: + version "0.5.3" + resolved "https://registry.npmmirror.com/source-map-resolve/download/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha1-GQhmvs51U+H48mei7oLGBrVQmho= + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.npmmirror.com/source-map-url/download/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha1-CvZmBadFpaL5HPG7+KevvCg97FY= + +source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.npmmirror.com/source-map/download/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/spdx-correct/download/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha1-3s6BrJweZxPl99G28X1Gj6U9iak= + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0= + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha1-z3D1BILu/cmOPOCmgz5KU87rpnk= + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.npmmirror.com/spdx-license-ids/download/spdx-license-ids-3.0.11.tgz?cache=0&sync_timestamp=1636978442514&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/spdy-transport/download/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha1-ANSGOmQArXXfkzYaFghgXl3NzzE= + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/spdy/download/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha1-t09GYgOj7aRSwCSSuR+56EonZ3s= + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.npmmirror.com/specificity/download/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + integrity sha1-qrXmRQEtsIuhguFRFlc40AiHsBk= + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.npmmirror.com/split-string/download/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha1-fLCd2jqGWFcFxks5pkZgOGguj+I= + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmmirror.com/sprintf-js/download/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.17.0" + resolved "https://registry.npmmirror.com/sshpk/download/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.npmmirror.com/ssri/download/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha1-FXk5E08gRk5zAd26PpD/qPdyisU= + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0: + version "7.1.1" + resolved "https://registry.npmmirror.com/ssri/download/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" + integrity sha1-M+RPiWqWcVjjxjRo5H7EZhO5W18= + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.npmmirror.com/stable/download/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88= + +stack-utils@^1.0.1: + version "1.0.5" + resolved "https://registry.npmmirror.com/stack-utils/download/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha1-oZsLAZR+ACnI5FHV1hpJj1uxRxs= + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.npmmirror.com/static-extend/download/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmmirror.com/statuses/download/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/stealthy-require/download/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/stream-browserify/download/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs= + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.npmmirror.com/stream-each/download/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha1-6+J6DDibBPvMIzZClS4Qcxr6m64= + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.npmmirror.com/stream-http/download/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw= + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/stream-shift/download/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha1-1wiCgVWasneEJCebCHfaPDktWj0= + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.npmmirror.com/strict-uri-encode/download/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.npmmirror.com/string-convert/download/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" + integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/string-length/download/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-length@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/string-length/download/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" + integrity sha1-EH74wjRW4Yeoq9SmEWL/SsbiWDc= + dependencies: + astral-regex "^1.0.0" + strip-ansi "^5.2.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/string-width/download/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.npmmirror.com/string-width/download/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4= + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/string-width/download/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha1-InZ74htirxCBV0MG9prFG2IgOWE= + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmmirror.com/string-width/download/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA= + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.matchall@^4.0.2: + version "4.0.6" + resolved "https://registry.npmmirror.com/string.prototype.matchall/download/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" + integrity sha1-Wrtdq8lMew6iOA9lumELOlRLFfo= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/string.prototype.trimend/download/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha1-51rpDClCxjUEaGwYsoe0oLGkX4A= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.npmmirror.com/string.prototype.trimstart/download/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4= + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/string_decoder/download/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha1-nPFhG6YmhdcDCunkujQUnDrwP8g= + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/stringify-object/download/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha1-cDBlrvyhkwDTzoivT1s5VtdVZik= + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@6.0.0: + version "6.0.0" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI= + dependencies: + ansi-regex "^5.0.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4= + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/strip-ansi/download/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk= + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-bom/download/strip-bom-3.0.0.tgz?cache=0&sync_timestamp=1624608094529&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fstrip-bom%2Fdownload%2Fstrip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-comments@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/strip-comments/download/strip-comments-1.0.2.tgz#82b9c45e7f05873bee53f37168af930aa368679d" + integrity sha1-grnEXn8FhzvuU/NxaK+TCqNoZ50= + dependencies: + babel-extract-comments "^1.0.0" + babel-plugin-transform-object-rest-spread "^6.26.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/strip-eof/download/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/strip-indent/download/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha1-wy4c7pQLazQyx3G8LFS8znPNMAE= + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.0.1: + version "3.1.1" + resolved "https://registry.npmmirror.com/strip-json-comments/download/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY= + +style-loader@0.23.1: + version "0.23.1" + resolved "https://registry.npmmirror.com/style-loader/download/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/style-search/download/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= + +style-value-types@^3.1.9: + version "3.2.0" + resolved "https://registry.npmmirror.com/style-value-types/download/style-value-types-3.2.0.tgz#eb89cab1340823fa7876f3e289d29d99c92111bb" + integrity sha1-64nKsTQII/p4dvPiidKdmckhEbs= + dependencies: + hey-listen "^1.0.8" + tslib "^1.10.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/stylehacks/download/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha1-Zxj8r00eB9ihMYaQiB6NlnJqcdU= + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylelint-config-recommended@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-recommended/download/stylelint-config-recommended-3.0.0.tgz#e0e547434016c5539fe2650afd58049a2fd1d657" + integrity sha1-4OVHQ0AWxVOf4mUK/VgEmi/R1lc= + +stylelint-config-standard@^20.0.0: + version "20.0.0" + resolved "https://registry.npmmirror.com/stylelint-config-standard/download/stylelint-config-standard-20.0.0.tgz?cache=0&sync_timestamp=1636911768470&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fstylelint-config-standard%2Fdownload%2Fstylelint-config-standard-20.0.0.tgz#06135090c9e064befee3d594289f50e295b5e20d" + integrity sha1-BhNQkMngZL7+49WUKJ9Q4pW14g0= + dependencies: + stylelint-config-recommended "^3.0.0" + +stylelint@^13.6.1: + version "13.13.1" + resolved "https://registry.npmmirror.com/stylelint/download/stylelint-13.13.1.tgz#fca9c9f5de7990ab26a00f167b8978f083a18f3c" + integrity sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ== + dependencies: + "@stylelint/postcss-css-in-js" "^0.37.2" + "@stylelint/postcss-markdown" "^0.36.2" + autoprefixer "^9.8.6" + balanced-match "^2.0.0" + chalk "^4.1.1" + cosmiconfig "^7.0.0" + debug "^4.3.1" + execall "^2.0.0" + fast-glob "^3.2.5" + fastest-levenshtein "^1.0.12" + file-entry-cache "^6.0.1" + get-stdin "^8.0.0" + global-modules "^2.0.0" + globby "^11.0.3" + globjoin "^0.1.4" + html-tags "^3.1.0" + ignore "^5.1.8" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + known-css-properties "^0.21.0" + lodash "^4.17.21" + log-symbols "^4.1.0" + mathml-tag-names "^2.1.3" + meow "^9.0.0" + micromatch "^4.0.4" + normalize-selector "^0.2.0" + postcss "^7.0.35" + postcss-html "^0.36.0" + postcss-less "^3.1.4" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^4.0.2" + postcss-sass "^0.4.4" + postcss-scss "^2.1.1" + postcss-selector-parser "^6.0.5" + postcss-syntax "^0.36.2" + postcss-value-parser "^4.1.0" + resolve-from "^5.0.0" + slash "^3.0.0" + specificity "^0.4.1" + string-width "^4.2.2" + strip-ansi "^6.0.0" + style-search "^0.1.0" + sugarss "^2.0.0" + svg-tags "^1.0.0" + table "^6.6.0" + v8-compile-cache "^2.3.0" + write-file-atomic "^3.0.3" + +sugarss@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/sugarss/download/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" + integrity sha1-3dduASSyl9QL88yjHIsi7LQ7xh0= + dependencies: + postcss "^7.0.2" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha1-4uaaRKyHcveKHsCzW2id9lMO/I8= + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha1-B2Srxpxj1ayELdSGfo0CXogN+PM= + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmmirror.com/supports-color/download/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha1-G33NyzK4E4gBs+R4umpRyqiWSNo= + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/download/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.0: + version "2.0.4" + resolved "https://registry.npmmirror.com/svg-parser/download/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha1-/cLinhOVFzYUC3bLEiyO5mMOtrU= + +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/svg-tags/download/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + +svgo@^1.0.0, svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.npmmirror.com/svgo/download/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.npmmirror.com/symbol-tree/download/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I= + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.npmmirror.com/table/download/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha1-EpLRlQDOP4YFOwXw6Ofko7shB54= + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +table@^6.6.0: + version "6.8.0" + resolved "https://registry.npmmirror.com/table/download/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.npmmirror.com/tapable/download/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +terser-webpack-plugin@2.3.5: + version "2.3.5" + resolved "https://registry.npmmirror.com/terser-webpack-plugin/download/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" + integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.2.0" + jest-worker "^25.1.0" + p-limit "^2.2.2" + schema-utils "^2.6.4" + serialize-javascript "^2.1.2" + source-map "^0.6.1" + terser "^4.4.3" + webpack-sources "^1.4.3" + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.npmmirror.com/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2, terser@^4.4.3, terser@^4.6.3: + version "4.8.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" + integrity sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.npmmirror.com/test-exclude/download/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha1-w9Ph4xHrfuQF4JLawQrv0JCR6sA= + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/text-table/download/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/throat/download/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.npmmirror.com/through2/download/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0= + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmmirror.com/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npmmirror.com/thunky/download/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha1-Wrr3FKlAXbBQRzK7zNLO3Z75U30= + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.npmmirror.com/timers-browserify/download/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4= + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/timsort/download/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmmirror.com/tmp/download/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha1-bTQzWIl2jSGyvNoKonfO07G/rfk= + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/tmpl/download/tmpl-1.0.5.tgz?cache=0&sync_timestamp=1630997304688&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftmpl%2Fdownload%2Ftmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha1-hoPguQK7nCDE9ybjwLafNlGMB8w= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.npmmirror.com/to-object-path/download/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.npmmirror.com/to-regex-range/download/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmmirror.com/to-regex-range/download/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ= + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/to-regex/download/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4= + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.npmmirror.com/toggle-selection/download/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/tough-cookie/download/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha1-zZ+yoKodWhK0c72fuW+j3P9lreI= + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/tr46/download/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/trim-newlines/download/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha1-Jgpdli2LdSQlsy86fbDcrNF2wUQ= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/trough/download/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha1-uLY5zvrX0LsqvTfUM/+Ck++l9AY= + +ts-pnp@1.1.6: + version "1.1.6" + resolved "https://registry.npmmirror.com/ts-pnp/download/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a" + integrity sha1-OJokOW1CWg0xYultK0Y4kA/cKJo= + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.npmmirror.com/ts-pnp/download/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha1-pQCtCEsHmPHDBxrzkeZZEshrypI= + +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.npmmirror.com/tslib/download/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.3: + version "2.3.1" + resolved "https://registry.npmmirror.com/tslib/download/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + +tsutils@^3.17.1: + version "3.21.0" + resolved "https://registry.npmmirror.com/tsutils/download/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha1-tIcX05TOpsHglpg+7Vjp1hcVtiM= + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.npmmirror.com/tty-browserify/download/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/tunnel-agent/download/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.npmmirror.com/tweetnacl/download/tweetnacl-0.14.5.tgz?cache=0&sync_timestamp=1624607953624&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftweetnacl%2Fdownload%2Ftweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmmirror.com/type-check/download/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha1-20vBUaSiz07r+a3V23VQjbbMhB8= + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc= + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha1-jSojcNPfiG61yQraHFv2GIrPg4s= + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0= + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.npmmirror.com/type/download/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0: + version "2.5.0" + resolved "https://registry.npmmirror.com/type/download/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.npmmirror.com/typed-styles/download/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha1-kzkqAIeUxFlRGf9i3eaAnbxAo9k= + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.npmmirror.com/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha1-qX7nqf9CaRufeD/xvFES/j/KkIA= + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmmirror.com/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.9.6: + version "3.9.10" + resolved "https://registry.npmmirror.com/typescript/download/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + +ua-parser-js@^0.7.30: + version "0.7.33" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.33.tgz#1d04acb4ccef9293df6f70f2c3d22f3030d8b532" + integrity sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw== + +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/unbox-primitive/download/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha1-CF4hViXsMWJXTciFmr7nilmxRHE= + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631615391251&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-canonical-property-names-ecmascript%2Fdownload%2Funicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha1-MBrNxSVjFnDTn2FG4Od/9rvevdw= + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-match-property-ecmascript/download/unicode-match-property-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631618607567&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-match-property-ecmascript%2Fdownload%2Funicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha1-VP0W4OyxZ88Ezx91a9zJLrp5dsM= + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-2.0.0.tgz?cache=0&sync_timestamp=1631618158421&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha1-GgGqVyR8FMVouJd1pUk4eIGJpxQ= + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha1-CjbLmlhcT2q9Ua0d7dsoXBZSl8g= + +unified@^9.1.0: + version "9.2.2" + resolved "https://registry.npmmirror.com/unified/download/unified-9.2.2.tgz?cache=0&sync_timestamp=1637256363650&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Funified%2Fdownload%2Funified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha1-Z2SaGr/Dq4XSlpUCkCd16wMUaXU= + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/union-value/download/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha1-C2/nuDWuzaYcbqTU8CwUIh4QmEc= + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/uniq/download/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/uniqs/download/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/unique-filename/download/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha1-HWl2k2mtoFgxA6HmrodoG1ZXMjA= + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.npmmirror.com/unique-slug/download/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha1-uqvOkQg/xk6UWw861hPiZPfNTmw= + dependencies: + imurmurhash "^0.1.4" + +unist-util-find-all-after@^3.0.2: + version "3.0.2" + resolved "https://registry.npmmirror.com/unist-util-find-all-after/download/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6" + integrity sha1-/f7NFMW3rqXp7zjV4NX3dO61YfY= + dependencies: + unist-util-is "^4.0.0" + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.npmmirror.com/unist-util-is/download/unist-util-is-4.1.0.tgz?cache=0&sync_timestamp=1626875281214&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-is%2Fdownload%2Funist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha1-l25fRip6Xec9lLcGusG5BnG1d5c= + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.npmmirror.com/unist-util-stringify-position/download/unist-util-stringify-position-2.0.3.tgz?cache=0&sync_timestamp=1624607967709&other_urls=https%3A%2F%2Fregistry.nlark.com%2Funist-util-stringify-position%2Fdownload%2Funist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha1-zOO/oc34W6c3XR1bF73Eytqb2do= + dependencies: + "@types/unist" "^2.0.2" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmmirror.com/universalify/download/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY= + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.npmmirror.com/unquote/download/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/unset-value/download/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.npmmirror.com/upath/download/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ= + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmmirror.com/uri-js/download/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34= + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.npmmirror.com/urix/download/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/url-loader/download/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs= + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" + +url-parse@^1.4.3: + version "1.5.4" + resolved "https://registry.npmmirror.com/url-parse/download/url-parse-1.5.4.tgz#e4f645a7e2a0852cc8a66b14b292a3e9a11a97fd" + integrity sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.npmmirror.com/url/download/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use-composed-ref@^1.0.0: + version "1.2.1" + resolved "https://registry.npmmirror.com/use-composed-ref/download/use-composed-ref-1.2.1.tgz#9bdcb5ccd894289105da2325e1210079f56bf849" + integrity sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw== + +use-isomorphic-layout-effect@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/use-isomorphic-layout-effect/download/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" + integrity sha1-e7ZYkXDNKYehUgQvkIT57/t1wiU= + +use-latest@^1.0.0: + version "1.2.0" + resolved "https://registry.npmmirror.com/use-latest/download/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" + integrity sha1-pE9lcrgojgly7EEb3QhAraNm8jI= + dependencies: + use-isomorphic-layout-effect "^1.0.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.npmmirror.com/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/util-deprecate/download/util-deprecate-1.0.2.tgz?cache=0&sync_timestamp=1624607944834&other_urls=https%3A%2F%2Fregistry.nlark.com%2Futil-deprecate%2Fdownload%2Futil-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/util.promisify/download/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA= + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util.promisify@^1.0.0: + version "1.1.1" + resolved "https://registry.npmmirror.com/util.promisify/download/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" + integrity sha1-d4MvV87SyUeBdBScrpuW6ZGM1Us= + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + for-each "^0.3.3" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.1" + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.npmmirror.com/util.promisify/download/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha1-a693dLgO6w91INi4HQeYKlmruu4= + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmmirror.com/util/download/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.npmmirror.com/util/download/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.npmmirror.com/utila/download/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^3.0.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.npmmirror.com/uuid/download/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^8.3.1: + version "8.3.2" + resolved "https://registry.npmmirror.com/uuid/download/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3, v8-compile-cache@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha1-LeGWGMZtwkfc+2+ZM4A12CRaLO4= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.npmmirror.com/validate-npm-package-license/download/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha1-/JH2uce6FchX9MssXe/uw51PQQo= + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validator@^13.1.1: + version "13.7.0" + resolved "https://registry.npmmirror.com/validator/download/validator-13.7.0.tgz?cache=0&sync_timestamp=1635822643143&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvalidator%2Fdownload%2Fvalidator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha1-T5ZYuhO6jz2C7ogdNRZInqhcCFc= + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.npmmirror.com/vendors/download/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha1-4rgApT56Kbk1BsPPQRANFsTErY4= + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.npmmirror.com/verror/download/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.npmmirror.com/vfile-message/download/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha1-W0O4gXHUCerlhHfRPyPdQdUsNxo= + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.npmmirror.com/vfile/download/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha1-A/Hc4o/GJcYlvGUUNQ+9sA+p5iQ= + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vis-network@7.3.5: + version "7.3.5" + resolved "https://registry.npmmirror.com/vis-network/download/vis-network-7.3.5.tgz#367f3a1c19ba1b677dc3dec495f7e0d235e1fd59" + integrity sha1-Nn86HBm6G2d9w97Elffg0jXh/Vk= + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.npmmirror.com/vm-browserify/download/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha1-eGQcSIuObKkadfUR56OzKobl3aA= + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/void-elements/download/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk= + +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.npmmirror.com/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha1-ConN9cwVgi35w2BUNnaWPgzDCM0= + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "https://registry.npmmirror.com/w3c-xmlserializer/download/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha1-MEhcp9cKb9BSQgo9Ev2Q5jOc55Q= + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.8" + resolved "https://registry.npmmirror.com/walker/download/walker-1.0.8.tgz?cache=0&sync_timestamp=1635238315480&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fwalker%2Fdownload%2Fwalker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha1-vUmNtHev5XPcBBhfAR06uKjXZT8= + dependencies: + makeerror "1.0.12" + +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.npmmirror.com/warning/download/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha1-Fungd+uKhtavfWSqHgX9hbRnjKM= + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.npmmirror.com/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc= + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.0: + version "1.7.5" + resolved "https://registry.npmmirror.com/watchpack/download/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM= + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmmirror.com/wbuf/download/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha1-wdjRSTFtPqhShIiVy2oL/oh7h98= + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmmirror.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.npmmirror.com/webidl-conversions/download/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha1-qFWYCx8LazWbodXZ+zmulB+qY60= + +webpack-dev-middleware@^3.7.2: + version "3.7.3" + resolved "https://registry.npmmirror.com/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU= + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@3.10.3: + version "3.10.3" + resolved "https://registry.npmmirror.com/webpack-dev-server/download/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" + integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.6" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.25" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.4.0" + spdy "^4.0.1" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "12.0.5" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/webpack-log/download/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha1-W3ko4GN1k/EZ0y9iJ8HgrDHhtH8= + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@2.2.0: + version "2.2.0" + resolved "https://registry.npmmirror.com/webpack-manifest-plugin/download/webpack-manifest-plugin-2.2.0.tgz#19ca69b435b0baec7e29fbe90fb4015de2de4f16" + integrity sha1-GcpptDWwuux+KfvpD7QBXeLeTxY= + dependencies: + fs-extra "^7.0.0" + lodash ">=3.5 <5" + object.entries "^1.1.0" + tapable "^1.0.0" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.npmmirror.com/webpack-sources/download/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha1-7t2OwLko+/HL/plOItLYkPMwqTM= + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@4.42.0: + version "4.42.0" + resolved "https://registry.npmmirror.com/webpack/download/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8" + integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.npmmirror.com/websocket-driver/download/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha1-ia1Slbv2S0gKvLox5JU6ynBvV2A= + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.npmmirror.com/websocket-extensions/download/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha1-f4RzvIOd/YdgituV1+sHUhFXikI= + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.npmmirror.com/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA= + dependencies: + iconv-lite "0.4.24" + +whatwg-fetch@^3.0.0: + version "3.6.2" + resolved "https://registry.npmmirror.com/whatwg-fetch/download/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha1-3O0k838mJO0CgXJdUdDi4/5nf4w= + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmmirror.com/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78= + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag= + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY= + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmmirror.com/which-boxed-primitive/download/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY= + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/which-module/download/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.9, which@^1.3.0, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/which/download/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo= + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmmirror.com/which/download/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE= + dependencies: + isexe "^2.0.0" + +word-wrap@~1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== + +workbox-background-sync@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-background-sync/download/workbox-background-sync-4.3.1.tgz#26821b9bf16e9e37fd1d640289edddc08afd1950" + integrity sha1-JoIbm/Funjf9HWQCie3dwIr9GVA= + dependencies: + workbox-core "^4.3.1" + +workbox-broadcast-update@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-broadcast-update/download/workbox-broadcast-update-4.3.1.tgz#e2c0280b149e3a504983b757606ad041f332c35b" + integrity sha1-4sAoCxSeOlBJg7dXYGrQQfMyw1s= + dependencies: + workbox-core "^4.3.1" + +workbox-build@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-build/download/workbox-build-4.3.1.tgz#414f70fb4d6de47f6538608b80ec52412d233e64" + integrity sha1-QU9w+01t5H9lOGCLgOxSQS0jPmQ= + dependencies: + "@babel/runtime" "^7.3.4" + "@hapi/joi" "^15.0.0" + common-tags "^1.8.0" + fs-extra "^4.0.2" + glob "^7.1.3" + lodash.template "^4.4.0" + pretty-bytes "^5.1.0" + stringify-object "^3.3.0" + strip-comments "^1.0.2" + workbox-background-sync "^4.3.1" + workbox-broadcast-update "^4.3.1" + workbox-cacheable-response "^4.3.1" + workbox-core "^4.3.1" + workbox-expiration "^4.3.1" + workbox-google-analytics "^4.3.1" + workbox-navigation-preload "^4.3.1" + workbox-precaching "^4.3.1" + workbox-range-requests "^4.3.1" + workbox-routing "^4.3.1" + workbox-strategies "^4.3.1" + workbox-streams "^4.3.1" + workbox-sw "^4.3.1" + workbox-window "^4.3.1" + +workbox-cacheable-response@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-cacheable-response/download/workbox-cacheable-response-4.3.1.tgz#f53e079179c095a3f19e5313b284975c91428c91" + integrity sha1-9T4HkXnAlaPxnlMTsoSXXJFCjJE= + dependencies: + workbox-core "^4.3.1" + +workbox-core@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-core/download/workbox-core-4.3.1.tgz#005d2c6a06a171437afd6ca2904a5727ecd73be6" + integrity sha1-AF0sagahcUN6/WyikEpXJ+zXO+Y= + +workbox-expiration@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-expiration/download/workbox-expiration-4.3.1.tgz#d790433562029e56837f341d7f553c4a78ebe921" + integrity sha1-15BDNWICnlaDfzQdf1U8Snjr6SE= + dependencies: + workbox-core "^4.3.1" + +workbox-google-analytics@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-google-analytics/download/workbox-google-analytics-4.3.1.tgz#9eda0183b103890b5c256e6f4ea15a1f1548519a" + integrity sha1-ntoBg7EDiQtcJW5vTqFaHxVIUZo= + dependencies: + workbox-background-sync "^4.3.1" + workbox-core "^4.3.1" + workbox-routing "^4.3.1" + workbox-strategies "^4.3.1" + +workbox-navigation-preload@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-navigation-preload/download/workbox-navigation-preload-4.3.1.tgz#29c8e4db5843803b34cd96dc155f9ebd9afa453d" + integrity sha1-Kcjk21hDgDs0zZbcFV+evZr6RT0= + dependencies: + workbox-core "^4.3.1" + +workbox-precaching@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-precaching/download/workbox-precaching-4.3.1.tgz#9fc45ed122d94bbe1f0ea9584ff5940960771cba" + integrity sha1-n8Re0SLZS74fDqlYT/WUCWB3HLo= + dependencies: + workbox-core "^4.3.1" + +workbox-range-requests@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-range-requests/download/workbox-range-requests-4.3.1.tgz#f8a470188922145cbf0c09a9a2d5e35645244e74" + integrity sha1-+KRwGIkiFFy/DAmpotXjVkUkTnQ= + dependencies: + workbox-core "^4.3.1" + +workbox-routing@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-routing/download/workbox-routing-4.3.1.tgz#a675841af623e0bb0c67ce4ed8e724ac0bed0cda" + integrity sha1-pnWEGvYj4LsMZ85O2OckrAvtDNo= + dependencies: + workbox-core "^4.3.1" + +workbox-strategies@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-strategies/download/workbox-strategies-4.3.1.tgz#d2be03c4ef214c115e1ab29c9c759c9fe3e9e646" + integrity sha1-0r4DxO8hTBFeGrKcnHWcn+Pp5kY= + dependencies: + workbox-core "^4.3.1" + +workbox-streams@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-streams/download/workbox-streams-4.3.1.tgz#0b57da70e982572de09c8742dd0cb40a6b7c2cc3" + integrity sha1-C1facOmCVy3gnIdC3Qy0Cmt8LMM= + dependencies: + workbox-core "^4.3.1" + +workbox-sw@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-sw/download/workbox-sw-4.3.1.tgz#df69e395c479ef4d14499372bcd84c0f5e246164" + integrity sha1-32njlcR5700USZNyvNhMD14kYWQ= + +workbox-webpack-plugin@4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-webpack-plugin/download/workbox-webpack-plugin-4.3.1.tgz#47ff5ea1cc074b6c40fb5a86108863a24120d4bd" + integrity sha1-R/9eocwHS2xA+1qGEIhjokEg1L0= + dependencies: + "@babel/runtime" "^7.0.0" + json-stable-stringify "^1.0.1" + workbox-build "^4.3.1" + +workbox-window@^4.3.1: + version "4.3.1" + resolved "https://registry.npmmirror.com/workbox-window/download/workbox-window-4.3.1.tgz#ee6051bf10f06afa5483c9b8dfa0531994ede0f3" + integrity sha1-7mBRvxDwavpUg8m436BTGZTt4PM= + dependencies: + workbox-core "^4.3.1" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.npmmirror.com/worker-farm/download/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha1-JqlMU5G7ypJhUgAvabhKS/dy5ag= + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.npmmirror.com/worker-rpc/download/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha1-y1Zb1tcHGo8WZgaGBR6WmtMvVNU= + dependencies: + microevent.ts "~0.1.1" + +wouter@^2.5.1: + version "2.7.5" + resolved "https://registry.npmmirror.com/wouter/download/wouter-2.7.5.tgz#c7466a2630bed3a4ec010aea0cda42a5bae69e5d" + integrity sha1-x0ZqJjC+06TsAQrqDNpCpbrmnl0= + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.npmmirror.com/wrap-ansi/download/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha1-H9H2cjXVttD+54EFYAG/tpTAOwk= + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmmirror.com/wrappy/download/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.npmmirror.com/write-file-atomic/download/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha1-0LBUY8GIroBDlv1asqNwBir4dSk= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write-file-atomic@^3.0.3: + version "3.0.3" + resolved "https://registry.npmmirror.com/write-file-atomic/download/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha1-Vr1cWlxwSBzRnFcb05q5ZaXeVug= + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.npmmirror.com/write/download/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM= + dependencies: + mkdirp "^0.5.1" + +ws@^5.2.0: + version "5.2.3" + resolved "https://registry.npmmirror.com/ws/download/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.1.2, ws@^6.2.1: + version "6.2.2" + resolved "https://registry.npmmirror.com/ws/download/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/xml-name-validator/download/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo= + +xmlchars@^2.1.1: + version "2.2.0" + resolved "https://registry.npmmirror.com/xmlchars/download/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha1-Bg/hvLf5x2/ioX24apvDq4lCEMs= + +xregexp@^4.3.0: + version "4.4.1" + resolved "https://registry.npmmirror.com/xregexp/download/xregexp-4.4.1.tgz#c84a88fa79e9ab18ca543959712094492185fe65" + integrity sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag== + dependencies: + "@babel/runtime-corejs3" "^7.12.1" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.npmmirror.com/xtend/download/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha1-u3J3n1+kZRhrH0OPZ0+jR/2121Q= + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.npmmirror.com/y18n/download/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha1-tfJZyCzW4zaSHv17/Yv1YN6e7t8= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmmirror.com/yallist/download/yallist-3.1.1.tgz?cache=0&sync_timestamp=1624607893982&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha1-27fa+b/YusmrRev2ArjLrQ1dCP0= + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/yallist/download/yallist-4.0.0.tgz?cache=0&sync_timestamp=1624607893982&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyallist%2Fdownload%2Fyallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI= + +yaml@^1.10.0, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.npmmirror.com/yaml/download/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha1-Ew8JcC667vJlDVTObj5XBvek+zg= + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.npmmirror.com/yargs-parser/download/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha1-LrfcOwKJcY/ClfNidThFxBoMlO4= + +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.npmmirror.com/yargs/download/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM= + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.npmmirror.com/yargs/download/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha1-rX/+/sGqWVZayRX4Lcyzipwxot0= + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.npmmirror.com/zwitch/download/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha1-0R1zgf/tFrdC9q97PyI9XNn+mSA= diff --git a/hugegraph-hubble/hubble-fe/src/modules/algorithm/algorithmsForm/Oltp/AdamicAdar/index.js b/hugegraph-hubble/hubble-fe/src/modules/algorithm/algorithmsForm/Oltp/AdamicAdar/index.js index b2e4227bd..ddb3eb664 100644 --- a/hugegraph-hubble/hubble-fe/src/modules/algorithm/algorithmsForm/Oltp/AdamicAdar/index.js +++ b/hugegraph-hubble/hubble-fe/src/modules/algorithm/algorithmsForm/Oltp/AdamicAdar/index.js @@ -38,7 +38,7 @@ import { TEXT_PATH, } from '../../../../../utils/constants'; import {useTranslation} from 'react-i18next'; - +1; const {LOADING, SUCCESS, FAILED} = GRAPH_STATUS; const {ADAMIC_ADAR} = ALGORITHM_NAME; diff --git a/pom.xml b/pom.xml index eb0ae13cb..a7da15614 100644 --- a/pom.xml +++ b/pom.xml @@ -90,7 +90,7 @@ hugegraph-client - hugegraph-loader + hugegraph-spark-connector hugegraph-tools hugegraph-hubble From deadd30d7740a9265f841815edc60f78d41e6d42 Mon Sep 17 00:00:00 2001 From: FrostyHec <112929809+FrostyHec@users.noreply.github.com> Date: Sun, 13 Oct 2024 14:51:38 +0800 Subject: [PATCH 21/21] use hg-common-1.3.0 --- hugegraph-hubble/hubble-be/pom.xml | 5 +- .../controller/op/AuditController.java | 146 +++++++++--------- .../service/saas/PrometheusService.java | 18 ++- 3 files changed, 90 insertions(+), 79 deletions(-) diff --git a/hugegraph-hubble/hubble-be/pom.xml b/hugegraph-hubble/hubble-be/pom.xml index 68c2399cd..bb83772e0 100644 --- a/hugegraph-hubble/hubble-be/pom.xml +++ b/hugegraph-hubble/hubble-be/pom.xml @@ -112,8 +112,8 @@ org.apache.hugegraph hugegraph-common - - 1.0.01 + 1.3.0 + com.baidu.hugegraph @@ -212,6 +212,7 @@ org.apache.hugegraph hugegraph-client + 4.0.0-SNAPSHOT diff --git a/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/controller/op/AuditController.java b/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/controller/op/AuditController.java index bb49a7dd3..c3f40f9c0 100644 --- a/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/controller/op/AuditController.java +++ b/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/controller/op/AuditController.java @@ -16,76 +16,76 @@ * under the License. */ -package org.apache.hugegraph.controller.op; - -import lombok.SneakyThrows; -import org.apache.hugegraph.common.Constant; -import org.apache.hugegraph.controller.BaseController; -import org.apache.hugegraph.entity.op.AuditEntity; -import org.apache.hugegraph.exception.InternalException; -import org.apache.hugegraph.logger.AuditOperationEnum; -import org.apache.hugegraph.service.op.AuditService; -import org.apache.hugegraph.util.JsonUtil; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -@RestController -@RequestMapping(Constant.API_VERSION + "audits") -public class AuditController extends BaseController { - @Autowired - AuditService auditService; - - @GetMapping("operations/list") - public Object listOperations() { - List operations = Arrays.stream(AuditOperationEnum.values()) - .map(AuditOperationEnum::getName) - .collect(Collectors.toList()); - - return operations; - } - - @GetMapping("services/list") - public Object listServices() throws IOException { - List operations = auditService.listServices(); - - return operations; - } - - @SneakyThrows - @PostMapping("query") - public Object query(@RequestBody AuditService.AuditReq auditReq) { - return auditService.queryPage(auditReq); - } - - @PostMapping("export") - public void export(HttpServletResponse response, - @RequestBody AuditService.AuditReq auditReq) { - String fileName = String.format("audit.txt", auditReq.startDatetime, - auditReq.endDatetime); - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application/octet-stream"); - response.setHeader("Access-Control-Expose-Headers", - "Content-Disposition"); - response.setHeader("Content-Disposition", - "attachment;filename=" + fileName); - try { - OutputStream os = response.getOutputStream(); - for (AuditEntity auditEntity : auditService.export(auditReq)) { - os.write((JsonUtil.toJson(auditEntity) + "\n") - .getBytes(StandardCharsets.UTF_8)); - } - os.close(); - } catch (IOException e) { - throw new InternalException("Audit Log Write Error", e); - } - } -} +//package org.apache.hugegraph.controller.op; +// TODO RECOVER WHEN EVALUATED +//import lombok.SneakyThrows; +//import org.apache.hugegraph.common.Constant; +//import org.apache.hugegraph.controller.BaseController; +//import org.apache.hugegraph.entity.op.AuditEntity; +//import org.apache.hugegraph.exception.InternalException; +//import org.apache.hugegraph.logger.AuditOperationEnum; +//import org.apache.hugegraph.service.op.AuditService; +//import org.apache.hugegraph.util.JsonUtil; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.web.bind.annotation.*; +// +//import javax.servlet.http.HttpServletResponse; +//import java.io.IOException; +//import java.io.OutputStream; +//import java.nio.charset.StandardCharsets; +//import java.util.Arrays; +//import java.util.List; +//import java.util.stream.Collectors; +// +//@RestController +//@RequestMapping(Constant.API_VERSION + "audits") +//public class AuditController extends BaseController { +// @Autowired +// AuditService auditService; +// +// @GetMapping("operations/list") +// public Object listOperations() { +// List operations = Arrays.stream(AuditOperationEnum.values()) +// .map(AuditOperationEnum::getName) +// .collect(Collectors.toList()); +// +// return operations; +// } +// +// @GetMapping("services/list") +// public Object listServices() throws IOException { +// List operations = auditService.listServices(); +// +// return operations; +// } +// +// @SneakyThrows +// @PostMapping("query") +// public Object query(@RequestBody AuditService.AuditReq auditReq) { +// return auditService.queryPage(auditReq); +// } +// +// @PostMapping("export") +// public void export(HttpServletResponse response, +// @RequestBody AuditService.AuditReq auditReq) { +// String fileName = String.format("audit.txt", auditReq.startDatetime, +// auditReq.endDatetime); +// +// response.setCharacterEncoding("UTF-8"); +// response.setContentType("application/octet-stream"); +// response.setHeader("Access-Control-Expose-Headers", +// "Content-Disposition"); +// response.setHeader("Content-Disposition", +// "attachment;filename=" + fileName); +// try { +// OutputStream os = response.getOutputStream(); +// for (AuditEntity auditEntity : auditService.export(auditReq)) { +// os.write((JsonUtil.toJson(auditEntity) + "\n") +// .getBytes(StandardCharsets.UTF_8)); +// } +// os.close(); +// } catch (IOException e) { +// throw new InternalException("Audit Log Write Error", e); +// } +// } +//} diff --git a/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/service/saas/PrometheusService.java b/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/service/saas/PrometheusService.java index ec341c375..b9c599ca2 100644 --- a/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/service/saas/PrometheusService.java +++ b/hugegraph-hubble/hubble-be/src/main/java/org/apache/hugegraph/service/saas/PrometheusService.java @@ -18,8 +18,8 @@ package org.apache.hugegraph.service.saas; -import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; +import okhttp3.Response; import org.apache.hugegraph.config.HugeConfig; import org.apache.hugegraph.options.HubbleOptions; import org.apache.hugegraph.rest.AbstractRestClient; @@ -161,16 +161,26 @@ private static String encodeUrl(String url) { .replaceAll("%29", ")") .replaceAll("\\+", "%20"); } +// TODO re-evaluate this change +// private static class MetricsClient extends AbstractRestClient { +// public MetricsClient(String url, int timeout) { +// super(url, timeout); +// } +// +// @Override +// protected void checkStatus(Response response, Response.Status... statuses) { +// +// } +// +// } private static class MetricsClient extends AbstractRestClient { public MetricsClient(String url, int timeout) { super(url, timeout); } - @Override - protected void checkStatus(Response response, Response.Status... statuses) { + protected void checkStatus(Response response, int... ints) { } - } }